使用fastlane构建具有通知扩展的iOS应用

5
我最近在我的应用程序中添加了一个通知扩展,这个应用程序使用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

我已经为两个Bundle IDs创建了App IDs和配置文件,并且为它们都启用了推送通知。
但是,运行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

我已经在Matchfile中添加了两个包标识符,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 开始搜索生产环境的 provisioning profile,而不是我的 app.bundleid?

嘿,我也遇到了同样的问题,你找到解决方案了吗?(已接受的答案对我不起作用) - Muhammed Refaat
1个回答

2

我收到的确切错误是,在我的情况下,扩展程序的plist文件中的CFBundleIdentifier值无效。一旦我将其更改为以下内容,构建就成功了:

最初的回答:

<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>

1
嘿,Brad!不幸的是,我不再能访问出现问题的项目,但作为这个问题唯一的回答者,我接受你的回答! :) - viplezer
@viplezer 谢谢! :-) - Brad Pitcher
2
在我的情况下,我只是有一个糟糕的配置。我搞乱了pbxproj文件,导致PRODUCT_BUNDLE_IDENTIFIER丢失,所以$(PRODUCT_BUNDLE_IDENTIFIER)为空,并混淆了一切。 - MoOx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接