Як будувати архітектури armv6 та armv7 з iOS 5


96

У iOS5 Apple скидає архітектуру armv6 з ARCHS_STANDARD_32_BIT .

Для того, щоб зберегти підтримку iPhone3G, я все ще хочу компілювати в armv6 навіть в iOS5.

Хтось знайшов рішення для цього?

Відповіді:


96

Сьогодні я щойно створив щось із зазначенням цілі розгортання iOS 4.0. Оскільки в архітектурі вказано лише armv7, Xcode попередив мене, що для підтримки будь-чого нижче iOS4.2 я повинен включити armv6 до архітектур. Просто відредагуйте це поле, натисніть кнопку "+", коли з'явиться діалогове вікно, і введіть буквал "armv6".

У моєму випадку ми хочемо, щоб наш додаток працював під iOS4 та iOS5. Нам довелося внести деякі зміни, щоб він працював коректно під iOS5, але всі ці зміни були зроблені із змінами коду, зручними для iOS4.

Ми також додали деякі особливості для iOS5 таким чином, щоб програма могла працювати без збоїв під iOS4. Зокрема, ми перевірили можливості iOS5, перш ніж намагатись їх використовувати, і пов’язали бібліотеки лише для iOS5 як необов’язкові.

Отже, підтримка iPhone3G у світі iOS5 може так само легко означати "ми хочемо, щоб наш додаток працював на iOS4 і новіших версіях (незалежно від використання будь-яких функцій iOS5)", а не "ми хочемо переконатися, що наш додаток працює на старішому пристрої під управлінням iOS5 ". Тут є різниця; подумай над цим. :-)

У будь-якому разі додати підтримку armv6 дуже просто. І я думаю, справа в наступному: У якийсь момент, коли більше немає пристроїв armv6, про які можна турбуватися (з якоїсь причини), вам не доведеться будувати для нього. Apple вважає, що кожен повинен якомога швидше перейти на найновіше обладнання. Отже, у цьому світі немає необхідності в інструментах, які б за замовчуванням нічого не використовували, крім найновіших та найвищих. :-) На щастя (чи ні), ми, розробники, живемо в реальному світі і усвідомлюємо, що вам доведеться деякий час підтримувати старі речі. І я думаю, команда розробників Xcode це теж знає, саме тому ви можете додати підтримку armv6 назад досить просто.


3
Дякуємо за точну відповідь :-) Справді, я хочу мати можливість запускати свій додаток на iPhone 3G з iOS 4.2.1 або старішою версією (обмеження до 4.0) і мати деякі особливості iOS 5 для поточних пристроїв. Я не намагався просто додати "armv6" в архітектурі, я шукав змінну середовища, наприклад ARCHS_STANDARD_32_BIT, і я щойно знайшов ARCHS_UNIVERSAL_IPHONE_OS, але, здається, це не працює.
iGranDav

3
Хотілося додати, що багато рішень там пропонують сказати "armv6 armv7" - для мене це не спрацювало. Наразі для мене працює лише "armv6 $ (ARCHS_STANDARD_32_BIT)", тобто не звільняйся від того, що там, просто додай "armv6" до налаштування "Архітектури"
відміни

1
Я все це робив, і моє збірне все ще не вдавалося - причина полягала в тому, що у мене (невикористану) збірку випуску встановлено на ціль розгортання iOS 5.0, тоді як налагодження та розповсюдження встановлено на 3,0, і це, здається, зупиняє створення коду для armv6. Встановлення цілі розгортання до 3.0 для всіх збірок вирішило проблему.
Саймон Іст

6
Це не спрацювало для мене (навіть після додавання 'armv6'). Додаток навіть не з’явився на моєму iPod touch. Але потім я виявив, що у "Необхідних можливостях пристрою" (на вкладці інформація) є armv7. Я просто видалив його, і він почав працювати ідеально
Ерфей

1
Зазвичай я використовую $ (VALID_ARCHS), який працює для мене. Я щойно виявив, що нові проекти також додають вимогу до можливостей "arm7". Я просто видалив це, і все працює нормально.
Gordon Dove

51

Проста відповідь полягає в тому, що ви повинні змінити поточні налаштування з "Стандартний (armv7) - $ (ARCHS_STANDARD_32_BIT)" на "armv6" і "armv7". Дивіться зображення нижче. Щоб вона працювала, потрібно видалити рядок із попередніми налаштуваннями.

Правильні налаштування для armv6 та armv7


3
Дякуємо, що пояснили це зображенням - воно справді дало зрозуміти.
radven

11

також переконайтеся, що ви встановили це в Project AND Targets ... коштуйте мені години, щоб це зрозуміти. встановив його для одного, але не для іншого. сподіваюся, це допоможе. GLTA


Крім того, якщо у вас є бібліотеки, ви повинні встановити це в проекті та цілях там.
Вільям Джокуш,

9

Я думаю, що є причина, чому Apple випустила armv6 зі стандартних налаштувань.

Я скомпілював armv7 / armv6 з iOS5 SDK, проте компілятор armv6 видав неправильний код у режимі випуску. Після декількох годин пошуку обхідного шляху (випробування llvm або gcc з різними рівнями оптимізації) я відмовляюся.

Отже, я повертаюся до iOS SDK 4.x, доки підтримую старі пристрої armv6.

Приклад коду:

// 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?)

Можливо, у мене є пошкодження пам'яті, однак, на компіляторі armv7 та iOSSDK <5.0 він поводиться належним чином.

З найкращими побажаннями


Я також бачу дивні помилки у збірках armv6 на старих пристроях. Ви це зрозуміли чи справді повернулися до більш раннього XCode? Також зауважу, що вони більше не дозволяють завантажувати старіші SDK!
Крейг Макмехон,

19
Це відома проблема з компілятором LLVM 3.0 у структурах Xcode 4.2 та CGPoint / CGSize: devforums.apple.com/thread/122059?tstart=15 . Вимкнення побудови для Thumb on armv6 запобігає подібним помилкам.
Бред Ларсон

Оце Так! Я дуже рада вашій відповіді, це трапляється і зі мною.
Клафу

7

Не впевнений, що це насправді рішення, але я виявив, що заміна визначеного рядка в "архітектурах", який становив $ (ARCHS_STANDARD_32_BIT), на "armv6 armv7" дозволила мені скомпілювати з iOS5 як базову та iOS4 як розгортання ціль і пройти перевірку.

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


1

Мені не потрібно було замінювати $ (ARCHS_STANDARD_32_BIT) на просто armv7, щоб програма могла скомпілюватись і бути завантаженою в App Store.

Як запропонував MarkGranoff, я просто додав armv6 як звичайний текст, натиснувши плюс і просто набравши його в другому рядку.

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