#xcode4.2
#xcode4.2
Вопрос:
Я создал шаблон проекта Xcode 4 для iOS, который должен ссылаться на sqlite3.dylib. Я могу заставить шаблон создать действительный проект, если я установлю абсолютный тип пути для sqlite3.dylib в элементе Definitions шаблона.
Я хотел бы иметь возможность определять тип пути относительно SDK, кто-нибудь может предложить предложения относительно того, какой правильный тип пути должен указывать ссылку на библиотеку относительно SDK.
Спасибо.
Ответ №1:
Это заняло у меня пару часов. Я также столкнулся с той же проблемой, и без какой-либо документации от Apple было почти невозможно разобраться. Я провел некоторую обратную разработку двоичных файлов XCode и нашел подтверждение в Xcode3UI
двоичном файле. Они определили следующее (внутреннее) перечисление:
_PBXSourceTree_Absolute
_PBXSourceTree_BuildProduct
_PBXSourceTree_CurrentSDK
_PBXSourceTree_DeveloperDir
_PBXSourceTree_Group
_PBXSourceTree_Project
Я протестировал это, и, безусловно, это было так. Ниже приведены ВСЕ допустимые значения для типа пути:
- Абсолютный (эквивалент «Абсолютного пути»)
- BuildProduct (Эквивалентно «Относительно продуктов сборки»)
- CurrentSDK (эквивалентно «Относительно SDK»)
- DeveloperDir (эквивалентно «Относительно каталога разработчика»)
- Group (Эквивалентно «Относительно группы», но будьте осторожны, относительное определение не допускается)
- Проект (эквивалентно «Относительно проекта»)
Я думаю, вас очень интересует значение «CurrentSDK«.
Надеюсь, это поможет и с уважением, Кристиан
Ответ №2:
Вот как я решил эту проблему:
<key>libsqlite3.dylib</key>
<dict>
<key>Path</key>
<string>/usr/lib/libsqlite3.dylib</string>
<key>PathType</key>
<string>Absolute</string>
<key>FileType</key>
<string>wrapper.framework</string>
</dict>
Это не из каталога SDK, но хорошо работает для симуляторов iOS 4.x и 5.x.
Ну, и если вы действительно хотите это из SDK, добавьте это в свой TemplateInfo.plist:
<key>Targets</key>
<array>
<dict>
<key>BuildPhases</key>
<array>
<dict>
<key>Class</key>
<string>Sources</string>
</dict>
<dict>
<key>Class</key>
<string>Frameworks</string>
</dict>
<dict>
<key>Class</key>
<string>ShellScript</string>
<key>ShellPath</key>
<string>/bin/bash</string>
<key>ShellScript</key>
<string>
grep amp;#39;/usr/lib/libsqlite3.dylib; sourceTree = amp;quot;amp;<absoluteamp;>amp;quot;amp;#39; amp;quot;$PROJECT_DIR/$PROJECT_NAME.xcodeproj/project.pbxprojamp;quot; amp;amp;amp;amp;
sed -i -e amp;#39;s|/usr/lib/libsqlite3.dylib; sourceTree = amp;quot;amp;<absoluteamp;>amp;quot;|usr/lib/libsqlite3.dylib; sourceTree = SDKROOT|gamp;#39; amp;quot;$PROJECT_DIR/$PROJECT_NAME.xcodeproj/project.pbxprojamp;quot;
Единственное неудобство: вам нужно создать проект, созданный на основе шаблона, прежде чем изменение вступит в силу. После завершения первой сборки вам нужно будет закрыть / открыть prj.