如何在XCode模板中包含静态库依赖项?

时间:2011-11-08 21:07:10

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

我可以在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>

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

2 个答案:

答案 0 :(得分:7)

我找到了解决方案。

在templateInfo.plist中添加关键字目标 - &gt; SharedSettings

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

它将你的dylib添加到调试和运行设置..不能用于自动完成,因为xcode可以用于框架,但仍然比手动操作好很多

编辑:expalin

<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>

答案 1 :(得分:3)

我发现这样做的最好方法是在templates文件夹中创建/ usr / lib目录的别名。从那里,您可以访问/ usr / lib中的所有库,甚至是别名的库。

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


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

(在Xcode 4.3中,可以直接在Xcode.app中找到项目模板/应用程序,方法是右键单击该包并选择显示包内容)

image

此文件夹的内容如下所示:

image

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

image

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

image

首先,在Definitions节点中,我指定一个名为的字典: 利布斯/ libalias.dylib

在这个lib中我有2个字符串 组:Libs 路径:lib / libalias.dylib

节点如下所示:

image

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

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

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

image

这就是节点项应该是什么样子。

4)设置完这些内容后,您可以创建一个包含lib的新项目。

image

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