Поддерживаются ли динамические библиотеки на iOS (iPhone / iPad)?
В Xcode я попытался создать новый проект -> Framework & Library -> Cocoa Library (dynamic) . В настройках проекта я установил для Base SDK значение iOS device 4.1
и target iOS4.1
, но у него есть ошибка сборки:
target указывает тип продукта com.apple.product-type.library.dynamic, но для платформы iphonesimulator такого типа продукта не существует ».
Я выбрал сборку Simulator -> Debug -> i386 .
Ответы:
В то время, когда был задан этот вопрос, динамические библиотеки не поддерживались iOS, и ваше приложение будет отклонено. Разрешены только статические библиотеки.
Однако в iOS8 вы можете использовать динамические библиотеки и фреймворки. Он должен "просто работать"
источник
Я на самом деле не согласные с ответом DarkDust в , но если я могу направить свой внутренний Билл Клинтон, это зависит от того, какой смысл поддерживается это :)
Apple не хочет, чтобы вы делали это для приложений App Store, но операционная система определенно позволяет это. Приложения для побега из тюрьмы используют эту технику постоянно. Вы в основном используете стандартную технику UNIX, чтобы динамически открывать фреймворк / библиотеку, а затем использовать в ней какие-то вещи. Функция dlopen позволяет вам открыть библиотеку, передав путь к этой платформе или dylib. Из некоторых документов по созданию приложений для взлома , вот пример вызова
init()
функции, реализованной внутри вашего собственного, отдельного dylib:Кроме того, ограничение по умолчанию на создание проекта динамической библиотеки для iOS - это что-то в Xcode, что вы можете изменить, отредактировав некоторые файлы XCode xml:
Сборка и использование dylib на iOS
Как только вы это сделаете, вы можете создать обычную библиотеку iOS .dylib и использовать ее в соответствии с приведенным выше примером кода. (да, вам, вероятно, придется снова разблокировать эту возможность при установке новой версии XCode).
Итак, это не техническое ограничение, а ограничение политики App Store. Если вы не ограничены магазином приложений, вы можете это сделать. Обратите внимание, что этот метод не требует взлома, хотя, если приложение находится в песочнице, он может ограничивать, откуда могут быть загружены дилибы.
Изменить: чтобы убедиться, что эта информация не потеряна для будущего гниения ссылок, вот содержание ссылки, которую я предоставил о том, как включить iOS dylibs в Xcode. ( Примечание: этот процесс все еще работает в Xcode 4, но см. Комментарии ниже для обновлений путей и т. Д.) Источником является блог iOS Place :
Xcode не позволяет создавать dylib для iOS. Приложение будет отклонено, если это не один двоичный файл. Но у меня есть приложение с подключаемой архитектурой для загрузки дополнительных модулей. Мне просто нужен быстрый прототип, чтобы подтвердить концепцию, прежде чем полностью переносить ее на iOS. Это было бы быстрее, если бы дилиб мог просто работать. Итак, в этом посте показано, как создавать и использовать dylib, но имейте в виду, что он не будет одобрен в App Store. (Протестировано с Xcode 3.2.4 на 10.6.4)
1. Откройте эти файлы в редакторе списка свойств: /Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications/MacOSX Product Types.xcspec и /Developer/Platforms/iPhoneSimulator.platform/Developer/Library/Xcode/Specifications. / Симулятор iPhone ProductTypes.xcspec
2. Найдите в « MacOSX Product Types.xcspec » элемент, в котором указан тип продукта,
com.apple.product-type.library.dynamic
и перетащите его в « iPhone Simulator ProductTypes.xcspec ».3. Откройте « Типы пакетов MacOSX.xcspec » и « iPhone Simulator PackageTypes.xcspec », которые находятся в тех же местах.
4. Найдите в « MacOSX Product Types.xcspec » элемент, который имеет тип пакета,
com.apple.package-type.mach-o-dylib
и перетащите его в « iPhone Simulator PackageTypes.xcspec ».5. Повторите шаги для « iPhoneOS.platform » и перезапустите Xcode, если он был запущен.
Теперь давайте создадим дилиб. Начните с шаблона « Статическая библиотека Cocoa Touch ». Это должно включать в себя Foundation.framework. Вот изменения, которые я внес в шаблон для сборки dylib.
1. Откройте файл project.pbxproj (находится внутри пакета файлов проекта Xcode) в текстовом редакторе. Найдите строку « producttype », измените ее значение на
com.apple.product-type.library.dynamic
;Теперь откройте проект с помощью Xcode, перейдите в Project-> Edit Project Settings.
2. Установлен « Каталог установки »,
@executable_path/
потому что я планирую разместить dylib в том же каталоге, что и исполняемый файл приложения.3. « Тип Mach-O » установлен на динамическую библиотеку.
4. « Исполняемое расширение » установлено на dylib.
5. « Исполняемый префикс » пуст.
6. Добавьте в библиотеку один или два простых метода и соберите ее.
Теперь создайте приложение, чтобы протестировать его. На этот раз я выбираю приложение на основе просмотра . Подключите UIButton и UILabel для вызова библиотеки и отображения ответного сообщения. Вы можете скачать полную версию проекта TestApp и поиграть с ним.
источник
Начиная с Xcode 11.4.1 динамические библиотеки не допускаются (ваш проект не будет компилироваться для всех мест назначения). Новый способ использования библиотек / фреймворков - это create-xcframework из xcodebuild.
источник