【问题标题】:How do I include a static library dependency in an Xcode Template?如何在 Xcode 模板中包含静态库依赖项?
【发布时间】:2011-12-24 19:38:10
【问题描述】:

我可以在 TemplateInfo.plist 文件中包含这样的框架:

<key>Frameworks</key>
            <array>
                <string>QuartzCore</string>
                <string>OpenGLES</string>
                <string>OpenAL</string>
                <string>AudioToolbox</string>
                <string>AVFoundation</string>
                <string>UIKit</string>
                <string>Foundation</string>
                <string>CoreGraphics</string>
            </array>

但我找不到如何用静态库做类似的事情。这将大大改进我的模板。有这样的功能吗?

【问题讨论】:

  • 您好,我也在找同样的问题,您找到解决方案了吗?
  • 不,抱歉!没有运气... :(

标签: iphone objective-c ios xcode xcode-template


【解决方案1】:

我找到了解决办法。

在 templateInfo.plist 添加关键 Targets --> SharedSettings

<key>OTHER_LDFLAGS</key>
<string>ObjC -all_load -weak_library /usr/lib/libz.dylib ..</string>

它将您的 dylib 添加到调试和运行设置中。不能像 xcode 对框架一样使用自动完成功能,但仍然比手动完成要好得多

编辑:解释

<key>Targets</key>
<array>
    <dict>
        <key>Dependencies</key>
        <array><integer>0</integer></array>
        <key>Frameworks</key>
        <array>
            <string>CoreAudio</string>              
        </array>
        <key>SharedSettings</key>
        <dict>
            <key>OTHER_LDFLAGS</key>
            <string>-ObjC -all_load -weak_library /usr/lib/libz.dylib -weak_library /usr/lib/libstdc++.dylib </string>
        </dict>     
    </dict>

【讨论】:

  • 您能具体说明一下 Targets-->SharedSettings 的含义吗?我试图让它工作,但不能......
【解决方案2】:

我发现这样做的最佳方法是在模板文件夹中为 /usr/lib 目录创建一个别名。从那里,您可以访问 /usr/lib 中的所有库,甚至那些本身就是别名的库。

首先,我通过在 XCode 中编辑 .plist 来创建模板,而不是通过编辑 xml 表示本身。所以,这就是我将如何解释将静态库包含到我的模板中所采取的步骤。


1) 我有一个项目模板: iPhoneOS.platform / Developer / Library / Xcode / Templates / Project Templates / Application / C4 Application.xctemplate

(在 Xcode 4.3 中,可以通过右键单击包并选择 Show Package Contents 直接在 Xcode.app 中找到项目模板/应用程序)

这个文件夹的内容是这样的:

2) 如上图所示,我为包含静态库的 lib 文件夹 (/usr/lib) 创建了一个别名,并将该别名移动到我的 .xctemplate 文件夹中。

3) 在我的 TemplateInfo.plist 文件中,我指定了两件事:字典和节点。我把它们放在 TemplateInfo.plist 的定义和节点中

首先,在定义节点中,我指定了一个名为: 库/libalias.dylib

在这个库里面我有 2 个字符串 组 : 库 路径:lib/libalias.dylib

节点如下所示:

语法与此完全相同很重要,最重要的是 Dictionary 本身的名称指定了您要导入的库。在这种情况下,我正在导入 libalias.dylib 库。

路径是 lib/libalias.dylib 也很重要,因为这将指向指向 /usr/lib 文件夹的别名。

其次,在 Nodes 数组中,我将一个项目指定为一个名为 Libs/libalias.dylib 的字符串(注意:与我在定义中指定的字典的名称完全相同)

这就是节点项的外观。

4) 完成这些设置后,您可以创建一个包含已包含库的新项目。

注意:因为我调用了我的 Dictionary Libs/... 并将它的 Group 指定为 Libs,所以我正在导入的库出现在我的 Project Navigator 中名为 Libs 的子文件夹中。

【讨论】:

  • 我之前也是这样做的.. 但我发现添加一个标志更容易模板,因为我需要与我的团队成员共享我的模板,要求每个人都创建一个别名很困难。跨度>
  • 我与很多人分享我的模板,我给他们一个安装程序,它运行良好且非常干净。您也可以通过 git 或 SVN 共享。无论哪种方式,我认为我的答案都很好。
  • @C4-Travis - 感谢您分享解决方案!在我的 iOS 项目中,我需要包含 .a 文件和一组 .h 文件。如何包含 .h 文件?因为它们太多了,而且我有多个静态库要包含,所以单独列出每个 .h 文件似乎不是一个可行的解决方案。有什么建议?有没有办法我可以只指定一个文件夹并将其内容包含在项目中? - 谢谢!
  • 嘿@xueru,C4 安装程序实际上单独列出了所有 .h 文件。这很痛苦,但这是我发现唯一可行的方法......我有时害怕更新安装程序模板!
猜你喜欢
  • 2013-12-02
  • 2012-12-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多