Ios 如何在命令行中调用内置ProductPackageUtility

Ios 如何在命令行中调用内置ProductPackageUtility,ios,xcode,macos,entitlements,Ios,Xcode,Macos,Entitlements,当您在生成设置(Xcode 4.2.1)中指定权限和代码签名标识时,从Xcode生成时,您将获得以下输出: ProcessProductPackaging "myAppName.entitlements" "/path/to/myAppName.xcent" cd /path/to/myAppName/SourceCode builtin-productPackagingUtility "/path/to/myAppName/SourceCode/myAppName.entitlements"

当您在生成设置(Xcode 4.2.1)中指定权限和代码签名标识时,从Xcode生成时,您将获得以下输出:

ProcessProductPackaging "myAppName.entitlements" "/path/to/myAppName.xcent"
cd /path/to/myAppName/SourceCode
builtin-productPackagingUtility "/path/to/myAppName/SourceCode/myAppName.entitlements" -entitlements -format xml -o "/path/to/myAppName.xcent"


CodeSign "/path/to/Garfields Comic Boom 1.0.app"
cd /path/to/myAppName/SourceCode
setenv CODESIGN_ALLOCATE /Developer/usr/bin/codesign_allocate
/usr/bin/codesign --force --sign "myCertificate" --entitlements "/path/to/myAppName.xcent" "/path/to/myAppName.app"
我想在构建结束时签署我的应用程序文件夹,而不是在Xcode构建期间

我的问题是我不知道如何在命令行中生成xcent文件


问题:如何在命令行中生成xcent文件?我从根目录中找到了,没有所谓的ProductPackageUtility…

使用codesign实用程序不需要xcent文件。您只需创建一个plist文件并将其用于权利。确保它是XML plist,而不是二进制文件

我想在构建结束时对我的应用程序文件夹进行签名,而不是在Xcode构建期间

如果禁用设备生成的代码签名,IIRC最新版本的Xcode会投诉

解决这个问题最简单的方法是让Xcode对其进行签名,然后在以后重新签名。步骤约为

  • 使用
    codesign-d--authentications=MyApp.xcent MyApp.app
  • 如果要更改配置文件,请将新配置文件复制到
    MyApp.app/embedded.mobileprovision
    ,并相应地修改权限(IIRC文件格式具有4字节魔术和4字节长度;请记住更新长度!)
  • 使用您想要的证书重新签名

  • .Authentications和${APPNAME}.xcent的格式是相同的,因此它可以被复制。

    进一步分析的一个起点可能是文件(Xcode 4.4):
    /Applications/Xcode.app/Contents/PlugIns/Xcode3Core.ideplugin/Contents/Framewor‌​ks/DevToolsCore.framework/Versions/Current/Resources/Code-Sign.xcspec(请参阅CommandLine=“builtin-productpackagingputility[…]部分)。Xcode可能实例化类xcworkqueuecommandbuiltinivation\u-productpackagingputility,以运行此任务(它是唯一一个后缀为
    productPackagingUtility
    的类:
    nm/[…]/DevToolsCore.framework/Versions/Current/DevToolsCore | grep-i productPackagingUtility
    )。