一、 自动签名和手动签名
官方指导观看WWDC 2016 session 401(What's New in Xcode App Signing)
1. 老工程使用手动管理签名的方式,不用勾选“Automatically manage signing”,在Debug和Release栏选上以前使用profile,Xcode会自动获取到Team和Signing Certificate。
这些操作完成后,查看Build Settings,有一个废弃的provisioning profile设置模块,其他的我们只需要按照Xcode7一样设置就行了。
我们的操作都可以在“Report Navigator”中查看到,点击每条记录还可以查看到更详细的信息。
2. 新工程使用自动管理签名的方式,在Bundle Identifier栏中填写App的identifier,勾选上“Automatically manage signing”,选择App所属的Team,基本上就算好了。点击“i”按钮,还可以查看profile的详细信息,如对应的App ID,Certificates, Team, Capabilities, Entitlements, Devices.
I 如果Team列表中无App所属的Team,需要打开Xcode的Preferences,进入Accounts,添加Apple ID,Xcode就能获取到所属的Team了。
II 如果此时电脑上有连接测试机,status就会出现下面的错误,点击“Register Device”即可解决。
同样,我们的操作都可以在“Report Navigator”中查看到,点击每条记录还可以查看到更详细的信息。
不过,这里显示只创建了development provisioning profile,在测试机上灌版本倒是可以运行了。那么distribution的呢?
参照WWDC中的说法,使用自动管理签名方式的APP,在Organizer中点击“Upload to App Store...”上传iTunes Connect或者"Export..."的时候,就会得到一个distribution signed的ipa/App。(等有机会过一遍这个流程后再来修正吧)
弄一个新App的时候,正好验证了这一说法,点击“Export...”的时候,Xcode生成了一个distribution的certificate和profile,这两样可以在developer的网页中查看到,生成的certificate也自动加载到了电脑上的钥匙串里。
二、关于App support的Capabilities
自动管理签名的方式,需要在Capabilities中配置App支持的features。之前以为手动管理签名的方式就不需要了,今天发现一直支持APNS的App收不到推送消息了,跟进去查看到错误消息如下:
"Failed to get token, error:Error Domain=NSCocoaErrorDomain Code=3000 "未找到应用程序的“aps-environment”的授权字符串" UserInfo={NSLocalizedDescription=未找到应用程序的“aps-environment”的授权字符串}"
经过一番search和尝试,将Capabilities中的“Push Notifications”打开后,便能获取到token,也能收到推送消息。
签名部分如果出现错误,Xcode都有给出错误的原因,按照提示操作一般都能解决问题。
APNS的证书还是需要手动去网页上创建。
三、请求使用摄像头、相册、麦克风等时,App崩溃
以请求使用摄像头为例进行说明,需要在info.plist中添加property:Privacy - Camera Usage Description,写上App请求使用摄像头的理由(即String中需要填写的文字),对应的key为NSCameraUsageDescription。有了这个字段后,崩溃问题解决。
App如果支持多语言,Description就需要翻译,在对应语言的InfoPlist.strings中添上如下格式的语句就行:
NSCameraUsageDescription ="description in language(Chinese/English/...)";
题外话,如果App不需要访问摄像头、相册、麦克风等,那么info.plist中就不用加这些property,工程中也不要去调相关的API,否则提交ipa会通不过iTunes Connect的审核,iTunes Store会发邮件说明没有通过的原因。
四、App内跳转到手机的系统设置某些选项时失败
之前App可以通过openURL+prefs:root=xxx的方式跳转到系统设置中对应的xxx选项,iOS10中此方法失效。不过,UIApplicationOpenSettingsURLString依然有效。