Il y a une autre façon de gcc-4.2 prend toujours en charge de armv6, qui ne vous demandera pas de fermer Xcode 4.5 ouvert une version précédente (pour la compilation, mais pas pour l'application en cours d'exécution sur un 4.2 appareil) :
- Ajouter armv6 à la validité des ponts et des ponts :
Architectures : $(ARCHS_STANDARD_32_BIT) armv6
Valide Architectures : armv6 armv7 armv7s
- Vim (ou TextEdit) de votre projet.pbxproj fichier pour remplacer IPHONEOS_DEPLOYMENT_TARGET à 4.0 - 4.1 - 4.2 comme vous avez besoin, Xcode 4.5 ne vous laissera pas vous ci-dessous 4.3.
Alors, si vous construisez votre projet, vous allez voir mises en garde :
avertissement: pas de règle pour traiter le fichier '$(PROJECT_DIR)/App/AppDelegate.m' de type de code source.c.objc pour l'architecture armv6
avertissement: pas de règle pour traiter le fichier '$(PROJECT_DIR)/App/SomeFile.c " du type de code source.c.c pour l'architecture armv6
- Ajouter un
Build Rule
pour source les fichiers avec les noms correspondants : *.[mc]
qui utilisera LLVM GCC 4.2
Il fonctionne pour les bibliothèques statiques, mais pas pour les applications :
ld: le fichier est universel (4 tranches), mais ne contient pas de(n) armv6 tranche: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/crt1.3.1.o pour l'architecture armv6
- Pour faire cela fonctionne pour les applications, nous devons ajouter la armv6 tranche de ce fichier de l'objet (qui est livré avec le SDK 5.1) :
lipo /path/to-4.4/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/usr/lib/crt1.3.1.o -extrait armv6 -sortie /tmp/crt1.3.1-armv6.o
lipo /Applications/Xcode.app/Contents//Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/crt1.3.1.o /tmp/crt1.3.1-armv6.o -créer -sortie /tmp/crt1.3.1-armv677s.o
mv /Applications/Xcode.app/Contents//Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/crt1.3.1.o /Applications/Xcode.app/Contents//Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/crt1.3.1.o.bkp
mv /tmp/crt1.3.1-armv677s.o /Applications/Xcode.app/Contents//Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/lib/crt1.3.1.o
Compilez votre projet et vérifier que votre application contient toutes les architectures :
$ fichier DerivedData/TestApp/Construction/Produits/Debug-iphoneos/TestApp.app/TestApp
DerivedData/TestApp/Construction/Produits/Debug-iphoneos/TestApp.app/TestApp: Mach-O binaire universel avec 3 architectures
DerivedData/TestApp/Construction/Produits/Debug-iphoneos/TestApp.app/TestApp (pour l'architecture armv6): Mach-O executable bras
DerivedData/TestApp/Construction/Produits/Debug-iphoneos/TestApp.app/TestApp (pour l'architecture armv7): Mach-O executable bras
DerivedData/TestApp/Construction/Produits/Debug-iphoneos/TestApp.app/TestApp (pour l'architecture cputype (12) cpusubtype (11)): Mach-O executable bras
Notez que le dSYM fichier contient également toutes les architectures (utile pour le rapport de crash symbolification) :
$ fichier DerivedData/TestApp/Construction/Produits/Debug-iphoneos/TestApp.app.dSYM/Contents/Resources/NAIN/TestApp
DerivedData/TestApp/Construction/Produits/Debug-iphoneos/TestApp.app.dSYM/Contents/Resources/NAIN/TestApp: Mach-O binaire universel avec 3 architectures
DerivedData/TestApp/Construction/Produits/Debug-iphoneos/TestApp.app.dSYM/Contents/Resources/NAIN/TestApp (pour l'architecture armv6): Mach-O dSYM fichier compagnon bras
DerivedData/TestApp/Construction/Produits/Debug-iphoneos/TestApp.app.dSYM/Contents/Resources/NAIN/TestApp (pour l'architecture armv7): Mach-O dSYM fichier compagnon bras
DerivedData/TestApp/Construction/Produits/Debug-iphoneos/TestApp.app.dSYM/Contents/Resources/NAIN/TestApp (pour l'architecture cputype (12) cpusubtype (11)): Mach-O dSYM fichier compagnon bras
J'ai installé avec succès et a lancé l'application sur iOS 4.2 2gen iPod touch par l'ouverture de xcode 4.4.1, alors Product
-> Run without building
.
- Lorsque vous Archive de votre produit, vous pouvez rencontrer de nouveau la Pomme de Mach-O de l'éditeur de liens d'erreur, cette fois avec d'autres fichiers, tels que
libarclite_iphoneos.a
ou libclang_rt.ios.a
:
ld: le fichier est universel (2 tranches), mais ne contient pas de(n) armv6 tranche: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.un pour l'architecture armv6
ld: le fichier est universel (2 tranches), mais ne contient pas de(n) armv6 tranche: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/4.1/libclang_rt.ios.un pour l'architecture armv6
La procédure utilisée pour l'crt1.3.1.o s'applique à ces fichiers trop, et va corriger l'erreur permettant Xcode pour réussir l'archive de votre projet: vous pouvez utiliser le chemin d'accès imprimé par ld pour trouver le fichier et rejoindre la armv6 tranche avec lipo; il suffit de garder à l'esprit que libclang_rt.ios.un dans les précédentes versions de Xcode n'est pas situé dans Xcode.app/[...]/usr/lib/clang/4.1
mais Xcode.app/[...]/usr/lib/clang/4.0
.
J'ai été archivé le fichier, déployé avec une ad-hoc profil de distribution, et testé sur iPhone 3G (4.2.1) et iPhone 3GS (6.0).
- Dernière question : on ne peut pas lancer l'application. Dans l'
Organizer
, il y a le message : les Appareils de type "iPhone 3G" ne sont pas pris en charge par cette version de Xcode.
Mais un ls
dans la DeviceSupport
montre :
ls /Applications/Xcode.app/Contents/Développeur/plates-formes/iPhoneOS.de plate-forme/DeviceSupport/
4.2 4.3 5.0 5.1 6.0 (10A403)
Avec pas de différences dans l'4.2 répertoire à partir de Xcode 4.4.1.
La question est maintenant : comment Xcode détection de périphérique est pris en charge ou pas ?
L'ouverture d' /Applications/Xcode.app/Contents/Developer//Platforms/iPhoneOS.platform/Developer//Library/PrivateFrameworks/DTDeviceKitBase.framework/DTDeviceKitBase
avec Hex Fiend
(ou un autre éditeur hexadécimal), et le remplacement de l'ascii 4.3
avec 4.2
rendre le message d'erreur disparaît, et l'application installée sur l'appareil sont répertoriés (mais le dispositif balle dans la liste des périphériques est encore rouge).
Ensuite, nous devons éditer /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks//DTDeviceKit.framework/Versions/Current/DTDeviceKit
et remplacer :
Expired.deviceArchitecture.iPhone1,1.iPhone1,2.iPod1,1.iPod2,1.iPod2,2.armv6
pour :
Expired.deviceArchitecture.iPhone0,1.iPhone0,2.iPod0,1.iPod0,1.iPod0,2.armv5
Puis nous avons une orange balle dans l'Organisateur (Xcode 4.5.1) :
La version de l'iOS sur "iPhone" est trop vieux pour une utilisation avec cette version du SDK iOS. S'il vous plaît restaurer l'appareil à une version de l'OS énumérés ci-dessous.
Système d'exploitation Installé sur l'iPhone
4.2.1 (8C148)
Xcode pris en charge les Versions d'iOS
6.0 (10A403)
5.1
5.0
4.3
La question est maintenant : où Xcode pris en charge les Versions d'iOS sont-ils définis ?
Comme il y a un 4.2
- répertoire dans le répertoire /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/
, il devrait déjà être pris en charge...
Essayé de copier iPhoneOS4.2.sdk
de Xcode 4.4.1 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/
, mais ce n'est pas de périphérique pris en charge.
Donc n'ai pas trouvé comment ajouter 4.2 prise en charge de périphériques dans Xcode 4.5. Des idées ?
Conclusion : la compilation pour armv6/7/7 dans Xcode 4.5 est possible. Mais il n'est pas possible de lancer une application sur un 4.2 armv6 appareil sans lancer Xcode 4.4.
Grosse mise à jour : il fonctionne avec Xcode 4.5.2 !
Maintenant la balle est vert dans Xcode 4.5.2 :-)
L'appareil apparaît dans la liste déroulante près sur le bouton Exécuter.
Mais lorsque j'essaie d'exécuter l'application, a compris le message :
Xcode ne peut pas s'exécuter à l'aide de l'appareil sélectionné.
Choisissez une destination avec une prise en charge de l'architecture afin de fonctionner sur cet appareil.
Ajoutez simplement armv6, à la validité des architectures :-)
Autre remarque : l' Build Rule
pour source les fichiers avec les noms correspondants : *.[mc]
pouvez utiliser LLVM GCC 4.2
ou Apple LLVM compiler 4.1
ou Default compiler