Связывание двойных фреймворков (iphoneos и watchos) с одинаковым названием продукта

Недавно мне пришлось дублировать свои собственные фреймворки, чтобы иметь возможность связать их с родным расширением watchOS 2, потому что платформа другая. Так что для каждого фреймворка X у меня есть аналог X-watchos. Все отлично работает в симуляторе и при сборке непосредственно на мои устройства, и только когда я попытался заархивировать, я получил эту ошибку связывания:

Ошибка связывания

Я запустил lipo -i на построенном фреймворке watchOS и, конечно же, его арки arm7 и arm64 вместо armv7k.

Когда я посмотрел дальше в встроенный каталог, я заметил это:

Производная структура данных

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

Обратите внимание, что это не проблема для сторонних платформ, поскольку Carthage уже создает их в отдельных каталогах.

EDIT 22/08/2015: я отправил радар с примером проекта: http://www. openradar.me/22392501

EDIT 24.08.2015: это было отмечено в примечаниях к выпуску Xcode 7 Beta 6 как известная проблема:

известная проблема

EDIT 09/09/2015: примечания к выпуску бета-версии Xcode 7.1 намекают, что это исправлено, но я еще не подтвердил это.


person NachoSoto    schedule 20.08.2015    source источник


Ответы (2)


Это работает для меня в Xcode 7.1.

person Porter Hoskins    schedule 11.09.2015
comment
Да, я могу подтвердить, что это работает, как и ожидалось, в 7.1 Beta 1. - person NachoSoto; 12.09.2015
comment
Наконец, вы используете одно и то же название продукта для каждой версии (часы и iOS) вашего фреймворка или разные? - person CarlosGz; 13.09.2015
comment
В 7.1 я использую одно и то же название продукта для каждой платформы. - person Porter Hoskins; 15.09.2015

Я использую аналогичную конфигурацию со своими собственными фреймворками, но устанавливаю разные имена при создании на каждой платформе (MyFramework и MyFramework-watchOS). Не забудьте установить общее имя продукта вручную (у меня MyFramework на обоих) на вкладке настроек сборки каждого фреймворка.

person CarlosGz    schedule 21.08.2015
comment
Это именно моя конфигурация: как я уже упоминал, имена целей разные (X и X-watchos), но имя продукта — X. - person NachoSoto; 21.08.2015
comment
Извините, моя вина. Я взял пример из примера проекта Apple Lister и из прошлогоднего видеосеанса о фреймворках, и он отлично работает в одном из моих проектов... Надеюсь, вы скоро найдете решение. - person CarlosGz; 21.08.2015
comment
Можно ссылку на этот проект? Я посмотрю, может быть, я увижу, что там по-другому :) - person NachoSoto; 21.08.2015
comment
Конечно: developer.apple.com/library/prerelease. /ios/samplecode/Lister/ убедитесь, что вы загружаете последнюю версию. Пожалуйста, сообщите нам, как вы, наконец, решили свою проблему - person CarlosGz; 22.08.2015
comment
Пример проекта воспроизводит ту же проблему: ListerforwatchOSiOSandOSX/Swift/ListerKit (watchOS)/ConnectivityListsController.swift:11:8: Module file was created for incompatible target armv7-apple-ios9.0: /Users/NachoSoto/Library/Developer/Xcode/DerivedData/Build/Intermediates/ArchiveIntermediates/Lister/BuildProductsPath/Release-watchos/ListerKit.framework/Modules/ListerKit.swiftmodule/arm.swiftmodule. Я зарегистрировал радар в другом примере проекта: openradar.me/22392501 - person NachoSoto; 23.08.2015
comment
Это так хорошо объяснено, давайте посмотрим, будет ли это исправлено в следующей бета-версии Xcode. - person CarlosGz; 24.08.2015
comment
Эй, как я полагаю, вы заметили (согласно примечаниям к выпуску), что новая бета-версия Xcode 6, похоже, решает проблему архивации. Я использовал другое название продукта для платформы watchOS, как указано в примечаниях: «Временное решение: используйте другое имя продукта (используя параметр сборки PRODUCT_NAME) для версии вашей платформы для watchOS. (22183332)», но после этого я даже не смогу запустить проект, потому что Xcode не может найти файлы заголовков моего фреймворка… Надеюсь, вам повезет больше всех, и вы сможете пролить на меня немного света. - person CarlosGz; 26.08.2015
comment
Да, я добавил EDIT к моему вопросу. На самом деле это не исправление, а скорее признание ошибки. Как я указал в исходном вопросе, изменение названий продуктов всегда было на столе, но это все намного усложняет. - person NachoSoto; 26.08.2015