xcodebuild可以管理自动签名吗?

JW.*_*JW. 36 xcode ios cordova xcode8

摘要:

如果您在Xcode 8中打开一个启用了"自动管理签名"的项目和一个新的捆绑ID,它将自动为其创建和下载配置文件.但是我怎么能让同样的事情发生xcodebuild,所以我可以在远程构建服务器上使用它?

细节:

我正在尝试在Mac上构建Cordova应用程序.Cordova将Xcode项目配置为使用"自动管理签名",所以我正在尝试使用它.

我经常更改捆绑包ID,因此我希望Cordova能够使用之前未使用的新捆绑包ID来构建它.

但是当我运行时cordova build ios --release --device --buildConfig build.json,我得到一个返回代码65和以下错误:

Check dependencies
No profiles for 'com.my.bundle.id' were found:  Xcode couldn't find a provisioning profile matching 'com.my.bundle.id'.
Code signing is required for product type 'Application' in SDK 'iOS 10.3'

** ARCHIVE FAILED **

The following build commands failed:
    Check dependencies
(1 failure)
Error: Error code 65 for command: xcodebuild with args: -xcconfig,/cordova-project/platforms/ios/cordova/build-debug.xcconfig,-workspace,MyApp.xcworkspace,-scheme,MyApp,-configuration,Debug,-destination,generic/platform=iOS,-archivePath,MyApp.xcarchive,archive,CONFIGURATION_BUILD_DIR=/cordova-project/platforms/ios/build/device,SHARED_PRECOMPS_DIR=/cordova-project/platforms/ios/build/sharedpch
Run Code Online (Sandbox Code Playgroud)

(我可以手动运行该xcodebuild命令并获得相同的错误,因此它可能不是Cordova问题.)

我的build.json文件如下所示:

{
    "ios": {
        "debug": {
            "codeSignIdentity": "iPhone Developer",
            "developmentTeam": "MY_TEAM_ID",
            "packageType": "development"
        },
        "release": {
            "codeSignIdentity": "iPhone Developer",
            "developmentTeam": "MY_TEAM_ID",
            "packageType": "enterprise"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用的是cordova 7.0.1,cordova-ios 4.4.0,Xcode 8.3.3和MacOS 10.12.5.我有一个Apple Enterprise帐户.

我做了什么:

如果我在Xcode中打开生成的项目,它会修复自动签名,从那时起,我可以使用该捆绑包ID成功运行cordova.但是如果我尝试使用不同的包ID运行它,它将再次失败.

我尝试security unlock-keychain ~/Library/Keychains/login.keychain-db先使用,因为这在过去有效,但它没有帮助.

我还尝试在Keychain Access中打开我的私人签名密钥并将其设置为"允许所有应用程序访问此项目",没有任何运气.

无论我是通过--debug还是--release给科尔多瓦,我都会得到同样的错误.

ita*_*195 17

这在Xcode 8中并不直接支持.但是,在Xcode 9中,您可以将-allowProvisioningUpdates传递给xcodebuild,自动签名将像在Xcode UI中一样工作,而无需任何其他工具.

例如 cordova run ios --buildFlag="-allowProvisioningUpdates"

  • 你怎么能用cordova build命令传递这个arg?我试过`--buildFlag =" - allowProvisioningUpdates"`,但它似乎被忽略了 (2认同)

mom*_*ilo 5

答案是肯定的.我使用的和我能确认的是工作,这很棒:

https://fastlane.tools/

您可以将所有内容设置为自动:

  1. 签名密钥
  2. 截图
  3. 在iTunes上载

还有很多其他的东西

在后台它使用xcodebuild命令行.我怀疑这样的事情是可能的,但只是设置,开始和享受.


S. *_*ura 5

因为Automatically manage signing你可以使用Fastlane.它易于安装和设置.

要在远程构建服务器上使用它 - 您可以使用Jenkins.

这里的例子.您需要设置JenkinsFastlane您的远程计算机.比Jenkins检查你repository thread或你只是命令它.在远程构建服务器上Jenkins运行之后Fastlane.而Fastlane将创建你写的所有证书和其他设置Fastfile.

如果您只有一个部署证书,则可以使用已Fastlane调用的服务Match

使用Git轻松地在整个团队中同步您的证书和配置文件

或者只是在本地发送和设置它.

希望它对你有所帮助,祝你好运!

这里的示例beta deploy(对我来说Xcode 9):

 desc "Build devFoo and upload it to Fabric"
      lane :uploadToFabric do
        cocoapods
        cert(
        development: true,
        output_path: "./fastlane"
        )
        sigh(
        development: true,
        output_path: "./fastlane"
        )
        clear_derived_data
        gym(
        scheme: "Foo",
        configuration: "Debug",
        clean: true,
        output_directory: "./fastlane",
        )
        crashlytics(
        api_token: "foofoofoofoo",
        build_secret: "foofoofoofoo",
        emails: ["foo@foo.com"],
        notifications: true
        )
        slack(
        message: "New build for test successfully deployed in Fabric",
        success: true
        )
      end
Run Code Online (Sandbox Code Playgroud)

这里是发布部署的示例:

desc "Build and upload it to the AppStore and TestFlight"
  lane :uploadToAppStore do
    cocoapods

    cert(
    development: false,
    output_path: "./fastlane"
    )
    sigh(
    development: false,
    app_identifier: "foofoo",
    output_path: "./fastlane"
    )
    clear_derived_data
    gym(
    scheme: "Foo",
    configuration: "Release",
    clean: false,
    output_directory: "./fastlane",
    )
    deliver(
    force: true,
    app_identifier: "foo",
    skip_metadata: true,
    skip_screenshots: true,
    submit_for_review: false,
    skip_binary_upload: false
    )
    slack(
    message: "New build successfully deployed to AppStore",
    success: true
    )
    upload_symbols_to_crashlytics(dsym_path: "./fastlane/foo.app.dSYM.zip")
    slack(
    message: "dSYM symbolication files uploaded to Crashlytics",
    success: true
    )
Run Code Online (Sandbox Code Playgroud)