2015-07-22 2 views
4

xcodebuild может построить проект с SDk установлен либо iphoneos или iphonesimulator, но не оба, поэтому для того, чтобы создать структуру, содержащую armv7 arm64 и i386 x86_64 архитектуры, я запустить xcodebuild дважды, а затем использовать lipo объединить все архитектуры в 1 универсальный двоичный файл. Я вижу коммерческую структуру, которая делает это, но приводит к некорректному файлу info.plist, потому что у него есть поле CFBundleSupportedPlatforms, и все знаки указывают на него, содержащее только 1 значение, например CFBundleSupportedPlatforms = ("iPhoneSimulator").IOS универсальные рамки с iphoneos и iphonesimulator архитектур

Похоже, что lipo не должен использоваться таким образом, поскольку он официально не поддерживается xcodebuld. Есть ли лучший способ создать структуру для хранения всех архитектур?

ответ

3

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

Если это так, вы на правильном пути, используя lipo, чтобы присоединиться к тонким двоичным файлам для устройства вместе или присоединиться к тонким двоичным файлам для симулятора вместе, но не должны пытаться создавать одно устройство и симулятор. В качестве руководства здесь используется собственное использование SDK и рамок Apple. В Xcode, есть два различных SDKs платформы - iPhoneOS.platform и iPhoneSimulator.platform, которые содержат SDKs только ломтики для соответствующих целевых архитектур:

Xcode's Platform Options

Вы можете просверлить в каждый из этих папок и найти UIKit рамки действительно следовать идеи за-платформы и условно связанные между собой на основе SDK, который используется:

UIKit Lipo

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

Как люди принимают вашу библиотеку, часть установки должна состоять в использовании условной ссылки. В пределах опции OTHER_LINKER_FLAGS вы можете настроить параметры конфигурации (отладки, выпуска, Ad-Hoc и т. Д.), А также за архитектуры или за SDK конкретных настроек тоже:

Other Linker Flags

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

+0

Благодарим вас за подробный ответ. Вы правильно поняли, я рассматриваю это, чтобы распределить одну структуру с другими разработчиками, но то, что вы сказали, имеет смысл. Одна вещь, однако, ваши пути к 'iPhoneOS.platform и iPhoneSimulator.platform' больше не существуют для Yosemite 10.10.4, Xcode 6.4, любая идея, где они могут быть? – Bob

+1

@Bob Похоже, что вы можете основывать это на скриншотах Finder; загляните на экраны терминалов, чтобы получить полный путь. –

+2

Да, вы снова правы, спасибо за вашу помощь.Следует упомянуть, что коммерческие разработчики, такие как Crashlytics, Shinobi Charts и PSPDFKit, упаковывают обе платформы в 1 двоичную и фреймворк, что противоречит собственным структурам Apple. – Bob

Смежные вопросы