Как добавить сторонний Framework в проект iPhone? - PullRequest
6 голосов
/ 03 февраля 2009

Я пытаюсь использовать инфраструктуру 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

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

Спасибо

Ответы [ 3 ]

10 голосов
/ 03 февраля 2009

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

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

8 голосов
/ 21 февраля 2009

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

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

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

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

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

6 голосов
/ 04 февраля 2009

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

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

...