Как мне включить зависимость статической библиотеки в шаблон Xcode?

#iphone #objective-c #ios #xcode #xcode-template

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

Но я не могу найти, как сделать что-то подобное со статическими библиотеками. Это значительно улучшило бы мой шаблон. Существует ли такая функциональность?

Комментарии:

1. Привет, я ищу то же самое, вы нашли решение?

2. Нет, извините! Не повезло … : (

Ответ №1:

Я нашел решение.

В TemplateInfo.plist добавьте ключевые целевые объекты -> 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. Не могли бы вы уточнить, что вы подразумеваете под Targets -> SharedSettings? Я пытался заставить это работать, но не смог…

Ответ №2:

Лучший способ, который я нашел для этого, — создать псевдоним для каталога / usr / lib внутри вашей папки templates. Оттуда вы можете получить доступ ко всем библиотекам, которые находятся в /usr / lib, даже к тем, которые сами являются псевдонимами.

Во-первых, я создаю шаблоны, редактируя .plists в XCode, а не редактируя сами представления xml. Итак, вот как я буду объяснять шаги, которые я предпринял для включения статических библиотек в мой шаблон.


1) У меня есть шаблон проекта: iPhoneOS.platform / Developer / Library / Xcode / Templates / Шаблоны проекта / Приложение / C4 Application.xctemplate

(В Xcode 4.3 Шаблоны проекта / приложение можно найти непосредственно в Xcode.app, щелкнув правой кнопкой мыши пакет и выбрав Показать содержимое пакета)

изображение

Внутренности этой папки выглядят следующим образом:

изображение

2) Как вы можете видеть на изображении выше, я создал псевдоним для папки lib ( /usr/lib ), которая содержит статические библиотеки, и переместил псевдоним в мою папку .xctemplate.

изображение

3) В моем файле TemplateInfo.plist я указываю 2 вещи: словарь и узел. Я поместил их внутри определений и узлов TemplateInfo.plist

изображение

Во-первых, в узле Definitions я указываю словарь с именем: Libs / libalias.dylib

Внутри этой библиотеки у меня есть 2 строки Group: Libs Path: lib / libalias.dylib

Узел выглядит следующим образом:

изображение

Важно, чтобы синтаксис был точно таким, и самое главное, чтобы само название словаря указывало библиотеку, которую вы хотите импортировать. В этом случае я импортирую libalias.библиотека dylib.

Также важно, чтобы путь был lib / libalias.dylib, потому что это укажет на псевдоним, который указывает на вашу папку / usr / lib.

Во-вторых, в массиве Nodes я указываю элемент в виде строки, которая называется Libs / libalias.dylib (примечание: точно такое же имя, как у словаря, который я указал в Definitions)

изображение

Вот как должен выглядеть элемент узла.

4) После того, как вы настроили эти вещи, вы можете создать новый проект с уже включенной вашей библиотекой.

изображение

ПРИМЕЧАНИЕ: поскольку я вызвал свой словарь Libs / … и указал его группу в качестве библиотек, библиотека, которую я импортирую, отображается во вложенной папке Libs в моем навигаторе проекта.

Комментарии:

1. я делал это ранее следующим образом .. но я обнаружил, что добавить флаг в шаблон намного проще, поскольку мне нужно поделиться своим шаблоном с членами моей команды, а просить всех создать псевдоним сложно.

2. Я делюсь своим шаблоном со МНОГИМИ людьми, я даю им установщик, и он работает красиво и очень чисто. Вы также можете поделиться через git или SVN. В любом случае, я думаю, что мой ответ довольно хорош.

3. @C4-Трэвис — Спасибо, что поделился решением! В моем проекте iOS мне нужно включить файл .a и группу файлов .h. Как мне включить файлы .h? Поскольку их слишком много, и у меня есть несколько статических библиотек для включения, перечисление каждого файла .h по отдельности не представляется жизнеспособным решением. Есть предложения? Есть ли способ, которым я могу просто указать папку и включить ее содержимое в проект? — Спасибо!

4. Привет, @xueru, установщик C4 фактически перечисляет все файлы .h по отдельности. Это боль, но это единственный способ, который, как я нашел, сработал… Иногда я боюсь обновлять шаблон установщика!