从 Xcode 项目中导出 .ipa 文件,而无需打开 Xcode

Posted

技术标签:

【中文标题】从 Xcode 项目中导出 .ipa 文件,而无需打开 Xcode【英文标题】:Export .ipa file from Xcode project without ever opening Xcode 【发布时间】:2015-04-20 07:42:17 【问题描述】:

我们有一个 API,用户可以调用它来创建 Cordova 应用程序/项目,上传他们的 www 目录,然后开始编译并下载可执行的二进制文件。然后这个二进制文件将进入私有应用商店。

ios 的编译步骤有问题。 Cordova 构建步骤没有问题,但它不会像 android 那样输出二进制文件。在阅读了我在 *** 和其他地方找到的所有内容后,计划是这样的:

xcodebuild clean -configuration Release -alltargets
xcodebuild -scheme MyApp archive -archivePath build/MyApp
xcodebuild -exportArchive -exportFormat ipa -archivePath "build/MyApp.xcarchive" -exportPath "MyApp.ipa" -exportProvisioningProfile "My Prov Profile"

鉴于签名身份和一切设置正确,它几乎可以工作。第一个命令执行良好。第二个命令只是挂起。

但是,如果我在 Xcode 中打开项目,然后执行命令,它会编译并导出,我会得到一个 .ipa 文件,这正是我想要的。 Xcode 似乎在第一次打开项目时设置了一个工作区和一些与方案相关的东西。

有什么方法可以让 xcodebuild(或 xcrun 或其他任何东西)为我创建这个工作区文件?

或者有其他方法可以解决这个问题吗?

现在,我有一个解决方案,我实际打开 Xcode 项目,等待 15 秒,然后继续。但我能想到一千种在某个时候会失败的方法,所以我想把它改成更优雅的东西。

如果相关的话,我目前安装了 Xcode 6.3。


更新:下面 Opal 的回答让我走上了正确的道路(我认为)。我最终做的是根据 Opal 的链接导出一个共享方案,并将其用作未来应用程序的模板。解决方案是这样的:

# Copy shared scheme file into directory
mkdir /path/to/project/dir/MyApp.xcodeproj/xcshareddata
mkdir /path/to/project/dir/MyApp.xcodeproj/xcshareddata/xcschemes
cp data/MyScheme.xcscheme /path/to/project/dir/MyApp.xcodeproj/xcshareddata/xcschemes/.

# Use sed to replace app name in scheme file
sed -i '' "s/%app_name%/MyApp/g" MyApp.xcodeproj/xcshareddata/xcschemes/MyScheme.xcscheme

# CD into directory
cd /path/to/project/dir

# Move files from Cordova to our build directory
cp -r CordovaLib/build/* build/.

# Build and export
xcodebuild clean -configuration Release -alltargets
xcodebuild -scheme MyScheme archive -archivePath build/MyApp
xcodebuild -exportArchive -exportFormat ipa -archivePath "build/MyApp.xcarchive" -exportPath "MyApp.ipa" -exportProvisioningProfile "MyProvProfile"

【问题讨论】:

您项目中的方案似乎没有共享,xcode在打开项目后创建它们。您需要共享方案。 @Opal 好的。如何设置共享方案​​? 参见此处:自述文件部分中的github.com/facebook/xctool。 谢谢!会检查出来。 如果它确实改变了什么,请告诉我。 【参考方案1】:

您尝试构建的应用程序似乎没有共享方案。如果未共享方案,则会在项目加载到 xcode 时创建。要创建共享方案,请参阅this 站点。

【讨论】:

【参考方案2】:

这些是我用来自动生成 ipa 的步骤,而无需在我的 cordova 环境中打开 xcode。 (xcode 版本:6.0.1 科尔多瓦版本:3.6.0)

cordova/build.xcconfig 中的更改:CODE_SIGN_IDENTITY=iPhone Distribution(将“Developer”更改为“Distribution”。) 在生成 .app 文件的 cordova 工作区中运行 cordova build ios --device 使用签名:xcrun -sdk iphoneos PackageApplication -v $WORKSPACE/platforms/ios/build/device/$application.name.app -o $WORKSPACE/platforms/ios/build/$application.name.ipa --embed $ios.distribution.provisionfile.mobileprovision --sign $code.signing.identity

【讨论】:

谢谢,但这对我不起作用,我收到一条错误消息,首先是“警告:使用 --preserve-metadata 和选项“resource-rules”(在 Mac OS X 中已弃用 >= 10.10)!”,然后是“/var/folders/8l/l22zrl_n2v34qfxzwfpbdjxc0000gn/T/wh4epkuky9/Payload/TestMac.app/ResourceRules.plist:无法读取资源”。 哦,好的!我正在使用 OS X 10.9.5。我会更新并尝试解决问题。感谢您的更新。

以上是关于从 Xcode 项目中导出 .ipa 文件,而无需打开 Xcode的主要内容,如果未能解决你的问题,请参考以下文章

在开发方法中导出ipa时出错

从 Cocoa 应用程序项目中导出 XCode 中的 OSX 可执行文件

是否可以从 Xcode 中将“.app”构建文件安装到 iPad,而无需加载实际的项目文件?

使用 xcode 从 react native 导出 ipa

如何在 Xcode 中导出应用程序文件

应用程序从 ipa 文件崩溃,但从 Xcode 运行良好?