使用 fastlane 构建带有通知扩展的 iOS 应用
Build iOS app with Notification Extension with fastlane
我最近在我的应用程序中添加了一个通知扩展,它是用 fastlane 构建的。添加通知扩展后,由于某些代码签名问题,构建总是失败。
构建我的应用程序并将其上传到 TestFlight 的通道是:
lane :beta do
increment_build_number(
build_number: latest_testflight_build_number + 1,
xcodeproj: "ios.xcodeproj"
)
match(app_identifier: ["my.app.bundleid", "my.app.bundleid.extension" type: "appstore")
gym(scheme: "prod")
ENV["DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS"] = "-t DAV"
pilot(
skip_submission: true,
skip_waiting_for_build_processing: true
)
end
我已经为两个包 ID 创建了应用程序 ID 和配置文件,并且为它们都启用了推送通知。
即使我在 运行 fastlane beta
之后收到以下错误:
[19:13:20]: $ /usr/bin/xcrun /Library/Ruby/Gems/2.3.0/gems/fastlane-2.96.1/gym/lib/assets/wrap_xcodebuild/xcbuild-safe.sh -exportArchive -exportOptionsPlist '/var/folders/vq/j6j2lh1s3cz7cbpw7shc9149fy4t4_/T/gym_config20180601-5305-a3y0ow.plist' -archivePath /Users/viktor.plezer/Library/Developer/Xcode/Archives/2018-06-01/prod\ 2018-06-01\ 19.07.57.xcarchive -exportPath '/var/folders/vq/j6j2lh1s3cz7cbpw7shc9149fy4t4_/T/gym_output20180601-5305-ghy31c'
+ xcodebuild -exportArchive -exportOptionsPlist /var/folders/vq/j6j2lh1s3cz7cbpw7shc9149fy4t4_/T/gym_config20180601-5305-a3y0ow.plist -archivePath '/Users/viktor.plezer/Library/Developer/Xcode/Archives/2018-06-01/prod 2018-06-01 19.07.57.xcarchive' -exportPath /var/folders/vq/j6j2lh1s3cz7cbpw7shc9149fy4t4_/T/gym_output20180601-5305-ghy31c
2018-06-01 19:13:21.181 xcodebuild[7741:1606819] [MT] IDEDistribution: -[IDEDistributionLogging _createLoggingBundleAtPath:]: Created bundle at path '/var/folders/vq/j6j2lh1s3cz7cbpw7shc9149fy4t4_/T/prod_2018-06-01_19-13-21.180.xcdistributionlogs'.
2018-06-01 19:13:25.613 xcodebuild[7741:1606819] [MT] IDEDistribution: Step failed: <IDEDistributionSigningAssetsStep: 0x7ff969a6c950>: Error Domain=IDEDistributionSigningAssetStepErrorDomain Code=0 "Locating signing assets failed." UserInfo={NSLocalizedDescription=Locating signing assets failed., IDEDistributionSigningAssetStepUnderlyingErrors=(
"Error Domain=IDEProvisioningErrorDomain Code=9 \"\"prod.app\" requires a provisioning profile with the Push Notifications feature.\" UserInfo={NSLocalizedDescription=\"prod.app\" requires a provisioning profile with the Push Notifications feature., NSLocalizedRecoverySuggestion=Add a profile to the \"provisioningProfiles\" dictionary in your Export Options property list.}"
)}
error: exportArchive: "prod.app" requires a provisioning profile with the Push Notifications feature.
Error Domain=IDEProvisioningErrorDomain Code=9 ""prod.app" requires a provisioning profile with the Push Notifications feature." UserInfo={NSLocalizedDescription="prod.app" requires a provisioning profile with the Push Notifications feature., NSLocalizedRecoverySuggestion=Add a profile to the "provisioningProfiles" dictionary in your Export Options property list.}
** EXPORT FAILED **
[19:13:26]: Exit status: 70
[19:13:26]: No provisioning profile provided
[19:13:26]: Make sure to pass a valid provisioning for each required target
[19:13:26]: Check out the docs on how to fix this: https://docs.fastlane.tools/actions/gym/#export-options
我已将两个包 ID 添加到我的匹配文件中,fastlane 可以正确下载证书。
provisioningProfiles 字典看起来像:
INFO [2018-06-01 20:08:45.03]: ▸ <?xml version="1.0" encoding="UTF-8"?>
INFO [2018-06-01 20:08:45.03]: ▸ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
INFO [2018-06-01 20:08:45.03]: ▸ <plist version="1.0">
INFO [2018-06-01 20:08:45.03]: ▸ <dict>
INFO [2018-06-01 20:08:45.03]: ▸ <key>method</key>
INFO [2018-06-01 20:08:45.03]: ▸ <string>app-store</string>
INFO [2018-06-01 20:08:45.03]: ▸ <key>provisioningProfiles</key>
INFO [2018-06-01 20:08:45.03]: ▸ <dict>
INFO [2018-06-01 20:08:45.03]: ▸ <key>my.app.bundleid.extension</key>
INFO [2018-06-01 20:08:45.03]: ▸ <string>match AppStore my.app.bundleid.extension</string>
INFO [2018-06-01 20:08:45.03]: ▸ <key>my.app.bundleid</key>
INFO [2018-06-01 20:08:45.03]: ▸ <string>match AppStore my.app.bundleid</string>
INFO [2018-06-01 20:08:45.03]: ▸ </dict>
INFO [2018-06-01 20:08:45.03]: ▸ <key>signingStyle</key>
INFO [2018-06-01 20:08:45.03]: ▸ <string>manual</string>
INFO [2018-06-01 20:08:45.03]: ▸ </dict>
INFO [2018-06-01 20:08:45.03]: ▸ </plist>
INFO [2018-06-01 20:08:45.03]: ▸ -----------------------------------------
为什么 fastlane 开始搜索 prod.app 而不是 my.app.bundleid 的配置文件?
这正是我收到的错误,我的问题是扩展的 plist 文件中 CFBundleIdentifier
的无效值。将其更改为以下后,构建成功:
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
我最近在我的应用程序中添加了一个通知扩展,它是用 fastlane 构建的。添加通知扩展后,由于某些代码签名问题,构建总是失败。
构建我的应用程序并将其上传到 TestFlight 的通道是:
lane :beta do
increment_build_number(
build_number: latest_testflight_build_number + 1,
xcodeproj: "ios.xcodeproj"
)
match(app_identifier: ["my.app.bundleid", "my.app.bundleid.extension" type: "appstore")
gym(scheme: "prod")
ENV["DELIVER_ITMSTRANSPORTER_ADDITIONAL_UPLOAD_PARAMETERS"] = "-t DAV"
pilot(
skip_submission: true,
skip_waiting_for_build_processing: true
)
end
我已经为两个包 ID 创建了应用程序 ID 和配置文件,并且为它们都启用了推送通知。
即使我在 运行 fastlane beta
之后收到以下错误:
[19:13:20]: $ /usr/bin/xcrun /Library/Ruby/Gems/2.3.0/gems/fastlane-2.96.1/gym/lib/assets/wrap_xcodebuild/xcbuild-safe.sh -exportArchive -exportOptionsPlist '/var/folders/vq/j6j2lh1s3cz7cbpw7shc9149fy4t4_/T/gym_config20180601-5305-a3y0ow.plist' -archivePath /Users/viktor.plezer/Library/Developer/Xcode/Archives/2018-06-01/prod\ 2018-06-01\ 19.07.57.xcarchive -exportPath '/var/folders/vq/j6j2lh1s3cz7cbpw7shc9149fy4t4_/T/gym_output20180601-5305-ghy31c'
+ xcodebuild -exportArchive -exportOptionsPlist /var/folders/vq/j6j2lh1s3cz7cbpw7shc9149fy4t4_/T/gym_config20180601-5305-a3y0ow.plist -archivePath '/Users/viktor.plezer/Library/Developer/Xcode/Archives/2018-06-01/prod 2018-06-01 19.07.57.xcarchive' -exportPath /var/folders/vq/j6j2lh1s3cz7cbpw7shc9149fy4t4_/T/gym_output20180601-5305-ghy31c
2018-06-01 19:13:21.181 xcodebuild[7741:1606819] [MT] IDEDistribution: -[IDEDistributionLogging _createLoggingBundleAtPath:]: Created bundle at path '/var/folders/vq/j6j2lh1s3cz7cbpw7shc9149fy4t4_/T/prod_2018-06-01_19-13-21.180.xcdistributionlogs'.
2018-06-01 19:13:25.613 xcodebuild[7741:1606819] [MT] IDEDistribution: Step failed: <IDEDistributionSigningAssetsStep: 0x7ff969a6c950>: Error Domain=IDEDistributionSigningAssetStepErrorDomain Code=0 "Locating signing assets failed." UserInfo={NSLocalizedDescription=Locating signing assets failed., IDEDistributionSigningAssetStepUnderlyingErrors=(
"Error Domain=IDEProvisioningErrorDomain Code=9 \"\"prod.app\" requires a provisioning profile with the Push Notifications feature.\" UserInfo={NSLocalizedDescription=\"prod.app\" requires a provisioning profile with the Push Notifications feature., NSLocalizedRecoverySuggestion=Add a profile to the \"provisioningProfiles\" dictionary in your Export Options property list.}"
)}
error: exportArchive: "prod.app" requires a provisioning profile with the Push Notifications feature.
Error Domain=IDEProvisioningErrorDomain Code=9 ""prod.app" requires a provisioning profile with the Push Notifications feature." UserInfo={NSLocalizedDescription="prod.app" requires a provisioning profile with the Push Notifications feature., NSLocalizedRecoverySuggestion=Add a profile to the "provisioningProfiles" dictionary in your Export Options property list.}
** EXPORT FAILED **
[19:13:26]: Exit status: 70
[19:13:26]: No provisioning profile provided
[19:13:26]: Make sure to pass a valid provisioning for each required target
[19:13:26]: Check out the docs on how to fix this: https://docs.fastlane.tools/actions/gym/#export-options
我已将两个包 ID 添加到我的匹配文件中,fastlane 可以正确下载证书。
provisioningProfiles 字典看起来像:
INFO [2018-06-01 20:08:45.03]: ▸ <?xml version="1.0" encoding="UTF-8"?>
INFO [2018-06-01 20:08:45.03]: ▸ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
INFO [2018-06-01 20:08:45.03]: ▸ <plist version="1.0">
INFO [2018-06-01 20:08:45.03]: ▸ <dict>
INFO [2018-06-01 20:08:45.03]: ▸ <key>method</key>
INFO [2018-06-01 20:08:45.03]: ▸ <string>app-store</string>
INFO [2018-06-01 20:08:45.03]: ▸ <key>provisioningProfiles</key>
INFO [2018-06-01 20:08:45.03]: ▸ <dict>
INFO [2018-06-01 20:08:45.03]: ▸ <key>my.app.bundleid.extension</key>
INFO [2018-06-01 20:08:45.03]: ▸ <string>match AppStore my.app.bundleid.extension</string>
INFO [2018-06-01 20:08:45.03]: ▸ <key>my.app.bundleid</key>
INFO [2018-06-01 20:08:45.03]: ▸ <string>match AppStore my.app.bundleid</string>
INFO [2018-06-01 20:08:45.03]: ▸ </dict>
INFO [2018-06-01 20:08:45.03]: ▸ <key>signingStyle</key>
INFO [2018-06-01 20:08:45.03]: ▸ <string>manual</string>
INFO [2018-06-01 20:08:45.03]: ▸ </dict>
INFO [2018-06-01 20:08:45.03]: ▸ </plist>
INFO [2018-06-01 20:08:45.03]: ▸ -----------------------------------------
为什么 fastlane 开始搜索 prod.app 而不是 my.app.bundleid 的配置文件?
这正是我收到的错误,我的问题是扩展的 plist 文件中 CFBundleIdentifier
的无效值。将其更改为以下后,构建成功:
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>