Посібник Noob зі створення "Бібліотеки жирів" для iOS

Хасан Ахмед Хан

24 грудня 2017 · 4 хв читання

Нещодавно я зіткнувся з ситуацією, коли мені довелося використовувати сторонню бібліотеку у своєму проекті, але ця бібліотека була недоступна на какао-стручках.

бібліотеки

Swifter - це дуже приємний фреймворк Twitter, написаний на Swift. Він має велику кількість зірок (лайків) і виделок. Але, на жаль, ця структура недоступна для стручків какао (принаймні до 22.12.2017).

Єдиний спосіб імпортувати цей проект, щоб перетягнути весь проект Xcode у свій власний проект. Оскільки цей проект має окремі фреймворки для Mac, iOS та демонстраційні програми для iOS та Mac, це робить громіздкий проект доданим у ваш власний проект.

Дуже довго використовуючи какао-стручки для управління бібліотеками, я не хотів вбудовувати цілий проект у свій власний проект. Це здавалося не правильно. Тож я вирушив у шлях пошуку альтернативних шляхів.

Найпростішим рішенням є вбудований у ваш проект фреймворк iOS, створений бібліотекою. Це можна зробити в 4 кроки.

  1. Виберіть свій фреймворк і платформу.

2. Створіть і витягніть фреймворк з папки продуктів.

3. Вбудуйте витягнутий фреймворк у "Вбудовані двійкові файли"

4. Тепер імпортуйте модуль і використовуйте його.

Вищевказана техніка працює. Але проблема тут у тому, що ми створили платформу симулятора націлювання на фреймворк. Отже, генерований двійковий файл мав лише архітектуру, специфічну для симулятора (x86).

Якщо ви спробуєте створити свій проект для пристрою, він не вдасться. Причиною цього є те, що архітектура, специфічна для пристрою, відсутня в структурі, яку ми додали на останньому кроці.

Ви можете повторити наведені вище кроки та створити фреймворк для пристрою замість симулятора, але тоді це не буде працювати для симулятора.

Отже, для остаточного вирішення цієї проблеми нам потрібно знайти спосіб вбудувати обидві архітектури (x86 та arm) в єдину структуру. Рішення - жирова бібліотека.

Жирна бібліотека - це просто бібліотека з безліччю архітектур. У нашому випадку він буде містити архітектури x86 та arm. Власна назва - «Універсальна статична бібліотека». Але ми дотримуватимемось «жирної бібліотеки», оскільки її менше для написання, і саме таким буде наша отримана бібліотека. Жир. з декількома архітектурами в ньому.

В Інтернеті є багато статей про створення бібліотеки жирів. Усі вони дуже технічні, їх важко виконувати і мають високі шанси на невдачу.

Я знайшов новий і дуже простий спосіб створити жирну бібліотеку. Це не стосується жодного складного сценарію. Кроки прості і прості у виконанні.

Ми використаємо проект Swifter для створення жирової бібліотеки.

  1. Завантажте проект звідси і відкрийте його в Xcode.
  2. Створіть ціль «SwifteriOS» для симулятора iOS та витягніть фреймворк з папки продуктів на робочому столі.
  3. Перейменуйте фреймворк на SwifteriOS-sim.framework, щоб його можна було розрізнити пізніше.
  4. Повторіть кроки 2 та 3 для пристрою iOS. Ви можете вибрати „Загальний пристрій iOS“. Не забудьте перейменувати фреймворк на Swifter-dev.framework.
  5. Використовуйте таку команду, щоб об’єднати обидва двійкові файли в один жировий двійковий файл (переконайтесь, що ви працюєте на робочому столі під час виконання цієї команди).

7. Скопіюйте двійковий файл SwifteriOS, створений вище, і замініть його двійковим файлом у папці SwifteriOS-dev.framework.

8. Відкрийте файл „Info.plist“, що міститься в тій же папці.

9. Додайте рядок «iPhoneSimulator» у масив «CFBundleSupportedPlatforms».

10. Остаточний файл plist виглядатиме так:

скопіюйте ‘x86_64.swiftdoc’ та ‘x86_64.swiftmodule’ та вставте їх до

12. Виконуючи вищевказані кроки, ви перетворили SwifteriOS-dev.framework із пристрою лише на універсальний фреймворк жиру. Перейменуйте його на SwifteriOS.framework.

13. Включіть цей фреймворк за допомогою опції «Вбудовані двійкові файли» в Xcode. Імпортуйте модуль у свій файл, і ви зможете його успішно скомпілювати.

Я протестував цю техніку в Xcode 10 і 11 як на мовах Swift, так і на Objective-C.

Якщо вам сподобався цей пост, не забудьте поплескати:)