iTunesConnect构建版本一直处于”正在处理”状态

昨天使用Xcode7.1构建了新版本,按照正常的情况下,提交成功后,构建的版本需要经过一个处理过程,一般是20分钟左右,这个过程中,该版本是不能被选择的,只有处理结束之后(也就是没有‘正在处理’这几个字)才可以选择并提交以供审核。但是昨天我提交成功后近3个小时,该构建版本依然处于‘正在处理’状态,然后我又构建了一个新版本,过来许久,这两个构建

的版本都依然处于‘正在处理’状态

%title插图%num
遇到这种情况,难免少不了百度一下,很多人都遇到过,特别是Xcode7或者Xcode7.1提交的,结果就是没结果。所以在这种情况下,就不要白费心思了,直接给苹果技术团队写邮件(苹果规定的是24小时之后仍然是处于‘正在处理’状态,才给他发邮件,时间不急就等等),说明缘由,千万不要一直等待,因为你不知道*后的结果,反正我是写了邮件,然后第二天登陆iTunesConnect发现两个版本都可以选择了,但是苹果没有回邮件。说那么多,意思就是,千万别傻等,实在解决不了,也别多想,做苹果开发,要习惯每时每刻都会遇到各种奇葩问题!

判断广播接收者BroadcReceiver是否已经注册

判断广播是否已注册

在做Android项目时,有时候需要知道某个BroadcastReceiver是否已经注册,从而决定是发送广播让Receiver处理,还是通过其他方式处理。
那么,如何判断某个广播接收者BroadcReceiver是否已经注册了呢?
PackageManager 类中提供了 List<ResolveInfo> queryBroadcastReceivers(Intent intent, int flags) 方法来查询Intent对应的所有广播接收者。
使用举例:
    Intent intent = new Intent();
    intent.setAction(“com.xxx.powersaving.INSTALLAPP”);

intent.putExtra(“path”, apkPath);

    PackageManager pm = context.getPackageManager();
    List<ResolveInfo> resolveInfos = pm.queryBroadcastReceivers(intent, 0);
    if(resolveInfos != null && !resolveInfos.isEmpty()){
        //查询到相应的BroadcastReceiver
    }

iOS开发证书都显示“此证书的签发者无效”,更新WWDR Certificate证书后还是显示无效

1、首先iOS开发证书显示“此证书的签发者无效”,是由于WWDR Certificate证书过期导致的,需要更新WWDR Certificate证书!

1)下载*新WWDR Certificate证书

WWDR Certificate证书下载地址:https://developer.apple.com/certificationauthority/AppleWWDRCA.cer

下载完,双击打开安装

安装后重新查看iOS开发证书,依然显示“此证书的签发者无效”,什么原因呢?因为还没有删除过期的WWDR Certificate证书

%title插图%num

2)删除过期WWDR Certificate证书

打开钥匙串,显示过期证书(默认是隐藏),点击 显示->显示已过期的证书

在所有项目与系统中删除过期的WWDR Certificate证书

%title插图%num

3)删除完之后,后头看原来的iOS证书,就变成有效的了

 

SMTP 使用了哪些端口?

我在服务器配置安全组的时候放行了 SMTP 使用的 25 端口,但是无法正常发送邮件,全开端口才可以。
SMTP 也是像 FTP 一样还使用了其他端口传输数据吗?
SMTP 端口 FTP 放行6 条回复 • 2017-03-02 22:00:06 +08:00
BOYPT 1
BOYPT 2017-03-02 15:31:28 +08:00
并不。
25 端口是 SMTP 服务器接受邮件用的。
finian 2
finian 2017-03-02 16:24:27 +08:00
25/465/587/994
meteor 3
meteor 2017-03-02 17:22:23 +08:00
邮件服务器 <=> 客户端
SMTP 465 587

邮件服务器 <=> 邮件服务器
SMTP 25

对服务器而言 25 端口是邮箱服务器之间通讯的端口 不是和客户端通讯的端口
https://en.wikipedia.org/wiki/Simple_Mail_Transfer_Protocol#Ports
RobertYang 4
RobertYang 2017-03-02 17:34:03 +08:00 via Android
@BOYPT @finian @meteor 十分感谢
nfroot 5
nfroot 2017-03-02 20:32:50 +08:00
@meteor 但是客户端是设置这个端口连接服务器啊
julyclyde 6
julyclyde 2017-03-02 22:00:06 +08:00
smtp 是一串机器转递邮件的过程
根据发送方的策略,有可能直接发 25 ,也可能先试试加密端口再试 25
但无论如何, smtp 都是单端口协议

@meteor 说的是没有考虑到策略的通常情况
不过现代邮件服务器默认行为应该都是先尝试加密,再尝试 25 端口 starttls ,*后是 25 端口明文

苹果开发者账号之DUNS查询与申请

1. 首先登陆苹果开发者中心:https://developer.apple.com/programs/
如图有一个按钮enroll,意思是苹果开发者报名(说白了就是要交钱,好让你具备APP测试和上线功能)。

%title插图%num

2. 点击enroll后出现如下界面
大概意思是报名有两种方式:

作为个人账号需要提供基本的个人信息,包括你的法律名称和地址。

作为一个组织你需要一个苹果ID、一个D-U-N-S、法人地位(知道法人信息就可以了)、法律约束力的权威。

然后有一个按钮Start Your Enrollment,点击按钮

%title插图%num

3. 出现如下界面
要你选择注册的是个人/公司/企业账号(这个自己查,我申请的是公司账号)

%title插图%num

4. 选择公司后,出现如下界面
提示大家:需要法人信息,DUNS码

DUNS(Data Universal Numbering System)就是一种商业实体或组织机构的标识符,当然,这个DUNS号码是由Dun & Bradstreet,中文名邓白氏公司创造的,以9个数字代表一个行业。每个公司对应一个duns码,苹果通过duns码验证你的公司是否是合格的公司。

在duns提示中有一个Check now就是检查公司是否存在duns码。点击Check now

%title插图%num

出现如下界面

4.1要求填写公司基本信息
公司所在地:China

Legal Entity Name:填写公司英文名称(将中文名称翻译过来)

Tradestyle or DBA:是可选项,不填

%title插图%num

4.2 Headquarters address of your company/organization和Mailing address of your company/organization
分别是公司总部地址和公司接收邮件的地址,如果一样就填写相同地址。

Street Address 街道详细地址 CIty/Town 市或者区

State/Province 直辖市或者省 Postal Code 邮编

Phone Number:自己的手机号

%title插图%num

4.3 your work contact information你工作的联系信息
Given Name 姓

Family 名字

Job Title 工作职称

Phone Number:你自己的手机号

Work Email 可联系的邮箱

%title插图%num

注意:以上的信息一定要用英文并且一定要真实

5. 当你填写完上面的信息时,点击Continue,它就会显示你的公司是否已经注册了邓白氏码,如果没有,可以把这个信息提交到邓白氏公司,到时候会得到一串邓白氏码。

%title插图%num

6. *后会提示你已将信息提交到邓白氏公司,等待邓白氏公司打电话确认。

%title插图%num

后续再添加苹果开发者账号申请剩下的流程!

Android 之使用LocalBroadcastManager解决BroadcastReceiver安全问题

Android 之使用LocalBroadcastManager解决BroadcastReceiver安全问题

Android系统中,BroadcastReceiver的设计初衷就是从全局考虑的,可以方便应用程序和系统、应用程序之间、应用程序内的通信,所以对单个应用程序而言BroadcastReceiver是存在安全性问题的,相应问题及解决如下:

在发送广播时指定接收者必须具备的permission。或通过Intent.setPackage设置广播仅对某个程序有效。

2.  当应用程序注册了某个广播时,即便设置了IntentFilter还是会接收到来自其他应用程序的广播进行匹配判断。对于动态注册的广播可以通过类似registerReceiver(BroadcastReceiver, IntentFilter, String, android.os.Handler)的接口指定发送者必须具备的permission,对于静态注册的广播可以通过android:exported=”false”属性表示接收者对外部应用程序不可用,即不接受来自外部的广播。

上面两个问题其实都可以通过LocalBroadcastManager来解决:

Android v4 兼容包提供android.support.v4.content.LocalBroadcastManager工具类,帮助大家在自己的进程内进行局部广播发送与注册,使用它比直接通过sendBroadcast(Intent)发送系统全局广播有以下几点好处。

1    因广播数据在本应用范围内传播,你不用担心隐私数据泄露的问题。

2    不用担心别的应用伪造广播,造成安全隐患。

3    相比在系统内发送全局广播,它更高效。

其使用方法也和正常注册广播类似:

  1.  LocalBroadcastManager mLocalBroadcastManager;
  2.  BroadcastReceiver mReceiver;
  3.  IntentFilter filter = new IntentFilter();    
  4.  filter.addAction(“test”);    
  5.  mReceiver = new BroadcastReceiver() {    
  6.             @Override    
  7.             public void onReceive(Context context, Intent intent) {    
  8.                 if (intent.getAction().equals(“test”)) {    
  9.                     //Do Something  
  10.                 }
  11.             }
  12.         };
  13. mLocalBroadcastManager = LocalBroadcastManager.getInstance(this);  
  14. mLocalBroadcastManager.registerReceiver(mReceiver, filter);
  15. 当然,和正常广播一样,也要在对应的生命周期中反注册掉:
  16.  @Override  
  17. protected void onDestroy() {  
  18.    super.onDestroy();  
  19.    mLocalBroadcastManager.unregisterReceiver(mReceiver);
  20. }
  1. <pre code_snippet_id=“195849” snippet_file_name=”blog_20140220_3_2735095″></pre><pre></pre><pre></pre><pre></pre>  

Android BroadcastReceiver 注册和反注册

Android BroadcastReceiver 注册和反注册

说起来这个问题很简单,只要注册和反注册成对出现就行,好像很多教材都是如此介绍。但实际开发中,对广播注册和反注册的时机把握还是很重要的。

关于广BroadcastReceiver注册和反注册时机,主要有以下几点:

onCreate – onDestroy(即便页面未显示,仍然能接受广播)
onResume – onPause(即只有页面显示时,才能接受广播)
onStart – onStop

https://stackoverflow.com/questions/21136464/when-to-unregister-broadcastreceiver-in-onpause-ondestroy-or-onstop

 

当注册广播时,常会遇到的问题就是重复注销广播处理函数是会报错,而且会让进程奔溃。一般来说,可以通过一个变量来保存广播处理是否被注销,每当注销时,将它标记为false。如果再次注销时遇到false就不对他进行注销处理。

曾经我遇到过几次异常,提示我的BroadcastReceiver多次被反注册,导致系统异常死掉。废了很长时间查看代码找原因。。

比如我之前常在finish方法中反注册广播,但finish方法有可能被多次调用,导致 BroadcastReceiver多次被反注册。

另外,需要注意一点,你用什么contex(上下文)注册的广播,则必须用它来反注册。

比如你调用getApplicationContext()注册,用getApplicationContext()删除。而不能直接unregisterReceiver(mFinishReceiver);和registerReceiver(mFinishReceiver, filter);有可能找不到。

DUNS及苹果开发者账号申请

申请邓氏编码需要的资料

1. 公司完整的英文名

2. 街道详细地址、市或区、省或直辖市、邮政编码、手机号码

3. 姓,名,工作职称,手机号码,工作邮箱

PS:以上信息全部为英文。

https://developer.apple.com/program/enroll/dunsLookupForm.action

申请企业账号需要的资料

个人账号($99)

公司账号($99)

企业账号($299)

个人账号和公司账号可以提交AppStore,区别在于公司账号可以在AppStore上面显示公司信息;企业账号不可以提交AppStore,一般用于公司内部app使用。

申请公司或企业账号需要的资料:

1. Apple ID;

2. 如果申请者不是公司法人,则需要以下信息;若是公司法人,则不需要:

1. first name:公司法人姓的拼音

2. last name:公司法人名的拼音

3. title:公司法人的职称

4. phone:座机号码(如有分机号需填写),手机号码也可;

5. email:电子邮箱

3. 公司完整的英文名;

4. 邓式编码;

5. 公司网址地址;

6. 工作邮箱;

7. 座机号码(如有分机号需填写),手机号码也可;

PS:以上资料全部为英文。

PS:注意sellername的设置,只有一次机会

有种想把公司的服务器的 centos7 换成 arch 了

*终还是下手了,虽然是内部的测试机。

用这个vps2arch的同学注意备份。

实在不想去搞 centos7.

想换成 ubuntu server 16.04.

请问 centos 有啥好的,作为生产服务器。

听说跑 docker 会有坑。

centos7 centos Ubuntu Arch27 条回复 • 2017-04-23 18:21:51 +08:00
whileFalse 1
whileFalse 2017-04-22 20:48:29 +08:00
如果只是跑 docker 的话,宿主机是什么系统跟业务关系不大吧。我就选的 ubuntu 14.04 。
zhaoxiting1997 2
zhaoxiting1997 2017-04-22 20:49:59 +08:00 via Android
centos 好处就是稳定,内核多年不更新,*新版的内核似乎还在 3.10?centos5 今年 3 月份底才刚刚结束支持。。。
keysona 3
keysona 2017-04-22 21:01:21 +08:00
@whileFalse 内核太老跑 docker 貌似会出现些奇怪的问题。

@zhaoxiting1997 稳定过头了…或者说太落后了….
AstroProfundis 4
AstroProfundis 2017-04-22 21:04:31 +08:00
主流生产环境喜欢用 RH 系的系统是有原因的,老旧和落后意味着超级稳定,因为不动就不会出事
我只想说楼主你要想清楚换成小众系统*大的问题来源不是系统本身也不是你,而是其他会使用这个系统的人
hcymk2 5
hcymk2 2017-04-22 21:10:50 +08:00
aufs 文件系统有坑
imWBB 6
imWBB 2017-04-22 21:18:51 +08:00 via iPhone
勇士你好
holyghost 7
holyghost 2017-04-22 21:22:26 +08:00 via iPhone
大家好我是新来的,请问怎么给这位大哥点蜡????
keysona 8
keysona 2017-04-22 21:24:41 +08:00
@AstroProfundis

开玩笑的…

其实是想换成 ubuntu 拉。

额,公司就我一个后台,想方便自己维护。
keysona 9
keysona 2017-04-22 21:25:16 +08:00
@imWBB
@holyghost

没事,测试机而已,我还不用跑路。
lucifer9 10
lucifer9 2017-04-22 21:46:02 +08:00
我用了两种思路去解读题目都是觉得看不明白

keysona 11
keysona 2017-04-22 21:50:51 +08:00
@lucifer9 你不提醒我都忘了,标题少了冲动两个字。
huijiewei 12
huijiewei 2017-04-22 22:16:48 +08:00
ubuntu LTS 可以考虑, Arch 还是算了吧,滚着滚着自己就要滚蛋了
billlee 13
billlee 2017-04-22 23:18:53 +08:00
CentOS 的内核太旧,一些 docker 需要的特性会没有吧,不过我没试过
Debian stable 的内核也不能支持 docker 的全部功能,主要是 cgroup 的功能不全
可以试试 Ubuntu LTS
Suddoo 14
Suddoo 2017-04-22 23:39:52 +08:00 via Android
arch 滚动更新,软件包太新了,兼容性不行,一般都是个人 pc 装 arch ,服务器上追求稳定,还是用 ubuntu 吧。
wdlth 15
wdlth 2017-04-22 23:47:12 +08:00
红帽内核虽然不新,但是维护是持续的,除非你确定各种驱动能匹配新内核,不然还是别作死吧……
wwhc 16
wwhc 2017-04-23 00:24:38 +08:00
如果不想滚着滚着就滚蛋了,用同样滚动更新的 Gentoo 吧
ryd994 17
ryd994 2017-04-23 00:49:51 +08:00 via Android
用什么 aufs 嘛……大家都用 overlayfs 了
whileFalse 18
whileFalse 2017-04-23 07:30:42 +08:00 via iPhone
@keysona 所以说宿主机系统跟 [业务] 关系不大嘛。以及稳定性一般也不是问题了,毕竟 docker 承载的业务基本是能接受重启和迁移到另一台机器的。
kiwi95 19
kiwi95 2017-04-23 08:57:10 +08:00 via Android
月经贴, centos 有啥好,为什么不用 ubuntu
keysona 20
keysona 2017-04-23 09:40:01 +08:00
@kiwi95 我是收拾烂摊子。公司的服务器一开始就是 centos7 ,这系统感觉增加了维护成本,所以现在想切到 ubuntu 了。
dongxiaozhuo 21
dongxiaozhuo 2017-04-23 10:42:00 +08:00 via iPhone
想尝鲜?试试 fedora 吧,和 centos 7 的操作更相似一些。
crytis 22
crytis 2017-04-23 11:34:50 +08:00 via iPhone
存在就是有意义的
shlabc 23
shlabc 2017-04-23 12:55:23 +08:00
作为维护,稳定不是*要素吗?工作是工作,生活是生活
znood 24
znood 2017-04-23 16:12:43 +08:00
楼主太年轻
ubear1991 25
ubear1991 2017-04-23 17:56:11 +08:00
捉住一只 kiwi 鸟
expy 26
expy 2017-04-23 18:08:30 +08:00
脚本好评, ss 服务器分分钟换成 arch 。
floopy 27
floopy 2017-04-23 18:21:51 +08:00
公司既然选择了 centos 就有他的道理,生产环境和自用没法比的

iOS开发代码规范

命名规范

1. 分类(类别)命名

与类名相同,此处需添加要扩展的类名和“+”;

例如:NSString+URLEncoding

2. 协议(代理)命名

与类名相同,此处需添加“Delegat”后缀

例如:UITableViewDelegate

3. 方法命名

首字母小写,之后的每个单词首字母都大写

例如:- (void)setupPostWithValue:(int)value

4. 参数命名

首字母小写,之后的每个单词首字母都大写,如果方法内参数过多,每个参数占用一行,冒号对齐。

例如:- (void)writeFisrtNumber:(NSString *)firstStr

withNextNumber:(NSString *)nextStr

withLastNumber:(NSString *)lastStr

5. 对象命名

对象命名需要用修饰+类型的方式

例如:titleLabel或titleLbl、confirmButton或confirmBtn。

6. 图片命名

使用英文,全部小写,添加模块名作为前缀,防止冲突。

(模块名)_(功能属性简写+描述)@2x.png (2x代表2倍像素,3x代表三倍像素)

例如:被选中的按钮图片:bg_btn_selected@2x.png、bg_btn_selected@3x.png

导航条背景图片:bg_nav_bar@2x.png、bg_nav_bar@3x.png

导航条返回按钮图片:bg_nav_back_normal@2x.png bg_nav_back_normal@3x.png

7. 分组命名

使用英文,首字母大写,之后每个单词的首字母军大写。

每个分组使用模块的名字。

使用的开源库统一放在“Library”分组下。

使用的公共组件统一放在“Common”分组下。

使用资源统一放在“Resource”分组下,包括文件、音频等。

代码规范

1. 避免在程序中出现常量,当使用次数较多时应以宏定义的形式来替代,对于常量的命名*好在前面加上字母k。

2. 使用MVC设计模式。

3. 添加必要的注释。

4. 代码后面的“{”不要单独占一行。

5. 相同的逻辑方法定义避免出现在多个地方,尽量将公用的类,方法抽取出来。

6. 多使用#pragmamark – name 来进行分组。

7. 方法之间使用两个空行分隔。

8. 合理的使用宏定义。