2016-09-11 6 views
1

iOSでフレームワークを作成して使用しようとしています。それは以前働いていたし、シミュレータで動作しますが、新しいiPhone 6ではありません。iOS framework missing required architecture arm64

私はそれがスクリプトと関係があると思っていますが、私は見ることができます(私は大部分のためにインターネットのスクリプトをコピーしました)それはそれでarm64を持っている:

set -e 
set +u 
# Avoid recursively calling this script. 
if [[ $SF_MASTER_SCRIPT_RUNNING ]] 
then 
exit 0 
fi 
set -u 
export SF_MASTER_SCRIPT_RUNNING=1 


# Constants 
SF_TARGET_NAME=${PROJECT_NAME} 
UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal 

# Take build target 
if [[ "$SDK_NAME" =~ ([A-Za-z]+) ]] 
then 
SF_SDK_PLATFORM=${BASH_REMATCH[1]} 
else 
echo "Could not find platform name from SDK_NAME: $SDK_NAME" 
exit 1 
fi 

if [[ "$SF_SDK_PLATFORM" = "iphoneos" ]] 
then 
echo "Please choose iPhone simulator as the build target." 
exit 1 
fi 

IPHONE_DEVICE_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphoneos 

# Build the other (non-simulator) platform 
xcodebuild -project "${PROJECT_FILE_PATH}" -target "${TARGET_NAME}" -configuration "${CONFIGURATION}" -sdk iphoneos BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}" CONFIGURATION_BUILD_DIR="${IPHONE_DEVICE_BUILD_DIR}/arm64" SYMROOT="${SYMROOT}" ARCHS='arm64' VALID_ARCHS='arm64' $ACTION 

xcodebuild -project "${PROJECT_FILE_PATH}" -target "${TARGET_NAME}" -configuration "${CONFIGURATION}" -sdk iphoneos BUILD_DIR="${BUILD_DIR}" OBJROOT="${OBJROOT}" BUILD_ROOT="${BUILD_ROOT}" CONFIGURATION_BUILD_DIR="${IPHONE_DEVICE_BUILD_DIR}/armv7" SYMROOT="${SYMROOT}" ARCHS='armv7 armv7s' VALID_ARCHS='armv7 armv7s' $ACTION 

# Copy the framework structure to the universal folder (clean it first) 
rm -rf "${UNIVERSAL_OUTPUTFOLDER}" 
mkdir -p "${UNIVERSAL_OUTPUTFOLDER}" 
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework" "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework" 

# Smash them together to combine all architectures 
lipo -create "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/arm64/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/armv7/${PROJECT_NAME}.framework/${PROJECT_NAME}" -output "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/${PROJECT_NAME}" 

私はそれがiPhone 6+上で実行されますので、これはarm64用にコンパイルするために取得するために何をする必要があるか任意のアイデア?

私はこのエラーを取得するように見える:実行していないスクリプトに関係しているように聞こえる

Please choose iPhone simulator as the build target. Command /bin/sh failed with exit code 1

。私のテストプロジェクトにはスクリプトがないので、フレームワークに戻ってRun script only when installingに設定してフレームワークを再構築しましたが、まだ動作していません。

答えて

1

アーキテクチャと有効なアーキテクチャを確認し、$(継承)を他のリンカフラグに追加してください。

+0

ここではnoobieのためにお詫びしますが、私はあまりにもiOSに精通していません:)。どのようにアーキテクチャをチェックするための最善の方法です/私はそれを行うことについて行くだろうか? –

+0

プロジェクトを選択 - >ターゲット - >ビルド設定 –

+0

これは私にとってはうまくいかないようです。 'iPhoneのシミュレータをビルドターゲットとして選択してください。 コマンド/ bin/shは終了コード1で失敗しました。 ' –

2

フレームワークへのソースコードを持っていない限り、再コンパイルできません。 (それはとにかく最高の解決策です)実際には64ビットコードを実行していて、フレームワークは32ビットコード専用にコンパイルされています。以前のバージョンのアームライブラリを使うことを許したハックを書いたことがありますが、ハックがより大きなビットサイズへのジャンプに耐えられるとは思いません。もしあなたが望めばそれを試すことができます:click for hack.

+0

ソースコードがあるので、私のフレームワークです。オリジナルのメッセージではスクリプトを投稿しました.64ビットコードのために何か変更する必要がありますか? (私はインターネットからそれを手に入れたと思うし、それはarm64のためにコンパイルすべきだと言った) –

+0

あなたのビルド設定では、アーキテクチャの下で$(ARCHS_STANDARD)なのかどうかを確認してください。 (フレームワークを使っているあなたのプロジェクトの.aファイルを置き換えてください) –

+0

ビルドの設定でそれを設定すると、おそらくそれを省略することができます(Mine:標準アーキテクチャ(armv7、arm64) - $(ARCHS_STANDARD)スクリプトの中には、arm64用のビルドのようなものがあり、armv7で上書きするものがあります。 –

関連する問題