Установка типа пути в Xcode 4 TemplateInfo.plist относительно SDK

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