WatchOS 2 App не удается запустить на устройстве с dyld фатальная ошибка для моей библиотеки фреймворка не загружен: изображение не найдено


Я только что следовал руководству Apple transition guide, чтобы обновить свое приложение ObjectiveC до WatchOS 2

Https://developer.apple.com/library/watchos/documentation/General/Conceptual/AppleWatch2TransitionGuide/ConfiguretheXcodeProject.html

С разделом "совместное использование кода между приложением iOS и приложением watchOS", описывающим, как скопировать существующую платформу iOS в целевую платформу WatchOS для использования WatchOS следующим образом.

" Если у вас уже есть приложение watchOS 1 если вы используете общую платформу с вашим приложением iOS, дублируйте вашу цель iOS framework и измените ее для поддержки watchOS 2.

Дублирование и настройка целевой платформы для watchOS 2

  1. Откройте панель редактора проектов Xcode. (Панель обычно закрыта.)
  2. Управление-щелкните цель, чтобы отобразить контекстное меню с дублирующей командой.
  3. измените имя цели, чтобы вы могли легко идентифицировать ее позже.
  4. в настройках сборки, измените следующие значения:
    • измените настройки поддерживаемых платформ на watchOS.
    • измените базовую настройку SDK на последнюю версию watchOS.
    • измените настройку названия продукта так, чтобы оно соответствовало названию вашего фреймворка iOS. Вы хотите, чтобы обе платформы были построены с одинаковым именем.
  5. добавьте фреймворк в список связанных фреймворков вашего расширения WatchKit."

Я следовал этим шагам, чтобы клонировать мой фреймворк, который с iOS фреймворк назывался MyFramework, а теперь новый фреймворк WatchOS называется MyFrameworkWatch. Но, как описано выше, название продукта устанавливается в MyFramework вместо MyFrameworkWatch. Я предполагаю, что этот сдвиг имен таков, что я могу включить из моего фреймворка, используя

#import <MyFramework/SharedUtils.h>

Вместо того, чтобы предположительно изменить его на

#import <MyFrameworkWatch/SharedUtils.h>
Я бы не возражал против последнего, но я признаю, что лучше сохранить название фреймворка тем же самым.

После немного большей работы за пределами начального автоматического переход мне удалось заставить мое приложение работать отлично на симуляторе, но теперь, переключаясь на устройство, я просто не могу заставить его запустить.

Запуск моего приложения на устройстве вызывает его вращение в течение нескольких секунд, а затем просто сбой. Запуск взгляда просто заставляет его вращаться бесконечно. Попытка запустить его из Xcode и запуск приложения приводит к тому, что приложение в конечном итоге запускается и вращается, вращение иногда может длиться бесконечно, но в конце концов оно проходит, и я получаю фактическую ошибку сообщается следующее

dyld_fatal_error - dyld: Library not loaded: @rpath/MyFramework.framework/MyFramework referenced from WatchKit Extension Reason: image not found

Итак, это расширение приложения My Watch, которое пытается связать с фреймворком Watch и ищет имя Myframeworkwatch, а не имя MyFrameworkWatch. Интересно, это столкновение имен привело его к путанице?

Когда я пытаюсь найти фреймворки, на которые ссылается папка Products в Xcode, я вижу два фреймворка

MyFramework
MyFramework

Они оба ссылаются на один и тот же путь

/Users/jim/Library/Developer/Xcode/DerivedData/MyApp-byegspjumgwlfpahhwjgzpmfkcdx/Build/Products/Debug-iphoneos/MyFramework.framework

Хотя вы можете видеть, что целевое членство отделяется два фреймворка, топ MyFramework связан с основным приложением, сегодня виджет и фреймворк тесты проекта. Нижняя часть Myframe просто связана с расширением моих часов. Это не кажется правильным, что они ссылаются на тот же самый путь, конечно?

Наконец, когда я гуглил для этой проблемы, я нашел ссылку на CocoaPods, имеющих аналогичные проблемы, хотя по их сайту здесь

Https://github.com/CocoaPods/CocoaPods/issues/4180

Это было исправлено с сентября в версии 0.39.0, которая является версией, о которой сообщает pod --version. Так что я предполагаю, что у меня есть их решение. Я испытываю искушение вытащить стручки какао из своего каркаса, чтобы посмотреть, поможет ли это.

Кто-нибудь еще следовал рекомендациям руководства по переходу для создания дублирующего фреймворка, а затем сумел получить приложение и фреймворк, фактически устанавливаемые на их часах?

Есть ли какой-либо способ проанализировать построенное, чтобы попытаться увидеть, могу ли я увидеть проблемы с построенным файлы, так что мне не нужно ждать, пока часы не запустят приложение, чтобы отладить его.

Любая помощь действительно ценится, как всегда! Ура!

Edit: я думаю, что мне удалось удалить какао-бобы из оскорбительной цели MyFrameworkWatch, закомментировав раздел target в моем файле pod и запустив pod update/pod install... казалось, что он не очень хорошо очищает цель, поэтому мне пришлось вручную удалить шаги cocoa pod в шаге post build. Может быть, я не удалил его должным образом, я нахожу это немного сбивает с толку, чтобы знать, что происходит под капотом с какао-стручками. Независимо от того, произошла одна и та же ошибка, поэтому либо я не удалил ее должным образом, либо она не влияет на эту конкретную проблему

1 2

1 ответ:

Хорошо, это было вызвано тем, что документация apple для перехода была неправильной, или я интерпретировал ее неправильно. Он говорит

Добавьте фреймворк в список связанных фреймворков вашего расширения WatchKit.

Где фактически правильным решением было добавить фреймворк в раздел встроенные двоичные файлы (который автоматически добавляет запись в связанные фреймворки в любом случае) и правильно поместить фреймворк в расширение watch под каталогом фреймворков. Какое приложение тогда все нормально! Так много разочарования, я потерял часы на это в течение нескольких дней!!