Xcode 12, iOS Simulator için derleme, ancak mimari arm64 için iOS için oluşturulmuş nesne dosyasına bağlanma


217

İOS 14 için hazırlık yapmak üzere Xcode 12'de (beta 5) büyük bir proje oluşturmaya çalışıyor (ve Xcode 11 üzerinde çalışıyor!). Codebase daha önce Obj-C idi, ancak şimdi hem Obj-C hem de Swift içeriyor ve Obj-C ve / veya Swift.

Xcode 12 desteğiyle (şu anda 1.10.0.beta 2) cocoapodların yeni beta sürümünü çıkardım.

Kapsül kurulumu başarılı. Bir derleme yaptığımda, bir kapsül çerçevesinde aşağıdaki hatayı alıyorum:

"iOS Simulator için derleme, ancak mimari arm64 için iOS için oluşturulmuş nesne dosyasında bağlantı oluşturma"

Çerçeve üzerinde lipo-info çalıştırmaya gittiğimde, şu var: armv7s armv7 i386 x86_64 arm64.

Daha önce, projenin Geçerli Mimarileri şu şekilde ayarlanmıştı: armv7, armv7s ve arm64.

Xcode 12'de, Apple'ın belgelerine göre bu ayar ortadan kalkar. Mimariler $ (ARCHS_STANDARD) olarak ayarlandı. Hariç tutulan mimarilerde ayarlanmış hiçbir şeyim yok.

Burada neler olup bittiğine dair bir fikri olan var mı? Henüz bunu daha basit bir proje ile yeniden üretemedim.


1
Projeye manuel olarak dahil edilen herhangi bir 3. taraf çerçevesinin bir bağlantı adımında aynı şeyi alıyorum. Bir çözüm bulursan merak ediyorum.
SlashDevSlashGnoll

Bu arada bunu çözdün mü? (eylül ortası, hâlâ Xcode 12 beta 6)
epolog


2
Anlıyorum building for iOS Simulator, but linking in object file built for macOS, for architecture x86_64:( Nasıl düzeltilir?
Sazzad Hissain Khan

Yanıtlar:


343

Temel olarak arm64simülatör mimarisi için hem projenizden hem de Pod projesinden hariç tutmanız gerekir ,

  • Bunu yapmak için, projenizin Yapı Ayarlarına gidin ve içerisine Any iOS Simulator SDKdeğer katın .arm64Excluded Architecture

    görüntü açıklamasını buraya girin

VEYA

  • Özel XCConfigdosyalar kullanıyorsanız , simülatör mimarisini hariç tutmak için bu satırı kolayca ekleyebilirsiniz.
EXCLUDED_ARCHS[sdk=iphonesimulator*] = arm64

Sonra

Tüm kakao kapsülü satıcıları Podspec'lerine aşağıdakileri ekleyene kadar Pod projesi için aynısını yapmanız gerekir .

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

Excluded ArchitechurePod projenizin Yapı Ayarlarını manuel olarak ekleyebilirsiniz , ancak kullandığınızda üzerine yazılacaktır pod install.

Bunun yerine, bu pasajı Podfile. Her çalıştırdığınızda gerekli Yapı Ayarlarını yazacaktır.pod install

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

26
Vay be! günümü ve muhtemelen gecemi kurtardım! Böyle detaylı bir cevap için teşekkürler.
sandpat

3
CocoaPod'larla ilgili ekstra detay burada güzel. Olmadan bu Not [sdk=iphonesimulator*]sonra EXCLUDED_ARCHS, XCode bölmelerin hiçbiri arm64 için inşa edilecek beri gerçek bir cihaz için bina yaparken bölmeleri bulmak için başarısız olur.
mwu

2
Benim için çalıştı! post_install do |installer|Flipper nedeniyle çoğu Pod dosyasında zaten bir bölüm olduğunu unutmayın . İç bölümü çizginin installer.pods_project.build_configurations.each do |config| config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64" endarkasına yapıştırın flipper_post_install(installer).
Ramon Vermeulen

2
Alıyorum building for iOS Simulator, but linking in object file built for macOS, for architecture x86_64. Nasıl düzeltilir?
Sazzad Hissain Khan

2
Bu çözüm mükemmeldir ve ekleyeyim ki, kendi kapsülünüzü oluşturuyorsanız, özellikle yazarın önerdiği 2 satırdan sonra "... tüm kakao kapsülü satıcıları Podspec'lerine eklenene kadar" bunların yokluğuna dikkat edin. kendi çerçevemin Podspec'inde, onu özel depoma göndermeye çalıştığımda linting hatalarına neden oluyordu. Teşekkürler!
Danny

74

TL; DR;

Yayın modu için bile kitaplıklarınız / uygulamalarınız için ONLY_ACTIVE_ARCH" Yalnızca Aktif Mimari Oluştur ( )" seçeneğini Evet olarak ayarlayın.


Sorunun temel nedenini belirlemeye çalışırken Xcode 12 hakkında bazı eğlenceli gerçekleri fark ettim.

  1. Xcode 12, Apple Silicon için maalesef henüz mevcut olmayan bir atlama taşıdır. Ancak bu platformla, simülatörlerin mevcut Intel tabanlı x86_64 mimarisinden farklı olarak arm64 mimarisi üzerinde de çalışacağı arm64 tabanlı macOS alacağız.

  2. Xcode, kitaplıklarını / uygulamalarını oluşturmak için genellikle "Hedefi Çalıştır" a bağlıdır. Dolayısıyla, bir simülatör "Çalıştırma Hedefi" olarak seçildiğinde, mevcut simülatör mimarileri için uygulamayı oluşturur ve "Çalıştırma Hedefi" olarak bir cihaz seçildiğinde, cihazın desteklediği mimari için ( arm*) oluşturur.

  3. xcodebuild, Xcode 12+ derleme sisteminde arm64simülatör için geçerli bir mimari olarak kabul edilir. Bu nedenle, çalıştırma hedefi olarak bir simülatör seçildiğinde, kitaplıklarınızı / uygulamalarınızı arm64temelli simülatörlere karşı da derlemeyi / bağlamayı deneyebilir (henüz mevcut değil). Bu nedenle , <architecture> - <os> - <sdk> - <platform> biçiminde olduğu clang(++)gibi bir hedef bayrağı gönderir arm64-apple-ios13.0-simulatorve clang, sonunda Intel tabanlı Mac'te başarısız olan arm64 tabanlı simülatöre karşı derleme / bağlantı kurmaya çalışır.

  4. Ancak xcodebuildbunu yalnızca Sürüm yapıları için dener . Neden? Çünkü, "Yalnızca Etkin Mimari Oluştur ( ONLY_ACTIVE_ARCH)" derleme ayarları genellikle yalnızca "Yayın" yapılandırması için "Hayır" olarak ayarlanır. Ve bu xcodebuild, sürüm yapıları için seçilen çalıştırma hedefi için kütüphanelerinizin / uygulamalarınızın tüm mimari varyantlarını oluşturmaya çalışacağı anlamına gelir . Ve Simülatör çalıştırmak hedef için, her iki kapsar olacak x86_64ve arm64bundan sonra, çünkü arm64Xcode 12+ da simülatörleri için desteklenen bir mimaridir içinde Apple Silicon'u destekleyecek.

Basitçe söylemek gerekirse, Xcode, komut satırını her denediğinde xcodebuild(varsayılan olarak derlemeyi yayınlar, proje ayarınızın genel sekmesine bakın) veya başka bir şekilde sürüm modunda uygulamanızı derleyemez. Bu nedenle, bu soruna basit bir çözüm , yayınlama modu için bile kitaplıklarınızda / uygulamalarınızda ONLY_ACTIVE_ARCH" Yalnızca Etkin Mimari Oluştur ( )" seçeneğini Evet olarak ayarlamaktır .

görüntü açıklamasını buraya girin görüntü açıklamasını buraya girin

Kitaplıklar Bölmeler olarak dahil edilmişse ve erişiminiz .podspecvarsa, basitçe şunları ayarlayabilirsiniz:

spec.pod_target_xcconfig = {'ONLY_ACTIVE_ARCH' => 'EVET'}

spec.user_target_xcconfig = {'ONLY_ACTIVE_ARCH' => 'EVET'} # önerilmez

Ben şahsen ikinci satırı sevmiyorum çünkü bölmeler hedef projeyi kirletmemeli ve hedef ayarlarda geçersiz kılınabilir. Bu nedenle, ayarı bir şekilde geçersiz kılmak tüketici projesinin sorumluluğunda olmalıdır. Ancak, podspec'lerin başarılı bir şekilde lintlenmesi için bu gerekli olabilir.

Ancak, öğesine erişiminiz yoksa .podspec, bölmelerin kurulumu sırasında ayarları her zaman güncelleyebilirsiniz:

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

Kitaplıkları / uygulamaları gerçekten arşivlediğimizde bunun etkisinin ne olacağı konusunda endişelendiğim bir şey var. Arşivleme sırasında uygulamalar genellikle "Yayın" konfigürasyonunu alır ve bu, yalnızca geçerli çalışma hedefinin aktif mimarisini dikkate alan bir sürüm yapısı oluşturacağından, bu yaklaşımla, hedef derlemeden armv7, armv7, vb. Dilimlerini kaybedebiliriz. Ancak, herhangi bir özel mimari tanımlamadığından, çalışma hedefi olarak "Genel iOS Aygıtı / Herhangi Bir Aygıt" ı seçtiğimizde bu ayarın yok sayılacağını (ekteki resimde vurgulanmıştır) bildiren belgelerin farkına vardım. Bu yüzden, uygulamamızı bir çalışma hedefi olarak seçerek arşivlersek iyi olacağımızı düşünüyorum.


20
Bu, sadece "bu üç yapı ayarını değiştir ve belki işe yarıyor" demek yerine, problemi anlamamı geliştiren ilk cevaptır. Yazıyı yazdığınız zaman için teşekkürler!
epolog

1
Bu gerçekten Apple'dan şaşırtıcı bir değişiklik ve Apple'ın telafi etmesi gerektiğini düşündüğümü anlamam yarım günüme mal oldu :). Bu, belgelenmiş bir güncelleme değil (en azından bildiğim kadarıyla) ve kesinlikle Xcode 12'ye yükseltme yapan herkesi etkileyecek. Umarım herkes temel bilgileri öğrendikten sonra bunun üstesinden gelmek için kendi yolunu bulur.
Ayan Sengupta

1
Birden fazla kapsül spesifikasyonu kullanılırsa user_target_xcconfigve değerler tam olarak eşleşmezse, CocoaPods bunun gibi uyarılar verir [!] Can't merge user_target_xcconfig for pod targets: [... list of pods ...]. Singular build setting EXCLUDED_ARCHS[sdk=<...>] has different values.. Podspec sözdizimi referansı, bu özniteliğin "önerilmez" olduğunu belirtir guides.cocoapods.org/syntax/podspec.html#user_target_xcconfig . Bu nedenle, lütfen user_target_xcconfigbirçok geliştiriciyi sorundan kurtarmak için bunun için kullanmayın .
leberwurstsaft

1
Sağ! Ve sanırım cevabımda bundan daha önce bahsetmiştim.
Ayan Sengupta

2
Sonunda hepsini 'EXCLUDED_ARCHS [sdk = iphonesimulator *]' => 'arm64' ile ancak yalnızca pod_target_xcconfig'de ve yalnızca sorunlu bölmede (önceden oluşturulmuş bir kitaplık içeren) ve bağlı olan tek bölmede çalıştırmayı başardım sorun bölmesi. Diğer her şey temiz bırakıldı. Bunu aktif kemer çözümüne tercih ettiğime karar verdim.
Airsource Ltd

65

Bir çözüm buldum! https://developer.apple.com/forums/thread/657913

Simülatör için dışlanmış mimarileri arm64 olarak ayarlarsanız, derlenecektir.

simülatör mimarileri hariç


5
Bunun bir çözüm olduğuna inanmıyorum. Bu, yükledikleri komut dosyasıyla cocoapods post build adımında bir sorun yaratır. Bölmeler / Hedef Destek Dosyaları / Bölmeler-Tüm Uygulamalar-XXX / Bölmeler-All-Apps-XXX-frameworks.sh: satır 141: ARCHS [@]: ilişkisiz değişken Bu, geçersiz mimarileri kaldırmaya çalışan bir yöntemdedir, bu nedenle hala yapıyı bitiremiyor. O zaman bile, arm64'ü hariç tutmak, sim'in çalışmasını sağlayabilecek, ancak yapı sorununu çözmeyecek geçici bir düzeltmedir.
btxios

Yeterince adil, yaşadığım sorun manuel olarak bağlanmış bir kitaplıkla ilgiliydi, ancak kullandığımız bölmelerimizde de bir soruna neden olmadı.
SlashDevSlashGnoll

3
Release modunu test ediyordum, bu yüzden onu Release'e de eklemek zorunda kaldım
MujtabaFR

Sanırım bu yazıdan sonra tekrar iş başındayız. teşekkür ederim yardımcı oldu.
JBarros35

Bu benim için çalışıyor! Teşekkür ederim.
Arshad

40

Xcode 12, beta 6

Geçerli Mimariler derleme ayarı Xcode 12'de kaldırılmıştır. Bu derleme ayarında değerlere sahipseniz, bunlar bir soruna neden olur ve kaldırılması gerekir.

VALID_ARCHS derleme ayarını tekrar Kullanıcı Tanımlı derleme ayarı (değer içermeyen) olarak ekleyerek, projeyi çalıştırarak (başarısız olan) ve ardından VALID_ARCHS derleme ayarını silerek "temizleyebildim". Bundan sonra simülatörde koşabildim.

Mimarilerim oluşturma ayarı Standart Mimariler'dir.

Derleme Ayarlarındaki artı düğmesinden Kullanıcı Tanımlı bir Ayar ekleyebilirsiniz:

Kullanıcı Tanımlı Ayar


7
Kabul edilen cevap bu olmalıdır. Hedef değil uygulama projesinin seçildiğinden emin olun. Aksi takdirde, VALID_ARCHS'yi Yapı Ayarlarından silemezsiniz. :)
Bionicle

1
@trishcode Bunu yaptıktan sonra bile aynı hatayı alıyorum (xcode12 beta4), herhangi bir çözüm
Sivakrishna Perla

3
@SivakrishnaPerla Projeyi Xcode 11'de açabiliyorsanız, o zaman Tam olarak hangi hedeflerde Geçerli Mimarilerin kullanıldığını görebilirsiniz. Hatta Xcode 11'deki ayarı temizleyebilir ve ardından projeyi Xcode 12'de tekrar deneyebilirsiniz. Hala bir geçici çözüme ihtiyacınız varsa ve gömülü bir çerçevede hata alıyorsanız, SlashDevSlashGnoll'un cevabı çalışmalıdır. Bir geçici çözüme ihtiyacınız varsa ve bir Cocoapod'da hata alıyorsanız, Podfile sonrası kurulumunda arm64 mimarisini hariç tutun.
Eylül'de saat

1
@trishcode Teşekkürler, Arm64'ü hariç tutulan mimaride ayarlama ve VALID_ARCHS'yi kaldırma işe yaradı.
Sivakrishna Perla

1
VALID_ARCHS'yi kaldırır ve Hariç tutulan mimariye arm64 eklersem, bu hatayı alıyorum - Bağımlılıkları kontrol et Derlenecek mimari yok (ARCHS = arm64 x86_64, VALID_ARCHS =, EXCLUDED_ARCHS = (arm64)).
08'de iOS

8

Simülatörlerle Xcode 12'de sorun yaşıyorsanız, gerçek cihazda değil, evet artık desteklenmediği için VALID_ARCHS ayarlarını kaldırmanız gerekir . " Yapı ayarları" na gidin, " VALID_ARCHS " araması yapın ve kullanıcı tanımlı özellikleri kaldırın . Sahip olduğunuz her hedefte yapın.

Yine de, doğru mimari ve dağıtım hedefiyle derlenen bölmelere sahip olmak için podfile'nizin altına bir komut dosyası eklemeniz gerekebilir:

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

Projemden VALID_ARCHSçıkarmak iyi çalıştı. Pod dosyasına veya kapsül projesine hiçbir şeyi değiştirmedim.
Ángel Téllez

7

Xcode 12'ye yükselttikten sonra simülatör için hala gerçek bir cihaz inşa edebildim. Podfile yapısı yalnızca gerçek cihaz için çalışıyordu.

Yapı Ayarları> Kullanıcı Tanımlı altında VALID_ARCHS öğesini sildim ve işe yaradı! Bunu bulmadan önce bir süre kafamı salladı.


6

Cevabı bulduğuma inanıyorum. Xcode 12 beta 6 sürüm notlarına göre:

" Derleme Ayarları düzenleyicisi artık Geçerli Mimariler derleme ayarını (VALID_ARCHS) içermiyor ve kullanımı önerilmiyor. Bunun yerine, yeni bir Hariç Tutulan Mimariler derleme ayarı (EXCLUDED_ARCHS) var. Bir proje VALID_ARCHS içeriyorsa, ayar Kullanıcıda görüntülenir Yapı Ayarları düzenleyicisinin -Defined bölümü. (15145028) "

Proje dosyasını manuel olarak düzenleyerek (Xcode kullanarak proje dosyasından öğeyi nasıl kaldıracağımı çözemedim) ve VALID_ARCHS'a atıfta bulunan tüm satırları kaldırarak bu sorunu çözebildim. Bundan sonra, simülatör için ince inşaat yapabiliyorum.


1
VALID_ARCHS, Xcode'u kullanarak, Proje'yi (Hedef değil) seçin ve ardından `` Oluşturma Ayarı -> Kullanıcı Tanımlı "öğesini seçin ve silin.
Akshay

Bu çözüm benim için çalıştı. Bazılarının önerdiği çözüm, 'Mimariyi Dışla' alanına sadece 'arm64' değerini eklemek kadar işe yaramadı, oluşturulan .app dosyası için bir 'Dosya İzni' hatası vermeye başladı.
archeopetrix

5

Hem proje hedefi hem de pod hedefi için "Hariç Tutulan Mimariler" içine "arm64" ekleyerek sorunu çözüyorum.

Xcode -> Hedef Proje -> Yapı Ayarı -> Hariç Tutulan Mimariler> "arm64"

Xcode -> Kapsül Hedefi -> Oluşturma Ayarı -> Hariç Tutulan Mimariler> "arm64"


5

Xxx.framework podspec dosyanıza, follow config'i ekleyin, pod paketi arm64 similator archs içerir

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

İşe yaradı! Ancak bu, Pod'un Apple Silikon tabanlı Mac'lerde kullanılamayacağı anlamına mı geliyor?
tomacco

@Tomacco doğrulandı mı?
Fernando Reynoso

1
@FernandoReynoso Bir Geliştirici Geçiş Kiti aldım, (ARM MacMini) bugün daha sonra test edecek ve raporlayacak
tomacco

@tomacco test edebildiniz mi?
Houman

Birden fazla kapsül spesifikasyonu kullanılırsa user_target_xcconfigve değerler tam olarak eşleşmezse, CocoaPods bunun gibi uyarılar verir [!] Can't merge user_target_xcconfig for pod targets: [... list of pods ...]. Singular build setting EXCLUDED_ARCHS[sdk=<...>] has different values.. Podspec sözdizimi referansı, bu özniteliğin "önerilmez" olduğunu belirtir guides.cocoapods.org/syntax/podspec.html#user_target_xcconfig . Bu nedenle, lütfen user_target_xcconfigbirçok geliştiriciyi sorundan kurtarmak için bunun için kullanmayın .
leberwurstsaft

5

Xcode 12

Çıkarma VALID_ARCHgelen Yapı ayarlarında altında Kullanıcı Tanımlı benim için grup çalışması.

görüntü açıklamasını buraya girin


4

Benim için aşağıdaki ayar çalıştı:

Yapı Ayarları >> Hariç Tutulan Mimariler

"Any iOS Simulator SDK" seçeneği için hem Release hem de Debug moduna "arm64" eklendi.

görüntü açıklamasını buraya girin


3

Pod Geliştiricileri için Podspec'inizde şunu ekleyin:

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

Sonra örnek projenizde Örnek proje dosyaları ayarları

Bu projede çalışırken görün


Birden fazla kapsül spesifikasyonu kullanılırsa user_target_xcconfigve değerler tam olarak eşleşmezse, CocoaPods bunun gibi uyarılar verir [!] Can't merge user_target_xcconfig for pod targets: [... list of pods ...]. Singular build setting EXCLUDED_ARCHS[sdk=<...>] has different values.. Podspec sözdizimi referansı, bu özniteliğin "önerilmez" olduğunu belirtir guides.cocoapods.org/syntax/podspec.html#user_target_xcconfig . Bu nedenle, lütfen user_target_xcconfigbirçok geliştiriciyi sorundan kurtarmak için bunun için kullanmayın .
leberwurstsaft

3

Komut satırından çerçeve oluşturmada sorunlar yaşıyordum. Çerçevem, ARM tabanlı simülatörler için desteği eksik olan diğer çerçevelere bağlıdır. Bağımlılıklarımı yükseltene kadar ARM tabanlı simülatörler için desteği hariç tuttum.

EXCLUDED_ARCHS=arm64CLI'den simülatörler için çerçeve oluştururken bayrağa ihtiyacım vardı .

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
Burada aynı. Bu senaryodaki temel "sorun" aslında yoluyla genel bir hedef için inşa etmektir -destination "generic/platform=iOS Simulator". Bu, Xcode 12'den beri arm64'ü içeren mevcut tüm mimariler için yapı oluşturmaya götürür.
Sascha

3

Bu konudaki hemen hemen her gönderiyi denedikten ve apple geliştirici forumlarını okuduktan sonra, benim için çalışan yalnızca bir çözüm buldum.

Hızlı bir uygulamada kullanılan evrensel bir çerçeve oluşturuyorum. Simülatörde mimari hatalar olmadan geliştirme yapamadım.

Çerçeve projemde, sizin için durum buysa, derleme aşamalarımda bir Evrensel Çerçeve görevim var

  • Aşağıdakileri xcodebuild, oluşturma aşamasında görevinize ekleyin : EXCLUDED_ARCHS="arm64"

Ardından aşağıdaki projeyi değiştirmeniz gerekir Build Settings:

  • VALID_ARCHSKullanıcı tanımlı ayarı silin
  • Set ONLY_ACTIVE_ARCHiçin YES***

*** Bir çerçeve geliştiriyorsanız ve aynı zamanda bir demo uygulamanız varsa, bu ayarın her iki projede de açılması gerekir.


2

Güncellemeler: Ekim 2020

arm64Yalnızca Debug > Simulator - iOS 14.O SDKHariç Tutulan Mimari altında ayar yapabilirsiniz .

görüntü açıklamasını buraya girin


1

Buradaki sorun, Xcode 11'deki Geçerli mimariler, projeyi Xcode 11'de açın ve hem projeniz, hedefiniz hem de Kapsülleriniz için Geçerli mimariler değerini $ (ARCHS_STANDARD) olarak değiştirin, projeyi Xcode 12'de yeniden açın ve oluşturun


1

"Build Active Architecture Only"(ONLY_ACTIVE_ARCH)Yapı ayarını evet olarak ayarlayın, xcodearm64 olan Silikon MAC mimarisi nedeniyle arm64 istiyor.

arm64, Silikon MAC'i desteklemek için Xcode12'de simülatör arkı olarak eklenmiştir.

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


Silikon Mac'te çalışmıyorsa, kesinlikle arm64 kullanmadığını bilmeli?
Jonathan.

@Jonathan. Evet, böyle yapılmalıydı ama şu anda değil.
Aravind

1

Benim durumumda: Xcode 12

Boş değerler EXCLUDED_ARCHSayarladım ve ONLY_ACTIVE_ARCHDebug = YESRelease = Project's Build Setting'i ayarladımNO

ve bunu Pod dosyama ekledim:

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

Simulator iPhone 8 (iOS 12) ve iPhone 11 Pro Max (iOS 14) ve cihazım iPhone 7 Plus (iOS 13.4) üzerinde çalışıyor


1

Açık Build Settingsaramada VALID_ARCHbasının sonra delete. Bu benim için Xcode 12.0.1 ile çalışmalı

Derleme ayarlarında VALID_ARCH


1
Ben bulmuyorum VALID_ARCHbu nedir?
Houman

1

Sadece benim Any iOS Simulator SDK -> x86_64için Project's Build Settings -> VALID_ARCHSçalışmalara ekle .

Xcode sürümü: 12.1 (12A7403)

görüntü açıklamasını buraya girin

Projeniz x86_64'ü desteklemeyen bazı çerçeveler içeriyorsa.

  • Bu çerçeve adlarını ( xxx.framework) 'a ekleyebilirsiniz Target -> Build Settings -> Excluded Source File Names -> Debug -> Any iOS Simulator SDK.
  • Ve sonra Framework Search Pathsbu çerçevelerin yollarını silmek için değiştirin Debug -> Any iOS Simulator SDK.

Bu iki ayar, Xcode'un bu çerçeveleri simülatör modunda oluşturmasını ve bağlamasını önleyebilir.

görüntü açıklamasını buraya girin

görüntü açıklamasını buraya girin


1

Arm64 ve Xcode 12 ile ilgili sorunu anlıyorum ve iPhone Simulator için arm64 mimarisini hariç tutarak veya Release şeması için ONLY_ACTIVE_ARCH ayarlayarak derleme sorunlarını çözebildim. Ancak yine de pod repo push kullanarak çerçevemi zorlamakta sorunlar yaşıyorum.

Podspec'imde s.pod_target_xcconfig ayarının bu ayarı aynı podspec'te tanımlanan bağımlılıklara uygulamadığını öğrendim. Cocoapods'un doğrulama sırasında ürettiği sahte Uygulama projesinde bunu görebiliyorum. Cocoapods doğrulaması, simülatör için yayın şemasını çalıştırıyor ve bu, bir veya daha fazla bağımlılık arm64'ü hariç tutmadığında veya yalnızca etkin mimari oluşturmak için ayarlanmadığında başarısız oluyor.

Bir çözüm, Cocoapods'u projeyi doğrularken yükleme sonrası komut dosyası eklemeye zorlamak veya Hata Ayıklama şeması oluşturmasına izin vermek olabilir, çünkü Hata Ayıklama şeması yalnızca etkin mimari oluşturuyor.

Doğrulamayı geçmek için kapsülümü serbest bırakmak için Xcode 11'i kullandım. Xcode 11'i developer.apple.com adresinden indirebilir, Xcode11.app olarak Applications klasörüne kopyalayabilir ve ile geçiş yapabilirsiniz sudo xcode-select --switch /Applications/Xcode11.app/Contents/Developer. İşiniz bittiğinde geri dönmeyi unutmayın.


1

Kartaca aracılığıyla kurulan belirli bir kitaplıkla aynı sorunu yaşıyordum. Kartaca kullananlar için, Carthage kutudan Xcode 12 ile çalışmadığı için, bu belge çoğu durumda işe yarayan bir geçici çözümde yol gösterecektir. Kısaca, Carthage fat çerçeveler oluşturur, bu da çerçevenin desteklenen tüm mimariler için ikili dosyalar içerdiği anlamına gelir. Apple Sillicon piyasaya sürülene kadar her şey gayet iyi çalıştı, ancak şimdi yinelenen mimariler olduğu için bir çatışma var (aygıtlar için arm64 ve simülatör için arm64). Bu, Carthage'ın mimariye özgü çerçeveleri tek bir fat çerçeveye bağlayamayacağı anlamına gelir.

Talimatları buradan takip edebilirsiniz. Kartaca XCODE 12

Ardından Kartaca'yı yapılandırdıktan sonra. Arm64'ü derleme ayarlarında "Hariç Tutulan Mimariler" e koyun. görüntü açıklamasını buraya girin

Simülatör kullanarak projenizi çalıştırmayı deneyin. Simülatör hatasız çalışmalıdır.


0

Benim durumumda:

4 konfigürasyonum vardı (+ Hata ayıklama ve ReleaseENA) Cocoapods bağımlılık yöneticisi olarak kullanılıyor

Hata Ayıklama için, cihazda ve simülatörde ve sadece cihazda qa'da toplandım.

PodsProject'te BuildActiveArchitecture'ın evet olarak ayarlanmasına yardımcı oldu


0

Benim durumumda Relese modunda bir watchOS 7 simülatöründe çalıştırmaya çalışıyordum ancak iOS 14 simülatörü Hata Ayıklama modundaydı.

Bu yüzden her iki simülasyonu da Hata Ayıklama / Yayın moduna koymak benim için sorunu çözdü!


0

Yapılandırma Yapılandırmasını Hata Ayıklama moduna geri getirin veya Hem Hata Ayıklama hem de Yayın modu için Yalnızca Etkin Mimari Oluştur'u açın. Bunun nedeni, kitaplığınızın / çerçevenizin yeni Simülatör mimarisi ARM64'ü desteklememesidir (Apple Silicon işlemcili Mac'te çalışır)


0

"Arm64" satırını (tırnak işaretleri olmadan) yola ekleyin: Xcode -> Proje -> Oluşturma ayarları -> Mimariler -> Dışarıda bırakılan mimariler Ayrıca, Bölmeler için de aynısını yapın. Her iki durumda da hem hata ayıklama hem de sürüm alanları için.

veya detaylı olarak ...

Xcode 12 kullanarak simülatöre dağıtırken burada bahsedilen hatalar da beni etkileyen şeylerden biri. Projelerimin her birine sağ tıklayıp bulucuda göstererek, Atom’da .xcodeproj’u açtıktan sonra .pbxproj’dan geçip tüm VALIDARCHS ayarlarını kaldırmanız yeterli. Benim için çalışmasını sağlayan şey buydu. Yapımı daha da ileri götüren ancak sonuçta beni başka bir hatada bırakan diğer önerilerden birkaçını denedim (arm64, Yalnızca Aktif Mimari Oluşturma hariç). VALIDARCH ayarlarının ortalıkta olması muhtemelen ilk kontrol edilmesi gereken en iyi şeydir.


0

Benim için çalışan, birine yardımcı olabilecek çözümü paylaşmak

Simülatör için derlerken sorun:

iOS Simulator için derleme, ancak mimari arm64 için iOS için oluşturulmuş nesne dosyasında bağlantı oluşturma

XCODE 12.1, POD 1.9.1

Proje yapım

  • Ana Hedef
  • Uzantıyı Paylaş
  • Bildirim hizmeti uzantısı
  • Alt modül, Özel Çerçeve
  • Pod dosyası
  1. Tüm hedeflerde arm64Yapı ayarlarına -> ekleyin Exclude Architecture.

görüntü açıklamasını buraya girin

  1. Kaldırılan arm64gelen VALID_ARCHSve katma x86_64tüm hedeflerde.

görüntü açıklamasını buraya girin

  1. Aşağıdaki kodu ekleyin podfile

    post_install do |installer|
        installer.pods_project.build_configurations.each do |config|
        config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64"
     end
    end
    
  2. Yaptı pod update, sildi podfile.lockve yaptıpod install

  3. Temiz yap.


0

İnternette çok fazla gereksiz cevap denedikten sonra. Bu benim için çalışıyor.

İlk olarak, Kapsül projeleri için x86_64 üretir !!!!

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

İkinci olarak, VALID_ARCHS için "x86_64" ekleyin

görüntü açıklamasını buraya girin


0

Belirlediğim zaman benim için çalıştı $(ARCHS_STANDARD)için VALID_ARCHSherhangi iOS Simülatörü SDK için Debug için. Ayrıca ben belirledik YESiçin ONLY_ACTIVE_ARCHDebug için.

görüntü açıklamasını buraya girin


-2

Bunu Calabash otomatik testlerinde çalıştırmak için

Su kabağı ile çalışmayan xcode 12 sorununu gidermek için bir çekme isteği var https://github.com/calabash/run_loop/pull/757

Geçici bir çözüm, bu Devam Eden Çalışma şubesini kullanmaktır, ancak taslak bir PR olduğu için bunu kullanmak zorunda olmak harika değildir. Calabash için Xcode 12 desteği umarız gelecekte gelir.

Gemfile'nizde değişiklik

gem "run_loop"

-e

gem 'run_loop', git: 'https://github.com/calabash/run_loop.git', branch: 'xcode_14_support'
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.