İOS 5 ile armv6 ve armv7 mimarileri için geliştirme


96

In iOS5 Elma damla ARMv6 gelen mimari ARCHS_STANDARD_32_BIT .

Destek tutmak için iPhone3G I hala derlemek isteyen ARMv6 bile iOS5 de.

Bunun için bir çözüm bulan oldu mu?

Yanıtlar:


96

Bugün iOS 4.0'ın dağıtım hedefini belirleyen bir şey oluşturdum. Mimarilerde yalnızca armv7 belirtildiğinde, Xcode, iOS4.2'nin altındaki her şeyi desteklemek için mimarilere armv6'yı dahil etmem gerektiği konusunda beni uyardı. Sadece bu alanı düzenleyin, iletişim kutusu açıldığında "+" düğmesini tıklayın ve "armv6" kelimesini girin.

Benim durumumda, uygulamamızın iOS4 ve iOS5 altında çalışmasını istiyoruz. İOS5 altında düzgün çalışması için bazı değişiklikler yapmak zorunda kaldık, ancak tüm bu değişiklikler iOS4 uyumlu kod değişiklikleriyle yapıldı.

Ayrıca, uygulamanın iOS4 altında çökmeden çalışmasına izin verecek şekilde bazı iOS5'e özgü yetenekler ekledik. Özellikle, iOS5 özelliklerini kullanmaya çalışmadan önce test ettik ve yalnızca iOS5 kitaplıklarını İsteğe Bağlı olarak bağladık.

Dolayısıyla, bir iOS5 dünyasında iPhone3G'yi desteklemek, "uygulamamızın iOS5 çalıştıran daha eski bir cihazda çalışmasını sağlamak istiyoruz" yerine "uygulamamızın iOS4 ve üzeri sürümlerde çalışmasını istiyoruz (iOS5 özelliklerinden bağımsız olarak)" anlamına gelebilir ". Burada bir fark var; bunu düşün. :-)

Her neyse, armv6 desteğini tekrar eklemek çok kolaydır. Ve sanırım mesele şudur: Bir noktada, endişelenecek başka armv6 cihazı olmadığında (her ne sebeple olursa olsun) onun için inşa etmek zorunda kalmayacaksınız. Apple'ın görüşü, herkesin mümkün olan en kısa sürede en son donanıma yükseltmesi gerektiği yönünde. Yani bu dünyada, araçların en son ve en iyisi dışında herhangi bir şeye varsayılan olarak ayarlanması gerekmiyor. :-) Neyse ki (ya da değil), biz geliştiriciler gerçek dünyada yaşıyoruz ve eski şeyleri bir süreliğine desteklemeniz gerektiğini biliyoruz. Ve sanırım Xcode geliştirme ekibi de bunu biliyor, bu yüzden armv6 desteğini oldukça basit bir şekilde geri ekleyebilirsiniz.


3
Kesin cevabınız için teşekkür ederiz :-) Gerçekten de uygulamamı bir iPhone 3G'de iOS 4.2.1 veya daha düşük (4.0 ile sınırlıdır) çalıştırabilmek ve mevcut cihazlar için bazı iOS 5'e özgü özelliklere sahip olmak istiyorum. Mimarilere sadece "armv6" eklemeyi denemedim, ARCHS_STANDARD_32_BIT gibi bir ortam değişkeni arıyordum ve ARCHS_UNIVERSAL_IPHONE_OS buldum ama işe yaramadı.
iGranDav

3
Orada bir çok çözümün "armv6 armv7" demesi gerektiğini önerdiğini eklemek istedim - bu benim için işe yaramadı. Şu anda sadece "$ (ARCHS_STANDARD_32_BIT) ARMv6" anlamına benim için eserler sadece Mimarileri ayarını "ARMv6" ekleyin orada ne kurtulmak yok
Brack

1
Tüm bunları yaptım ve yapım hala başarısız oluyordu - çünkü Hata Ayıklama ve Dağıtım 3.0 olarak ayarlanmışken (kullanılmamış) bir Sürüm derlemesinin iOS 5.0 Dağıtım Hedefine ayarlanmasıydı ve bu, armv6 için xcode oluşturmayı durduruyor gibi görünüyor. Tüm derlemeler için Dağıtım hedefini 3.0 olarak ayarlamak sorunu çözdü.
Simon East

6
Benim için işe yaramadı ('armv6' ekledikten sonra bile). Uygulama iPod touch'ımda bile görünmedi. Ama sonra 'Gerekli Cihaz Yetenekleri'nin (bilgi sekmesinin altında) içinde armv7 olduğunu keşfettim. Onu yeni sildim ve mükemmel çalışmaya başladı
Erpheus

1
Genellikle benim için çalışan $ (VALID_ARCHS) kullanırım. Yeni projelerin ayrıca bir yetenek gereksinimi 'arm7' eklediğini buldum. Bunu yeni sildim ve her şey yolunda gidiyor.
Gordon Dove

51

Basit cevap, mevcut ayarları "Standart (armv7) - $ (ARCHS_STANDARD_32_BIT)" den sadece "armv6" ve "armv7" olarak değiştirmeniz gerektiğidir. Aşağıdaki resme bakın. Çalışması için önceki ayarların bulunduğu satırı silmeniz gerekir.

Armv6 ve armv7 için doğru ayarlar


3
Bunu bir resimle açıkladığınız için teşekkürler - gerçekten anlaşıldı.
radven

11

Ayrıca bunu Proje VE Hedefler'de ayarladığınızdan emin olun ... bunu anlamam bir saate mal oldu. biri için ayarlamıştı ama diğeri için değil. Bu yardımcı olur umarım. GLTA


Ayrıca, herhangi bir kütüphaneniz varsa, onu projede ve oradaki hedeflerde ayarlamanız gerekir.
William Jockusch

9

Sanırım Apple'ın armv6'yı standart ayardan çıkarmasının bir nedeni var.

Armv7 / armv6'yı iOS5 SDK ile derledim, ancak armv6 derleyicisi yayın modunda yanlış kod üretti. Saatlerce bir geçici çözüm bulduktan sonra (llvm veya gcc'yi farklı optimizasyon seviyelerinde denemek) pes ediyorum.

Bu yüzden, eski armv6 cihazlarını desteklediğim sürece iOS SDK 4.x'e geri dönüyorum.

Kod örneği:

// myView center=(160, 100)
CGPoint p=myView.center;  
// now p=(100,100) (what the heck?)
p.x=myView.center.x;
p.y=myView.center.y;
// now p=(160,100) 
p.y+=100;
// now p =(200,200) (what the heck?)

Belki de biraz bellek bozulması yaşıyorum, ancak, armv7 derleyicisinde ve iOSSDK <5.0'da beklendiği gibi davranıyor.

Saygılarımla


Ayrıca armv6'da eski cihazlarda yapılan garip hatalar görüyorum. Bunu anladınız mı yoksa gerçekten önceki bir XCode'a mı döndünüz? Ayrıca eski SDK'ları indirmenize artık izin vermediklerini de not ediyorum!
Craig McMahon

19
Bu, Xcode 4.2 ve CGPoint / CGSize yapılarındaki LLVM Derleyici 3.0 ile ilgili bilinen bir sorundur: devforums.apple.com/thread/122059?tstart=15 . Armv6'da Thumb için oluşturmayı devre dışı bırakmak bu tür hataları önler.
Brad Larson

Vaov! Cevabına çok sevindim, bu bana da oluyor.
Clafou

7

Bunun gerçekten bir çözüm olup olmadığından emin değilim, ancak $ (ARCHS_STANDARD_32_BIT) olan "mimarilerdeki" tanımlı dizeyi "armv6 armv7" ile değiştirmenin temel olarak iOS5 ve dağıtım olarak iOS4 ile derlememe izin verdiğini keşfettim. hedefleyin ve doğrulamayı geçin.

IOS5'e özel herhangi bir kitaplık veya çağrı kullanmıyorum, ancak bir sonraki sürümümde kullanmayı düşünüyorum.


1

Uygulamanın derlenmesi ve App Store'a yüklenmesi için $ (ARCHS_STANDARD_32_BIT) 'i sadece armv7 ile değiştirmeme gerek yoktu.

MarkGranoff'un önerdiği gibi, artıya basarak ve ikinci satıra yazarak armv6'yı düz metin olarak ekledim.

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.