代码之家  ›  专栏  ›  技术社区  ›  Tom

针对iPhone SDK 4中的多个平台

  •  3
  • Tom  · 技术社区  · 14 年前

    我有一个iPhone SDK项目,它应该为模拟器和ARM处理器构建一个静态库,然后将这两个库组合成一个通用库。

    到目前为止,我使用iphone sdk 3+并通过为每个人创建一个单独的目标(一个模拟器和一个手臂),然后使用shell脚本生成第三个目标来实现这一点。每个组成目标的部署目标/构建设置都设置为各自的体系结构等。此外,iPhone SDK 3+允许我从主Xcode窗口左上角的下拉菜单中选择“Base SDK”。

    一切都运行得很好——然后我升级到了sdk 4。

    现在,在左上角的下拉菜单中没有“base sdk”列表。此外,编译器似乎完全忽略了目标部署设置。尽管其中一个目标设置为“iphone设备”,另一个目标设置为“iphone模拟器”,但它们仍然像下拉菜单中设置的一样构建。

    如果我还不够清楚,这里是 冒犯性 冒犯前面提到的菜单,我们都知道并且喜欢:

    再一次,在SDK3中,一切都工作得很好。现在在sdk 4中,如果它设置为“device”,我会得到两个为ARM构建的库。如果设置为Simulator,我会为Simulator构建两个库。

    有人知道这个布隆基的解决办法吗?

    非常感谢。

    更新:“xcodebuild”命令行工具仍然有效,也就是说它将根据每个目标的部署参数构建正确的体系结构。

    因此,我可以使用一个shell脚本来调用xcode build,而不是使用xcode的GUI来构建:

    < PRE> xcodebuild-目标设备目标-配置调试 xcodebuild-目标SIM目标-配置调试

    找到一个真正的解决方案仍然是件好事,但这将使目前的工作完成。

    到目前为止,我使用iphone sdk 3+并通过为每个人创建一个单独的目标(一个模拟器和一个手臂),然后使用shell脚本生成第三个目标来实现这一点。每个组成目标的部署目标/构建设置都设置为各自的体系结构等。此外,iPhone SDK 3+允许我从Xcode主窗口左上角的下拉菜单中选择“基本SDK”。

    一切都运行得很好——然后我升级到了sdk 4。

    现在,在左上角的下拉菜单中没有“base sdk”列表。此外,编译器似乎完全忽略了目标部署设置。尽管其中一个目标设置为“iphone设备”,另一个目标设置为“iphone模拟器”,但它们仍然像下拉菜单中设置的一样构建。

    如果我不够清楚,这是 无礼的 违反上述菜单,我们都知道并喜欢:

    offending menu

    再一次,在SDK3中,一切都工作得很好。现在在sdk 4中,如果它设置为“device”,我会得到两个为ARM构建的库。如果设置为模拟器,我会为模拟器构建两个库。

    有人知道这个布隆基的解决办法吗?

    非常感谢。

    更新:“xcodebuild”命令行工具仍然有效,也就是说它将根据每个目标的部署参数构建正确的体系结构。

    因此,我可以使用一个shell脚本来调用xcode build,而不是使用xcode的GUI来构建:

    xcodebuild -target device-target -configuration Debug
    xcodebuild -target sim-target -configuration Debug
    

    找到一个真正的解决方案仍然是件好事,但这将使目前的工作完成。

    3 回复  |  直到 14 年前
        1
  •  3
  •   John Franklin    14 年前

    是的,苹果似乎正在冻结所有Xcode控件和选项。到了我根本不安装beta-sdk或者gm/公共sdk的地步,如果我快要完成一个应用程序的话。我 知道 升级会破坏一些东西。

    无论如何,您应该能够创建一个外部目标或shell脚本目标,它构建每个目标并将lib链接在一起。我的bag-o-tricks库也有类似的shell脚本。在xcode项目设置中,我将basesdk设置为iphone设备4.0 sdk。构建脚本大致如下:

    xcodebuild -parallelizeTargets -configuration Debug -sdk iphoneos4.0 -target StaticLibs
    xcodebuild -parallelizeTargets -configuration Debug -sdk iphonesimulator4.0 -target StaticLibs
    xcodebuild -parallelizeTargets -configuration Release -sdk iphoneos4.0 -target StaticLibs
    xcodebuild -parallelizeTargets -configuration Release -sdk iphonesimulator4.0 -target StaticLibs
    mkdir -p build/Debug-dist build/Release-dist
    lipo build/Debug-iphoneos/libfoo.a build/Debug-iphonesimulator/libfoo.a -create -output build/Debug-dist/libfoo.a
    lipo build/Release-iphoneos/libfoo.a build/Release-iphonesimulator/libfoo.a -create -output build/Release-dist/libfoo.a
    

    好吧,我承认,这是一个展开的版本。我的 实际的 剧本有很多 for thing in ${LIST_OF_STUFF}; do ... 循环以更好地自动化构建,复制所有包含文件,并汇总整个SDK。

    我提交了一份 patch to Core-Plot 为他们自动创建一个SDK。如果使用此修补程序作为参考,请删除 GCC_VERSION 来自sdksettings.plist或针对它构建的应用程序的键/值对将失败。

        2
  •  1
  •   Michael Kessler    14 年前

    据我所知,设置中的“基本sdk”应该是sdk中的最高值,而“iPhone OS部署目标”(也在设置中)应该是您所需要的最低值。

    例如,如果你想为iPhoneOS 3.1.2及更高版本编译一个应用程序,你必须将“基本SDK”设置为4.0,“iPhoneOS部署目标”设置为3.1.2。

        3
  •  0
  •   David Skrundz    14 年前

    在iPhone SDK 4.0上,苹果删除了低于3.2的每一个iOS版本。如果你为iphone构建,它会自动为4.0构建,如果你为ipad构建,它会编译为3.2。