gcc-4.2はまだarmv6をサポートしているため、別の方法があります。Xcode4.5を閉じて、以前のバージョンを開く必要はありません(コンパイル用ですが、4.2デバイスでアプリを実行する場合は必要ありません)。
- 有効なアーチとアーチの両方にarmv6を追加します。
アーチ:$(ARCHS_STANDARD_32_BIT)armv6
有効なアーキテクチャ:armv6 armv7 armv7s
- 必要に応じて、project.pbxprojファイルをVim(またはTextEdit)して、IPHONEOS_DEPLOYMENT_TARGETを4.0-4.1-4.2に置き換えます。Xcode4.5では、4.3を下回ることはできません。
次に、プロジェクトをビルドすると、警告が表示されます。
警告:アーキテクチャarmv6のタイプsourcecode.c.objcのファイル'$(PROJECT_DIR)/App/AppDelegate.m'を処理するルールがありません
警告:アーキテクチャarmv6のタイプsourcecode.ccのファイル'$(PROJECT_DIR)/App/SomeFile.c'を処理するルールがありません
Build Rule
に一致する名前のソースファイルのforを追加し*.[mc]
ます。LLVM GCC 4.2
静的ライブラリでは機能しますが、アプリでは機能しません:
ld:ファイルはユニバーサル(4スライス)ですが、(n)armv6スライスは含まれていません:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk/usr/libアーキテクチャarmv6の場合は/crt1.3.1.o
- アプリで機能させるには、このオブジェクトファイル(5.1 SDKに付属)にarmv6スライスを追加する必要があります。
リポ/path/to-4.4/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.1.sdk/usr/lib/crt1.3.1.o-extractarmv6 -output / tmp / crt1 .3.1-armv6.o
リポ/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-create -出力/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/プラットフォーム/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
プロジェクトをコンパイルし、アプリにすべてのアーチが含まれていることを確認します。
$ファイルDerivedData/TestApp / Build / Products / Debug-iphoneos / TestApp.app / TestApp
DerivedData / TestApp / Build / Products / Debug-iphoneos / TestApp.app / TestApp:3つのアーキテクチャを備えたMach-Oユニバーサルバイナリ
DerivedData / TestApp / Build / Products / Debug-iphoneos / TestApp.app / TestApp(アーキテクチャarmv6の場合):Mach-O実行可能アーム
DerivedData / TestApp / Build / Products / Debug-iphoneos / TestApp.app / TestApp(アーキテクチャarmv7の場合):Mach-O実行可能アーム
DerivedData / TestApp / Build / Products / Debug-iphoneos / TestApp.app / TestApp(アーキテクチャcputype(12)cpusubtype(11)の場合):Mach-O実行可能アーム
dSYMファイルにはすべてのアーチも含まれていることに注意してください(クラッシュレポートのシンボル化に役立ちます):
$ファイルDerivedData/TestApp / Build / Products / Debug-iphoneos / TestApp.app.dSYM / Contents / Resources / DWARF / TestApp
DerivedData / TestApp / Build / Products / Debug-iphoneos / TestApp.app.dSYM / Contents / Resources / DWARF / TestApp:3つのアーキテクチャを備えたMach-Oユニバーサルバイナリ
DerivedData / TestApp / Build / Products / Debug-iphoneos / TestApp.app.dSYM / Contents / Resources / DWARF / TestApp(アーキテクチャarmv6用):Mach-OdSYMコンパニオンファイルアーム
DerivedData / TestApp / Build / Products / Debug-iphoneos / TestApp.app.dSYM / Contents / Resources / DWARF / TestApp(アーキテクチャarmv7用):Mach-OdSYMコンパニオンファイルアーム
DerivedData / TestApp / Build / Products / Debug-iphoneos / TestApp.app.dSYM / Contents / Resources / DWARF / TestApp(アーキテクチャcputype(12)cpusubtype(11)の場合):Mach-OdSYMコンパニオンファイルアーム
xcode 4.4.1を開き、次にProduct
->を開いて、iOS 4.2 2geniPodtouchにアプリを正常にインストールして起動しましたRun without building
。
- 製品をアーカイブすると、Apple Mach-O Linkerエラーが再度発生する場合があります。今回は、
libarclite_iphoneos.a
またはなどの他のファイルが関係していlibclang_rt.ios.a
ます。
ld:ファイルはユニバーサル(2スライス)ですが、(n)armv6スライスは含まれていません:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/arc/libarclite_iphoneos.a for Architecture armv6
ld:ファイルはユニバーサル(2スライス)ですが、(n)armv6スライスは含まれていません:/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/clang/4.1/libclang_rt.ios.aアーキテクチャarmv6用
crt1.3.1.oに使用される手順はこれらのファイルにも適用され、Xcodeがプロジェクトを正常にアーカイブできるようにするエラーを修正します。ldによって出力されたパスを使用してファイルを検索し、armv6スライスをlipoと結合できます。以前のバージョンのXcodeのlibclang_rt.ios.aは、にあるのではなく、にあることに注意してXcode.app/[...]/usr/lib/clang/4.1
くださいXcode.app/[...]/usr/lib/clang/4.0
。
ファイルを正常にアーカイブし、アドホック配布プロファイルを使用して展開し、iPhone 3G(4.2.1)およびiPhone 3GS(6.0)でテストしました。
- 前号:アプリを起動できません。に
Organizer
は、次のメッセージがあります。「iPhone3G」タイプのデバイスは、このバージョンのXcodeではサポートされていません。
しかし、ls
ショーでDeviceSupport
は:
ls /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/
4.2 4.3 5.0 5.1 6.0(10A403)
Xcode4.4.1の4.2ディレクトリに差分はありません。
問題は、Xcodeがデバイスをどのように検出するかがサポートされているかどうかです。
(または別の16進エディター)で開き/Applications/Xcode.app/Contents/Developer//Platforms/iPhoneOS.platform/Developer//Library/PrivateFrameworks/DTDeviceKitBase.framework/DTDeviceKitBase
、 ASCIIをに置き換えると、エラーメッセージが消え、デバイスにインストールされているアプリが一覧表示されます(ただし、デバイスリストのデバイスの箇条書きはまだ赤です)。Hex Fiend
4.3
4.2
次に、編集/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/PrivateFrameworks//DTDeviceKit.framework/Versions/Current/DTDeviceKit
して置き換える必要があります:
Expired.deviceArchitecture.iPhone1,1.iPhone1,2.iPod1,1.iPod2,1.iPod2,2.armv6
に :
Expired.deviceArchitecture.iPhone0,1.iPhone0,2.iPod0,1.iPod0,1.iPod0,2.armv5
次に、オーガナイザー(Xcode 4.5.1)にオレンジ色の箇条書きがあります。
「iPhone」上のiOSのバージョンは、このバージョンのiOSSDKで使用するには古すぎます。デバイスを以下にリストされているOSのバージョンに復元してください。
iPhoneにインストールされているOS
4.2.1(8C148)
XcodeがサポートするiOSバージョン
6.0(10A403)
5.1
5.0
4.3
問題は今です:XcodeがサポートするiOSバージョンはどこで定義されていますか?
に4.2
ディレクトリが/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/
あるので、すでにサポートされているはずです...
iPhoneOS4.2.sdk
Xcode 4.4.1からにコピーしようとしまし/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/
たが、デバイスがサポートされていません。
そのため、Xcode4.5で4.2デバイスのサポートを追加する方法が見つかりませんでした。何か案は ?
結論:Xcode4.5内でarmv6/7/7s用にコンパイルすることが可能です。ただし、Xcode 4.4を起動せずに、4.2armv6デバイスでアプリを起動することはできません。
大きなアップデート:Xcode 4.5.2で動作します!
Xcode 4.5.2では、箇条書きが緑色になりました:-)デバイスが[実行]ボタンの近くのドロップダウンリストに表示されます。しかし、アプリを実行しようとすると、次のメッセージが表示されます。
選択したデバイスを使用してXcodeを実行することはできません。
このデバイスで実行するには、サポートされているアーキテクチャの宛先を選択してください。
有効なアーキテクチャにarmv6を追加するだけです:-)
その他の注意:Build Rule
名前が一致するソースファイルの場合:または、、または*.[mc]
を使用できますLLVM GCC 4.2
Apple LLVM compiler 4.1
Default compiler