Ray Wenderlichチュートリアル によると、私は次のことを行いました:
ステップ1-ダウンロードしましたCorePlot_1.4.Zip公式ウェブサイトに
ステップ2-プロジェクトにCorePlotHeadersフォルダーと静的ライブラリlibCorePlot-CocoaTouchを追加しました。 a(チェック「コピー先グループのフォルダにアイテムをコピー(必要な場合)」)
ステップ3-Other Linker Flags field以下に追加しました:-ObjC
手順4-Link Binary with Libraries if libCorePlot-CocoaTouch.aおよびQuartzCoreフレームワークはここにありました
結果:プロジェクトをコンパイルすると、Iphone Retina(4-Inch)を使用しているときに問題なく動作します。しかし、Iphone Retina(4-Inch 64-bit)を使用している場合、ビルドして実行しようとすると、次のメッセージが表示されます。
ld: warning: ignoring file /blah/blah/libCorePlot-CocoaTouch.a, missing required architecture x86_64 in file /blah/blah/libCorePlot-CocoaTouch.a (3 slices)
ここに完全なメッセージ:
ld: warning: ignoring file /Users/me/Desktop/project/libCorePlot-CocoaTouch.a, missing required architecture x86_64 in file /Users/me/Desktop/project/libCorePlot-CocoaTouch.a (3 slices)
Undefined symbols for architecture x86_64:
"_CPTDecimalFromCGFloat", referenced from:
-[PatientConstanteVisualiser configurePlots] in PatientConstanteVisualiser.o
-[PatientConstanteVisualiser configureAxes] in PatientConstanteVisualiser.o
"_CPTDecimalFromInteger", referenced from:
-[PatientConstanteVisualiser configureAxes] in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTAxisLabel", referenced from:
objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTColor", referenced from:
objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTFill", referenced from:
objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTMutableLineStyle", referenced from:
objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTMutableTextStyle", referenced from:
objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTPlotSymbol", referenced from:
objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTScatterPlot", referenced from:
objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTTheme", referenced from:
objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTXYGraph", referenced from:
objc-class-ref in PatientConstanteVisualiser.o
"_kCPTStocksTheme", referenced from:
-[PatientConstanteVisualiser configureGraph] in PatientConstanteVisualiser.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
私はこの問題に数時間費やしました...助けてください...
Core Plotの64ビットバージョンが必要な場合は、静的ライブラリの新しいバージョンをビルドする必要があります。 Arm64ビルドにはiOS 7が必要ですが、Core Plotは以前のバージョンもサポートしているため、ビルド済みライブラリは32ビットのみです。
開いた CorePlot-CocoaTouch.xcodeproj
およびアーキテクチャ設定を「標準アーキテクチャ(64ビットを含む)」に変更します。 「ユニバーサルライブラリ」ターゲットをビルドして、Core Plot 1.4に含まれているライブラリの代わりに結果の静的ライブラリを含めるか、代わりに依存プロジェクトのセットアップを使用します。
CorePlotは、Xcode 5.1で動作する1.5.1をリリースしました。 CorePlotHeadersフォルダーとlibCorePlot-CocoaTouch.aファイルをプロジェクトにコピーするだけです。
here からダウンロードできます。
試してください:
lipo -info libCorePlot-CocoaTouch.a
これは、ライブラリがarmv7、armv7s、i386(32ビットシミュレータ)用に構築されており、64ビットシミュレータは含まれていないことを示しています。 64ビットシミュレータ用のlibをビルドする必要があります。その後、lipoを使用して64ビットlibをlibCorePlot-CocoaTouch.aに追加できます。
出力:
Architectures in the fat file: libCorePlot-CocoaTouch.a are: armv7 armv7s i386
PS:iPhone 5Sでも動作しません(arm64なし)。
編集:
以下は、arm64アーキテクチャとx86_64アーキテクチャの両方を含むバイナリを生成するために必要な手順です。
xcodeのアーキテクチャの設定を変更する
プロジェクトのダウンロードとビルドのプロセスを実行したくない場合は、ユニバーサルライブラリ(armv7、armv7s、arm64用)と ここに置く をビルドしました。
これは、coreplot commit id cc0a18cef8915f4a11e0699e9429c0a2f0018b42から構築されています。
Xcode7.3 + CocoaPodでも同じエラーが発生しました。その他のリンカーフラグ= $(inherited)の問題を修正しました。
もちろん、この設定はCocoaPodでのみ有効です。
上記すべてを試しても動作しない場合は、「ビルド設定」またはプロジェクトターゲットで-ObjC -lCorePlot-CocoaTouchを「その他のリンカーフラグ」に設定してみてください。
Xcode 7.2.1とiOS SDK 9.2の公式ドキュメント ' sing Core Plot In an Application 'に従いました。 「-OjbC」に加えてリンカーフラグ「-lCorePlot-CocoaTouch」を追加するまで、.aがarm64をサポートしている場合でも同じエラーが発生しました。