Фреймворк iOS 8+ с вложенным встроенным фреймворком

Я создал собственный фреймворк LoginKit для iOS. Он, в свою очередь, встраивает под себя каркас Alamofire. В симуляторе все работает нормально, но при попытке запустить на устройстве выдает ошибку:

Сообщение об ошибке Dyld:

  Library not loaded: @rpath/Alamofire.framework/Alamofire
  Referenced from: /Users/USER/Library/Developer/CoreSimulator/Devices/506B47DE-804F-477F-AA90-69DF039E07FA/data/Containers/Bundle/Application/26D0CA8F-7284-42B5-8091-E5915736DCDB/Bingo.app/Bingo
  Reason: image not found 

В родительском приложении в разделе Embedded Binaries у меня есть только LoginKit.framework. Теперь, если я также вставлю Alamofire.framework (взятый из-под LoginKit), ошибка исчезнет. Ожидается ли такое поведение? Разве здесь не уничтожается вся цель инкапсуляции?


person dudeinthemirror    schedule 11.06.2015    source источник
comment
Я тоже столкнулся с этой проблемой. Отмечено.   -  person MsrButterfly    schedule 11.07.2015
comment
Это именно та проблема, с которой я столкнулся, и единственный обходной путь, который я нашел до сих пор.   -  person Yevhen Dubinin    schedule 22.07.2016
comment
Ваше приложение также ссылается на Alamofire?   -  person iOSAddicted    schedule 27.01.2018


Ответы (1)


То, что вы пытаетесь создать, называется Umbrella Framework. С помощью некоторых хаков и использования пользовательского сценария bash вы можете создать такую ​​структуру с вложенными структурами, как описано здесь.

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

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

person sundance    schedule 28.02.2018