XCodebuild 指定目标并链接框架

标签 xcode macos xcodebuild install-name-tool

我有一个项目,需要生成两个可执行文件,一个是 64 位 (x64_86),另一个是 32 位 (i386);它们不能合并。

该项目包括链接到第三方框架。

在 XCode 中编译没有问题。

单独使用 xcodebuild 时(未传递参数),64 位二进制文​​件将按预期构建,并且第 3 方框架将链接到正确的引用。使用 otool -L 显示

@rpath/Frameworks/thirdpartybundle.framework/Versions/A/thirdpartybundle

但是,当我编译 32 位二进制文​​件时,引用的框架是错误的,otool -L 显示:-

@rpath/Frameworks/mytool32.framework/Versions/A/mytool32

其中“mytool32”是传递给 xcodebuild 的产品名称。我尝试使用以下命令构建 32 位版本:-

xcodebuild -project mytool.xcodeproj -scheme mytool VALID_ARCHS=i386 CURRENT_ARCH=i386 ONLY_ACTIVE_ARCH=NO ARCHS=i386 PRODUCT_NAME=mytool32

我也尝试过这个:-

xcodebuild -project mytool.xcodeproj -destination 'platform=OS X,arch=i386' -target mytool PRODUCT_NAME=mytool32

无论哪种方式,它们都会生成一个带有错误的框架路径的二进制文件,并用产品名称代替框架名称。

如何使用 xcodebuild 构建 32 位版本,指定产品名称,但使用第三方框架的正确路径?

最佳答案

经过实验,生成与 xcodebuild 一起使用的两个可执行文件(一个 32 位和一个 64 位)的最简单方法是使用 XCode 创建第二个目标,然后从第一个目标复制代码以供第二个目标使用,在使用 xcodebuild 之前。

这允许独立地为每个目标设置build设置,然后可以与 xcodebuild 一起使用。

假设我们有两个目标; app_x64(64位,产品名称设置为app)和app_x32(32位,产品名称设置为app32),我们可以使用xcodebuild构建两者:-

xcodebuild -target app_x64
xcodebuild -target app_x32

这会生成所需的可执行文件。如果使用第三方框架,只需确保为两个目标设置依赖关系。

关于XCodebuild 指定目标并链接框架,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27291398/

相关文章:

带有 characterAtIndex 的 Objective-C NSString for 循环

ios - 使用文件夹引用而不是组创建纹理图集

ios - 使用无人值守的 xcodebuild 管理钥匙串(keychain)以协同设计 macOS/iOS 应用程序

ios - 如何以编程方式更改文本字段字体大小?

macos - 使用反射运行 Go 服务器时 Mac 反复要求接受网络连接

ios - 如何在 Xcode 构建完成时设置警报?

swift - 在 Interface Builder 中设计自定义 View

xcode - Github 操作 : xcodebuild fails due to server fingerprint

xcodebuild: "No applicable devices found."导出存档时

ios - IOS swift如何从 "multi-segue relationship page"回到主页面