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:
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.
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.
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
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
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.