3

我正在使用出色的iOS 通用框架脚本来构建我自己的框架,并且它在一段时间内运行良好。我不确定确切的时间,但它似乎已经停止构建 i386。使用生成的框架的应用程序不再适用于模拟器。

我已经VALID_ARCHS = arm64 armv7 armv7s i386 x86_64安排好了。和ONLY_ACTIVE_ARCH = NO。构建脚本不会抛出任何错误或日志。然而,我最终得到了一个没有 i386 或 x86_64 的瘦框架,因此任何依赖此框架的项目在为模拟器构建时都会出现链接器错误。

额外信息:

  • 使用来自主仓库的 Mk8 脚本最新版本。
  • 归档,而不是像某些错误所暗示的那样构建。

有任何想法吗?

4

3 回答 3

3

我最近遇到了同样的问题。我不得不调整几个构建设置,让它再次为 i386 和 x86_64 构建。让它为我工作的一个是当我在运行脚本构建阶段取消选中“仅在安装时运行脚本”复选框时。

于 2014-05-07T12:21:59.540 回答
1

这可能是我比较模糊的答案之一,我可能无法具体回答您的问题,因为您在谈论 iOS 通用框架,但也许我可以阐明我的经验。

我发现即使使用正确的方式同时构建i386x86_64架构(使用一个 xcodebuild 调用)也是valid-archs行不通only-active-arch的。

我通过为 x86_64 显式构建并将输出与上一步与 lipo 相结合,解决了在Kiwi项目中创建具有所有 5 个拱门的通用静态库的特定问题。

我的拉取请求的评论如下:

为 x86_64 模拟器显式构建需要一些试验和错误,xcodebuild 似乎无法同时构建 i386 和 x86_64,所以我专门为 x86_64 添加了 [附加] 步骤。

限制 64 位模拟器构建的 VALID_ARCHS、ARCHS 和 IPHONEOS_DEPLOYMENT_TARGET 似乎可以解决问题。

ARCHS='x86_64' VALID_ARCHS='x86_64' IPHONEOS_DEPLOYMENT_TARGET='7.0'

在底层,通用框架只是创建一个带有符号链接和特定结构的静态库(看起来像一个 .framework)。我想 iOS 通用框架和 Kiwi 库有同样的问题。相信更多人有这个问题...

于 2014-05-07T02:02:44.077 回答
0

您需要为所有 archs arm64 armv7 armv7s i386 x86_64 构建脚本,然后使用 lipo 命令构建一个新文件。

要构建 arm64 armv7 armv7s,请使用 iphone 平台 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer,对于 i386 x86_64,请使用模拟器 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform /开发者。

我用它来生成一个 c++ lib。

前任:

    $(CC) $(CFLAGS) -arch x86_64 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer $(CPP_SRC_DIR)/*.cpp

    $(XCODE_AR) rvs $(IOS_TARGET_A_DIR)/$(LIB_NAME).x86_64.a $(IOS_TARGET_O_DIR)/x86_64/*.o
    #Build fat library
    $(XCODE_LIPO) -create $(IOS_TARGET_A_DIR)/*.a -output $(IOS_TARGET_FAT_DIR)/lib.a

我希望这有帮助。

于 2014-05-21T13:18:25.447 回答