升级Xcode 9后,使用fastlane gym打包原有的工程,会报错。错误如下:
2017-10-27 11:04:12.512 xcodebuild[19061:233379] [MT] IDEDistribution: Step failed: <IDEDistributionSigningAssetsStep: 0x7ff57c2f6280>: Error Domain=IDEDistributionSigningAssetStepErrorDomain Code=0 "Locating signing assets failed." UserInfo={NSLocalizedDescription=Locating signing assets failed., IDEDistributionSigningAssetStepUnderlyingErrors=(
"Error Domain=IDEProfileQualificationErrorDomain Code=7 \"Provisioning profile \"XC: *\" doesn't support the Push Notifications capability.\" UserInfo={IDEProfileQualificationError_Profile=<DTDKProvisioningProfile 0x7ff57c0a8580: UUID: 0xxxxxx-1111-2222-3333-444444444444, name: XC: *, team: XXXXXXXX (XXXXXXXX), platform: iOS>, NSLocalizedDescription=Provisioning profile \"XC: *\" doesn't support the Push Notifications capability.}",
"Error Domain=IDEProfileQualificationErrorDomain Code=8 \"Provisioning profile \"XC: *\" doesn't include the aps-environment entitlement.\" UserInfo={IDEProfileQualificationError_Profile=<DTDKProvisioningProfile 0x7ff57c0a8580: UUID: 0fxxxxxxx-1111-2222-3333-444444444444, name: XC: *, team: XXXXXXXXX (XXXXXXXXXXXXX), platform: iOS>, NSLocalizedDescription=Provisioning profile \"XC: *\" doesn't include the aps-environment entitlement., IDEProfileQualificationErrorMissingEntitlements=(\n \"aps-environment\"\n)}"
)}
.app和.xcarchive文件都能创建成功,但是不能导出ipa,看错误信息,应该是使用了wildcard provisioning profile,而不是这个APP专用的PP文件(APP包含push notification feature,需要使用它专用的PP文件导出ipa)。
google查看问题,看到帖子:
https://github.com/fastlane/fastlane/issues/9589
喵神的神建议.png
喵神一语道破真相,原来是xcode9不允许访问钥匙串里的内容造成的,需要设置-allowProvisioningUpdates参数
于是,在原有的fastlane gym打包命令后面加上:
--export_xcargs -allowProvisioningUpdates
fastlane gym --workspace MyProject.xcworkspace --scheme myproject --clean --configuration Release --archive_path /Users/xxx/Desktop/temp/myproject.xcarchive --export_method enterprise --output_directory /Users/xxx/Desktop/temp --output_name MyProject.ipa --export_xcargs -allowProvisioningUpdates
再次打包就可以成功。但是,此处需要注意的是,第一次执行这个命令,会弹窗提示是否允许,如图,选择"始终允许"即可.
xcode允许使用keychain1.png
xcode允许使用keychain2.png
Xcode 9使用界面打包export ipa时,会多出一步是否给APP 瘦身 的选择,选择"None",或者不用管,默认就是None。
与Xcode 8不同的时,Xcode 9使用界面打包后,除了ipa文件,还好有其它几个文件:
DistributionSummary.plist
ExportOptions.plist
Packaging.log
其中 DistributionSummary.plist 包含了PP文件的一些内容,例如APP的PP文件过期时间等,可以用来参考,不再需要解压缩ipa后查看包里PP文件的内容,确定ipa的过期时间了。