Как добавить сторонний Framework в проект iPhone?

Я пытаюсь использовать инфраструктуру PLDatabase в моем приложении для iPhone. Я добавил фреймворк в свой проект Xcode. Однако, когда я запускаю свое приложение, оно вылетает со следующей ошибкой:

dyld: Library not loaded: @loader_path/../Frameworks/PlausibleDatabase.framework/Versions/A/PlausibleDatabase
  Referenced from: /Users/todd/Library/Application Support/iPhone Simulator/User/Applications/BB3C66B2-A5BB-4329-B163-AB0072411AF1/Congress.app/Congress
  Reason: image not found

Я не уверен, где именно должен находиться фреймворк на диске.

Спасибо

3 ответа

Решение

iPhone не поддерживает динамическое связывание встроенных платформ. Хотя вы, возможно, сможете запустить симулятор, он не будет работать на устройстве. Если вы хотите использовать код, вы должны собрать статическую библиотеку для платформы (libpldatabase.a), а затем связать их с приложением.

Графический интерфейс XCode не предоставляет хороший интерфейс для статического линкования, вам нужно будет добавить соответствующие флаги в ваши префиксы сборки (-lpldatabase -L/what /dir/it/is/in).

На самом деле не совсем верно, что iPhone не поддерживает динамическое связывание. Что верно, так это то, что приложения, установленные App Store, не могут динамически связываться.

Магазин приложений / ituned устанавливает программы в каталог /private/var/mobile/.... Любая открытая программа, которая живет в этом подкаталоге, имеет chroot и определенные права удаляются при открытии. Процессы chroot не могут быть разветвлены, они не могут работать в фоновом режиме, они не могут загружать динамические библиотеки и не могут сохранять файлы за пределами своих маленьких защищенных областей диска (за исключением фотографий в каталоге фотографий).).

Тем не менее, iPhone работает на современной операционной системе, которая прекрасно поддерживает динамическое связывание. Фактически "джейлбрейк" - это установка программы вне chroot-тюрьмы, которая затем может выполнять такие действия, как fork и сохранять файлы в других местах на диске и загружать динамический код.

Apple (и открытое сообщество iPhone) имеет множество программ, работающих на телефоне (например, приложения MobilePhone, Mobile Safari и SpringBoard), которые могут работать в фоновом режиме и загружать библиотеки. Они размещаются в другом месте на диске (/ private / var / stash / Applications часто).

Итак... если вы хотите продать свое приложение в магазине приложений, вы не можете загрузить динамическую библиотеку. Что для большинства людей означает, что вы не можете загрузить его вообще. Но если вы хотите распространять свое приложение через cydia (распространенный джейлбрейкнутый установщик приложения для телефона), то вы можете избежать джейлбрейка телефона и загрузить свою динамическую библиотеку. На самом деле, из-за того, что процесс установки itunes был виновником, как вы узнали, вы не можете даже загрузить dylib из вашего собственного приложения, которое вы пишете на свой телефон... если вы не сделали джейлбрейк.

RE @mipadi: ZeroLink был удален в Xcode 3.1 и не существует для iPhone SDK. Правильный ответ - Луи; iPhone не поддерживает динамически загружаемые платформы в приложениях, созданных разработчиками.

Xcode имеет хороший пользовательский интерфейс для статических библиотек; просто перетащите их в проект, и они будут добавлены в фазу ссылки. Не нужно суетиться с флагами компоновщика. Проблема возникает, когда вам нужно использовать заголовки, поставляемые с этими статическими библиотеками (тогда вам нужно добавить пути поиска заголовков вручную), или когда статическая библиотека lib конфликтует с доступным dylib (вот когда вам нужно добавить флаг -l вручную),

Другие вопросы по тегам