Xcode 12, побудова для iOS Simulator, але зв’язування в об’єктному файлі, побудованому для iOS, для архітектури arm64


312

Спроба отримати великий (і працює над Xcode 11!) Проектний проект у Xcode 12 (бета-версія 5) для підготовки до iOS 14. Codebase раніше був Obj-C, але тепер містить як Obj-C, так і Swift, і використовує стручки, які Obj-C та / або Swift також.

Я випустив нову бета-версію кокаподів з підтримкою Xcode 12 (на даний момент 1.10.0.beta 2).

Встановлення стручка успішне. Коли я роблю збірку, я отримую таку помилку у фреймворку pod:

"побудова для iOS Simulator, але зв'язування в об'єктному файлі, побудованому для iOS, для архітектури arm64"

Коли я запускаю lipo -info на фреймворку, він має: armv7s armv7 i386 x86_64 arm64.

Раніше для проекту було встановлено дійсну архітектуру: armv7, armv7s та arm64.

У Xcode 12 це налаштування зникає відповідно до документації Apple. Для архітектури встановлено значення $ (ARCHS_STANDARD). У мене нічого не встановлено у виключених архітектурах.

Хтось має уявлення про те, що тут може відбуватися? Я ще не зміг відтворити це за допомогою більш простого проекту.



Перегляньте статтю: milanpanchal24.medium.com/…
MilanPanchal

У мене є Apple Silicon M1, і я все ще стикаюся з цією помилкою arm64. Чому це так?
Аспен

Відповіді:


484

В основному ви повинні виключити arm64для архітектури симулятора як з вашого проекту, так і з проекту Pod,

  • Для цього перейдіть до Параметри побудови вашого проекту та додайте Any iOS Simulator SDKзначення зі значенням arm64всередині Excluded Architecture.

    введіть тут опис зображення

АБО

  • Якщо ви використовуєте власні XCConfigфайли, ви можете просто додати цей рядок для виключення архітектури симулятора.
EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64

Тоді

Ви повинні робити те саме для проекту Pod, доки всі постачальники какао-стручків не закінчать додавати наступні дані у свій Podspec .

s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }

Ви можете вручну додати Excluded Architechureфайл у налаштуваннях збірки проекту Pod , але він буде замінений під час використання pod install.

Замість цього ви можете додати цей фрагмент у свій Podfile. Він буде писати необхідні налаштування збірки кожного разу під час запускуpod install

post_install do |installer|
  installer.pods_project.build_configurations.each do |config|
    config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
  end
end

4
Додаткові деталі про CocoaPods тут приємні. Зверніть увагу, що без [sdk=iphonesimulator*]після EXCLUDED_ARCHS, XCode не зможе знайти ваші стручки під час створення фактичного пристрою, оскільки жоден стручок не буде створений для arm64.
mwu

6
Працював у мене! Зверніть увагу, що post_install do |installer|в більшості підфайлів вже є розділ через фліппер. Вставте внутрішню секцію installer.pods_project.build_configurations.each do |config| config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64" endза flipper_post_install(installer)лінію.
Рамон Вермелен

5
Я отримую building for iOS Simulator, but linking in object file built for macOS, for architecture x86_64. Як це виправити?
Sazzad Hissain Khan

3
Це рішення є чудовим, і я хотів би додати, що якщо ви створюєте свій власний стручок, зверніть увагу, зокрема, на 2 рядки, які пропонує автор після "... поки всі постачальники стручків какао не додадуть у свій Podspec" як відсутність цих у моєму власному фреймворку Podspec спричиняв помилки підключення, коли я намагався перенести його до свого приватного репо. Дякую!
Danny

1
Рішення має недолік, який спричиняє проблеми, оскільки автори специфікацій специфікацій знайшли та застосували це рішення. Проблемною частиною є використання user_target_xcconfig. Оскільки декілька специфікацій pod визначають різні значення, оскільки EXCLUDED_ARCHSвони конфліктують, і CocoaPods видає подібні попередження [!] Can't merge user_target_xcconfig for pod targets: [... list of pods ...]. Singular build setting EXCLUDED_ARCHS[sdk=<...>] has different values.. Посилання на синтаксис podspec говорить, що цей атрибут "не рекомендується" guides.cocoapods.org/syntax/podspec.html#user_target_xcconfig
leberwurstsaft

118

TL; DR;

Встановіть для параметра "Build Active Architecture Only ( ONLY_ACTIVE_ARCH)" значення " Так" для ваших бібліотек / програм, навіть для режиму випуску .


Намагаючись визначити першопричину проблеми, я зрозумів кілька цікавих фактів про Xcode 12.

  1. Xcode 12 насправді є сходинкою для Apple Silicon, яка, на жаль, поки що недоступна. Але з цією платформою ми отримаємо macOS на базі arm64, де симулятори також працюватимуть на архітектурі arm64, на відміну від сучасної архітектури x86_64 на базі Intel.

  2. Xcode зазвичай залежить від "Виконати призначення" для створення своїх бібліотек / програм. Отже, коли симулятор вибирається як "Призначення запуску", він створює додаток для доступних архітектур симулятора, а коли пристрій вибирається як "Призначення запуску", він створює для архітектури, яку підтримує пристрій ( arm*).

  3. xcodebuild, в системі побудови Xcode 12+ розглядається arm64як діюча архітектура для симулятора. Отже, коли вибраний симулятор призначений для запуску, він потенційно може спробувати скомпілювати / зв’язати ваші бібліотеки / програми з arm64базованими симуляторами (поки що недоступний). Таким чином, він надсилає clang(++)деякий прапор -target, як arm64-apple-ios13.0-simulatorу форматі <architecture> - <os> - <sdk> - <platform>, і clang намагається побудувати / зв'язати симулятор на основі arm64, який врешті-решт виходить з ладу на Mac, що базується на Intel.

  4. Але xcodebuildпробує це лише для збірки Release . Чому? Оскільки для параметрів збірки "Build Active Architecture Only ( ONLY_ACTIVE_ARCH)", як правило, встановлюється значення "Ні" лише для конфігурації "Release". А це означає xcodebuild, що ми спробуємо побудувати всі архітектурні варіанти ваших бібліотек / програм для обраного пункту запуску для збірок випуску. І для призначення запуску Simulator, він буде включає в себе як x86_64і arm64тепер, так як arm64в Xcode 12+ також підтримується архітектура для тренажерів для підтримки Apple , кремній.

Простіше кажучи, Xcode не зможе побудувати вашу програму в будь-який час, коли вона спробує командний рядок, xcodebuild(який за замовчуванням випускає збірку, див. Загальну вкладку налаштувань вашого проекту) або іншим чином і намагається створити всі архітектурні варіанти, що підтримуються призначенням запуску . Тож простим обхідним шляхом для цього питання є встановлення значення "Build Active Architecture Only ( ONLY_ACTIVE_ARCH)" у " Так" у ваших бібліотеках / додатках, навіть для режиму випуску.

введіть тут опис зображення введіть тут опис зображення

Якщо бібліотеки включені як Pods і у вас є доступ до них, .podspecви можете просто встановити:

spec.pod_target_xcconfig = {'ONLY_ACTIVE_ARCH' => 'ТАК'}

spec.user_target_xcconfig = {'ONLY_ACTIVE_ARCH' => 'ТАК'} # не рекомендується

Мені особисто не подобається другий рядок, оскільки стручки не повинні забруднювати цільовий проект, і він може бути замінений у самих цільових налаштуваннях. Отже, відповідальність за споживчий проект повинна перекрити налаштування якимось чином. Однак це може бути необхідним для успішного з'єднання підспецій.

Однак, якщо у вас немає доступу до .podspec, ви завжди можете оновити налаштування під час встановлення стручків:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings["ONLY_ACTIVE_ARCH"] = "YES"
    end
  end
end

Одне мене турбувало, що це вплине на це, коли ми насправді архівуємо бібліотеки / програми. Під час архівування додатки зазвичай беруть конфігурацію "Release", і оскільки це буде створювати збірку випуску, враховуючи лише активну архітектуру поточного пункту призначення, за такого підходу ми можемо втратити фрагменти для armv7, armv7s тощо від цільової збірки. Однак я помітив, що в документації сказано (виділено на вкладеному малюнку), що цей параметр буде проігноровано, коли ми виберемо "Загальний пристрій iOS / Будь-який пристрій" як пункт призначення, оскільки він не визначає жодної конкретної архітектури. Отже, я думаю, нам слід бути добре, якщо ми заархівуємо наш додаток, вибравши його як пункт запуску.


1
Це насправді дивовижна зміна в порівнянні з Apple, і це коштувало мені півдня, щоб зрозуміти, що я вважаю, що Apple повинна компенсувати :). Це не задокументоване оновлення (принаймні, наскільки я знаю), і, безумовно, вплине на всіх, хто перейде на Xcode 12. Я сподіваюся, що кожен знайде свій власний спосіб подолати це, як тільки вони знають основи.
Аян Сенгупта,

1
Якщо використовується декілька специфікацій стручків, user_target_xcconfigі значення не збігаються точно, CocoaPods видаватиме такі застереження [!] Can't merge user_target_xcconfig for pod targets: [... list of pods ...]. Singular build setting EXCLUDED_ARCHS[sdk=<...>] has different values.. Посилання на синтаксис podspec говорить, що цей атрибут "не рекомендується" guides.cocoapods.org/syntax/podspec.html#user_target_xcconfig . Тому, будь ласка, не використовуйте user_target_xcconfigдля цього, щоб позбавити багатьох розробників проблем.
leberwurstsaft

2
Правильно! І, думаю, я вже згадував це у своїй відповіді.
Ayan Sengupta,

1
Я вважаю, що це найкраще рішення, оскільки воно не порушує побудови за допомогою Xcode 11. Я застосував це налаштування до всього проекту, тоді мені не потрібно було встановлювати його окремо для Pods або цілей. І це працює тоді як на Xcode 11.7, так і на Xcode 12. За винятком арки arm64відображається в Xcode 11.7, x86_64тому вона виключає основну архітектуру симулятора.
Войцех Кулік

2
Мені вдалось змусити все це врешті запрацювати з 'EXCLUDED_ARCHS [sdk = iphonesimulator *]' => 'arm64', але тільки в pod_target_xcconfig, і лише на проблемному стручку (який включав попередньо вбудовану бібліотеку) та одному стручку, який залежав від проблемний стручок. Все інше залишилось чистим. Я вирішив, що віддаю перевагу такому рішенню як активна арка.
Airsource Ltd

72

Знайшли рішення! https://developer.apple.com/forums/thread/657913

Якщо ви встановите виключені архітектури для симулятора на arm64, він буде скомпільований.

виключаючи архітектури для симулятора


Досить справедливо, проблема, з якою я стикалася, пов’язана з бібліотекою, пов’язаною вручну, однак це не викликало проблем з нашими стручками, якими ми також користуємось.
SlashDevSlashGnoll

5
Я тестував у режимі випуску, тому мені довелося також додати його до випуску
MujtabaFR

Думаю, після цієї посади ми знову в бізнесі. дякую, це допомогло.
JBarros35,

@btxios Я стикаюся з проблемою "ARCHS [@]: незв'язана змінна" під час створення архіву. Чи змогли ви вирішити цю проблему?
ArdenDev

50

Налаштування збірки Valid Architectures було видалено в Xcode 12. Якщо у вас були значення у цьому налаштуванні збірки, вони спричиняють проблему та потребують видалення.

Я зміг «очистити» налаштування збірки VALID_ARCHS, додавши його назад як Встановлений користувачем параметр збірки (без значень), запустивши проект (який не вдався), а потім видаливши налаштування збірки VALID_ARCHS. Після цього я зміг побігти на тренажері.

Параметр побудови моєї архітектури - це стандартна архітектура.

Ви можете додати визначений користувачем параметр за допомогою кнопки плюса в налаштуваннях збірки:

Встановлене користувачем налаштування


9
Це має бути прийнятою відповіддю. Переконайтеся, що проект програми вибрано не цільовим. В іншому випадку ви не зможете видалити VALID_ARCHS з налаштувань збірки. :)
Bionicle

2
@trishcode Навіть після цього я отримую ту саму помилку (xcode12 beta4), будь-яка робота
виникає

3
@SivakrishnaPerla Якщо ви можете відкрити проект у Xcode 11, тоді ви зможете побачити, на яких саме цілях використовується Valid Architectures. Ви навіть можете очистити налаштування в Xcode 11, а потім спробувати проект ще раз у Xcode 12. Якщо вам все ще потрібен обхідний шлях, і ви отримуєте помилку на вбудованому фреймворці, відповідь SlashDevSlashGnoll повинна спрацювати. Якщо вам потрібен обхідний шлях, і ви отримуєте помилку на Cocoapod, тоді виключіть архітектуру arm64 у установці Podfile після встановлення.
trishcode

1
@trishcode Дякую, встановлено arm64 у виключеній архітектурі та видалено VALID_ARCHS.
Sivakrishna Perla

1
Якщо я видалю VALID_ARCHS і додаю arm64 до виключеної архітектури, я отримую цю помилку - Перевіряю залежності Немає архітектур для компіляції (ARCHS = arm64 x86_64, VALID_ARCHS =, EXCLUDED_ARCHS = (arm64)).
nOOb iOS

14

Xcode 12.3

Я вирішив цю проблему, встановивши для параметра Перевірити робочу область значення Так

введіть тут опис зображення


Вирішив моє питання, дякую!
Деклан Ленд

1
Не вирішив мого питання
Аспен

Вирішив моє питання. Найпростіше виправлення! Я радий, що це вирішено, але хтось може пояснити, як це вирішує проблему?
njdeveloper

11

Якщо у вас є проблеми з Xcode 12 із симуляторами, а не реальним пристроєм, так, вам доведеться видалити налаштування VALID_ARCHS , оскільки це більше не підтримується. Перейдіть до "налаштування збірок", знайдіть " VALID_ARCHS " і видаліть визначені користувачем властивості. Робіть це в кожній мішені вас є.

Тим не менше, можливо, вам доведеться додати скрипт внизу вашого підфайлу, щоб підкади компілювались з правильною архітектурою та ціллю розгортання:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings.delete 'IPHONEOS_DEPLOYMENT_TARGET'
      config.build_settings['ONLY_ACTIVE_ARCH'] = 'NO'
     end
  end
end

Видалення VALID_ARCHSз мого проекту працювало нормально. Я не змінив ні файлу podfile, ні проекту pods.
Анхель Телес

9

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

Я видалив VALID_ARCHS у розділі Налаштування збірки> Визначені користувачем, і це спрацювало! Я трохи забивав голову, перш ніж знайти це.


8

Для мене спрацювало таке налаштування:

Параметри побудови >> Виключені архітектури

додано "arm64" як до режиму випуску, так і до налагодження для опції "Any iOS Simulator SDK".

введіть тут опис зображення


6

Я вважаю, що знайшов відповідь. Відповідно до приміток до випуску Xcode 12 beta 6:

" Редактор" Налаштування збірки "більше не включає налаштування" Дійсні архітектури "(VALID_ARCHS), і його використання не рекомендується. Натомість є новий параметр збірки" Виключені архітектури "(EXCLUDED_ARCHS). Якщо проект включає VALID_ARCHS, параметр відображається в" Користувач " -Визначений розділ редактора налаштувань збірки. (15145028) "

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


1
Використовуючи Xcode, VALID_ARCHS знаходиться у вибраному проекті (не цільовому), потім `Налаштування збірки -> Визначені користувачем". Виберіть його та видаліть.
Акшай,

Це рішення спрацювало для мене. Рішення, запропоноване деякими іншими, не спрацювало, оскільки просто додавання значення 'arm64' до поля 'Виключити архітектуру' почало видавати деяку помилку 'Дозвіл файлу' для згенерованого файлу .app.
archeopetrix

6

Я вирішую проблему, додаючи "arm64" у "Виключені архітектури" як для цілі проекту, так і для цілі проекту.

Xcode -> Цільовий проект -> Налаштування збірки -> Виключені архітектури> "arm64"

Xcode -> Pod Target -> Параметри побудови -> Виключені архітектури> "arm64"


6

Xcode 12

Видалення VALID_ARCHз налаштувань побудови в розділі " Визначена користувачем робота для мене".

введіть тут опис зображення


5

У вас xxx.framework файл podspec додайте дотримуйтесь конфігурації уникати пакунок pod містить арки симілятора arm64

s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }

Це спрацювало! Однак це означає, що Pod не можна використовувати в Mac Mac на основі Apple Silicon?
tomacco

Це підтверджено @tomacco?
Фернандо Рейносо

2
@FernandoReynoso Я щойно отримав розробницький перехідний набір, (ARM MacMini) буде тестувати та звітувати пізніше сьогодні
tomacco,

@tomacco Чи змогли ви це протестувати?
Houman

Якщо використовується декілька специфікацій стручків, user_target_xcconfigі значення не збігаються точно, CocoaPods видаватиме такі застереження [!] Can't merge user_target_xcconfig for pod targets: [... list of pods ...]. Singular build setting EXCLUDED_ARCHS[sdk=<...>] has different values.. Посилання на синтаксис podspec говорить, що цей атрибут "не рекомендується" guides.cocoapods.org/syntax/podspec.html#user_target_xcconfig . Тому, будь ласка, не використовуйте user_target_xcconfigдля цього, щоб позбавити багатьох розробників проблем.
leberwurstsaft

4

У мене були проблеми зі створенням фреймворків з командного рядка. Мій фреймворк залежить від інших фреймворків, у яких відсутня підтримка ARM-симуляторів. У підсумку я виключив підтримку симуляторів на базі ARM, поки не оновлю свої залежності.

Мені потрібен був EXCLUDED_ARCHS=arm64прапор при побудові фреймворку для симуляторів від CLI.

xcodebuild archive -project [project] -scheme [scheme] -destination "generic/platform=iOS Simulator" -archivePath "archives/[scheme]-iOS-Simulator" SKIP_INSTALL=NO BUILD_LIBRARY_FOR_DISTRIBUTION=YES EXCLUDED_ARCHS=arm64

1
Те ж саме. Ключовою "проблемою" у цьому сценарії є фактично побудова для загального пункту призначення через -destination "generic/platform=iOS Simulator". Це веде до створення всіх доступних архітектур, що включає arm64, починаючи з Xcode 12.
Саша

4

Спробувавши майже кожну публікацію в цій темі та прочитавши форуми розробників apple, я виявив, що для мене працює лише одне рішення.

Я будую універсальний фреймворк, який використовується в швидкій програмі. Я не зміг побудувати Simulator без помилок архітектури.

У моєму проекті Framework я маю завдання Universal Framework на етапах побудови, якщо це саме для вас

  • Додайте до свого xcodebuildзавдання наступне у фазі збірки: EXCLUDED_ARCHS="arm64"

Далі вам потрібно змінити наступний проект Build Settings:

  • Видаліть VALID_ARCHS налаштування, визначені користувачем
  • Набір ONLY_ACTIVE_ARCHдля YES***

*** Якщо ви розробляєте фреймворк і також маєте демонстраційний додаток, цей параметр потрібно ввімкнути в обох проектах.


4

Оновлення: жовтень 2020 р

Ви можете просто встановити arm64лише для Debug > Simulator - iOS 14.O SDKрозділу Виключена архітектура.

введіть тут опис зображення


3

Для розробників Pod у ваш Podspec додайте:

s.pod_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }
s.user_target_xcconfig = { 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'arm64' }

Тоді у вашому зразковому проекті Зразки налаштувань файлів проекту

Подивіться, як це працює в цьому проекті


Якщо використовується декілька специфікацій стручків, user_target_xcconfigі значення не збігаються точно, CocoaPods видаватиме такі застереження [!] Can't merge user_target_xcconfig for pod targets: [... list of pods ...]. Singular build setting EXCLUDED_ARCHS[sdk=<...>] has different values.. Посилання на синтаксис podspec говорить, що цей атрибут "не рекомендується" guides.cocoapods.org/syntax/podspec.html#user_target_xcconfig . Тому, будь ласка, не використовуйте user_target_xcconfigдля цього, щоб позбавити багатьох розробників проблем.
leberwurstsaft

2

Я також стикався з тією ж проблемою з конкретною бібліотекою, яка була встановлена ​​через Carthage. Для тих, хто використовує Carthage, оскільки Carthage не працює нестандартно з Xcode 12, цей документ допоможе вирішити проблему, яка працює в більшості випадків. Ну, незабаром, Карфаген будує жирні фреймворки, а це означає, що фреймворк містить двійкові файли для всіх підтримуваних архітектур. До появи Apple Sillicon все працювало чудово, але зараз існує конфлікт, оскільки існують дублюючі архітектури (arm64 для пристроїв та arm64 для симулятора). Це означає, що Карфаген не може пов'язати певні архітектурні рамки з єдиним жировим середовищем.

Ви можете слідувати інструкціям тут. Карфаген XCODE 12

Потім після налаштування Carthage. Помістіть arm64 у "Виключені архітектури" у налаштуваннях збірки. введіть тут опис зображення

Спробуйте запустити свій проект за допомогою симулятора. Симулятор повинен працювати без помилок.


1

Проблема тут полягає у дійсних архітектурах у Xcode 11, відкритті проекту в Xcode 11 та зміні значення дійсних архітектур на $ (ARCHS_STANDARD) для вашого проекту, цілі та підсистем, повторно відкрити проект у Xcode 12 та побудувати


1

Встановіть параметр "Build Active Architecture Only"(ONLY_ACTIVE_ARCH)побудови так,xcode запитує arm64 через архітектуру Silicon MAC, яка є arm64.

arm64 був доданий як арка симулятора в Xcode12 для підтримки Silicon MAC.

/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/SDKSettings.json


Якщо він не працює на кремній Mac, то, звичайно, він повинен знати, не використовувати arm64?
Джонатан.

@ Джонатан. Так, це мало бути зроблено так, але наразі це не так.
Aravind

1

У моєму випадку: Xcode 12

Я встановлюю порожні значення EXCLUDED_ARCHSта встановлюю ONLY_ACTIVE_ARCHDebug = YESRelease = NO Налаштування збірки проекту

і я включив це у свій підфайл:

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
        end
    end
end

Він працює на моєму симуляторі iPhone 8 (iOS 12) та iPhone 11 Pro Max (iOS 14) та на моєму пристрої iPhone 7 Plus (iOS 13.4)


1

Під час Build Settingsпошуку VALID_ARCHнатисніть delete. Це має працювати для мене з Xcode 12.0.1

VALID_ARCH у налаштуваннях збірки


2
Не знаходжу VALID_ARCH, що це?
Houman

1

Додавати лише Any iOS Simulator SDK -> x86_64доProject's Build Settings -> VALID_ARCHS творів для мене.

Версія Xcode: 12.1 (12A7403)

введіть тут опис зображення

Якщо ваш проект включає деякі фреймворки, які не підтримують x86_64.

  • Ви можете додати ці імена фреймворку ( xxx.framework) доTarget -> Build Settings -> Excluded Source File Names -> Debug -> Any iOS Simulator SDK .
  • А потім модифікуйте, Framework Search Pathsщоб видалити шляхи до цих фреймворків Debug -> Any iOS Simulator SDK.

Ці два налаштування дозволяють уникнути Xcode для побудови та зв’язування цих фреймворків у режимі симулятора.

введіть тут опис зображення

введіть тут опис зображення


1

Я розумію проблему з arm64 та Xcode 12, і мені вдалося вирішити проблеми зі збіркою, виключивши архітектуру arm64 для iPhone Simulator або встановивши ONLY_ACTIVE_ARCH для схеми випуску. Однак у мене все ще виникають проблеми з проштовхуванням мого фреймворку за допомогою push repo push.

Я виявив, що налаштування s.pod_target_xcconfig у моєму podspec не застосовує цей параметр до залежностей, визначених у тій самій podspec. Я бачу це в фіктивному проекті програми, який Cocoapods створює під час перевірки. Перевірка Cocoapods запускає схему випуску для симулятора, і це не вдається, коли одна або кілька залежностей не виключають arm64 або не налаштовано будувати лише активну архітектуру.

Рішенням може бути змусити Cocoapods додати сценарій після встановлення під час перевірки проекту або дозволити йому будувати схему налагодження, оскільки схема налагодження будує лише активну архітектуру.

У підсумку я використав Xcode 11, щоб звільнити свій стручок, щоб пройти перевірку. Ви можете завантажити Xcode 11 з сайту developer.apple.com, скопіювати його в папку Програми як Xcode11.app і переключити за допомогою sudo xcode-select --switch /Applications/Xcode11.app/Contents/Developer. Не забудьте повернутися назад, коли закінчите.


1

Після спроб та пошуку різних рішень, я думаю, найбезпечнішим способом є додавання наступного коду в кінці Підфайлу

post_install do |pi|
   pi.pods_project.targets.each do |t|
       t.build_configurations.each do |bc|
          bc.build_settings['ARCHS[sdk=iphonesimulator*]'] =  `uname -m`
       end
   end
end

Таким чином, ви замінюєте лише архітектуру компілятора симулятора iOS як поточну архітектуру процесора. У порівнянні з іншими, це рішення також буде працювати на комп'ютерах з Apple Silicon .


Приємно бачити, що хтось принаймні розуміє проблему і не пропонує просто вилучити підтримку Apple Silicon для iOS Simulator.
Camsoft

0

У моєму випадку:

У мене було 4 конфігурації (+ DebugQa та ReleaseQa) Cocoapods використовується як менеджер залежностей

Для налагодження я зібрався на пристрої та в тренажері, а на qa - лише на пристрої.

Це допомогло встановити для BuildActiveArchitecture значення yes в PodsProject


0

У моєму випадку я намагався запустити на симуляторі watchOS 7 у режимі Relese, але симулятор iOS 14 був у режимі налагодження.

Тож просто переведення обох симів у режим налагодження / випуску вирішило проблему для мене!


0

Поверніть конфігурацію збірки назад у режим налагодження або увімкніть Активні архітектури збірки лише для режиму налагодження та випуску. Причиною є те, що ваша бібліотека / фреймворк не підтримує нову архітектуру Simulator ARM64 (працює на Mac з процесором Apple Silicon)


0

Додайте рядок "arm64" (без лапок) до шляху: Xcode -> Проект -> Налаштування збірки -> Архітектури -> Виключені архітектури Крім того, зробіть те ж саме для Pods. В обох випадках для полів налагодження та випуску.

або детально ...

Помилки, згадані тут під час розгортання на симуляторі за допомогою Xcode 12, також є однією з речей, які вплинули на мене. Просто клацніть правою кнопкою миші на кожному з моїх проектів і покажіть у пошуку, відкривши .xcodeproj в Atom, потім пройшовши через .pbxproj і видаливши всі налаштування VALIDARCHS. Це те, що змусило мене працювати. Спробував кілька інших пропозицій (за винятком arm64, Build Active Architecture Only), які, здавалося б, продовжили мою збірку, але зрештою залишили мені ще одну помилку. Мати налаштування VALIDARCH, мабуть, найкраще перевірити спочатку.


0

Спільний доступ до рішення, яке працювало для мене, яке може комусь допомогти

Проблема при компіляції для симулятора:

побудова для iOS Simulator, але зв’язування в об’єктному файлі, побудованому для iOS, для архітектури arm64

XCODE 12.1, POD 1.9.1

Структура мого проекту

  • Головна мета
  • Поширити розширення
  • Подовження служби сповіщення
  • Підмодуль, спеціальна структура
  • Підфайл
  1. Додати arm64до налаштувань збірки -> Exclude Architectureу всіх цілях.

введіть тут опис зображення

  1. Вилучено arm64з VALID_ARCHSі додав x86_64у всіх цілях.

введіть тут опис зображення

  1. Додайте наступний код в podfile

    post_install do |installer|
        installer.pods_project.build_configurations.each do |config|
        config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
     end
    end
    
  2. Зробив pod update, видалив podfile.lockі зробивpod install

  3. Робіть чисту побудову.


0

Спробувавши безліч марних відповідей в Інтернеті. Це працює для мене.

По-перше, генерує x86_64 для проектів Pod !!!!

post_install do |installer|
    installer.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['ARCHS'] = "arm64 x86_64"
        end
    end
end

По-друге, додайте "x86_64" для VALID_ARCHS

введіть тут опис зображення

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.