XcodeとSDK 4+を使用して脂肪質の静的ライブラリ(デバイス+シミュレーター)をビルドする


283

理論的には、シミュレータとiPhoneとiPadの両方を含む単一の静的ライブラリを構築できるようです。

ただし、Appleにはこれに関するドキュメントはありません。Xcodeのデフォルトテンプレートは、これを行うように設定されていません。

Xcode内で実行できる、シンプルでポータブルな再利用可能なテクニックを探しています。

いくつかの歴史:

  • 2008年には、以前はsimとデバイスの両方を含む単一のスタティックライブラリを作成できました。Appleはそれを無効にした。
  • 2009年中、私たちは静的ライブラリのペアを作成しました-1つはシミュレーション用、もう1つはデバイス用です。Appleもこれを無効にしています。

参照:

  1. これは素晴らしいアイデアです。優れたアプローチですが、機能しません。http//www.drobnik.com/touch/2010/04/universal-static-libraries/

    • 彼のスクリプトにはいくつかのバグがあり、それは彼のマシンでのみ機能することを意味します-彼はそれらを「推測」する代わりにBUILT_PRODUCTS_DIRやBUILD_DIRを使用するべきです)
    • Appleの最新のXcodeは、彼が行ったことを実行することを妨げます-Xcodeがターゲットを処理する方法の(文書化された)変更のため、それは単に機能しません)
  2. 別のSOの質問は、とARM7一部対ARM6に焦点を当てた応答と、Xcodeのなしでそれを行う方法を尋ねた-しかし、i386の一部を無視:私は、ARMv6、ARMv7以降i386用の静的ライブラリ(脂肪)をコンパイルするにはどうすればよいです

    • Appleの最新の変更以降、シミュレータの部分はarm6 / arm7の違いと同じではなくなりました-これは別の問題です、上記を参照してください)

ただ疑問に思います-なぜあなたはそれをしたいですか?それはデバイスライブラリをデバイス上でより大きくそしてより重くしませんか?
cregox、2011年

3
@Cawas-ライブラリの「重み」は、実際の状況の95%では無関係です-ほとんどの人にとって、特に単一のUIImageViewだけを表示する場合と比較すると、ライブラリは小さいです。
Adam

1
@Cawas-一方、ここでの価値は、他の人々があなたのライブラリを非常に簡単に使用/再利用できるようにすることです。これは、1段階のドラッグアンドドロッププロセスになります。
Adam

4
@Cawas-最後に、驚くほど有益な利点:「間違った」コンパイル済みライブラリを誤って誰かに送信することは非常に簡単です -XCodeはゼロチェックを実行し、「間違った」アーキテクチャを「正しい」と思った名前のファイルに喜んでコンパイルします建築。Apple この領域でXcodeを壊し続けています -新しいバージョンにはそれぞれ「昨日ライブラリを正しくコンパイルするために押したボタンが正しくコンパイルされない」という意味の変更があります。Appleが私たちを混乱させるのをやめるまで、私たちは彼らの悪いUIをばかばかしく証明する必要があります:)。
Adam

1
それは本当に素晴らしいことです!現在のところ、少し複雑なことをシミュレータに依存することはできません。
cregox、2011年

回答:


272

代替案:

最新バージョンの簡単なコピー/貼り付け(ただし、インストール手順は変更される場合があります-以下を参照してください!)

Karlのライブラリーは、セットアップにより多くの労力を要しますが、はるかに優れた長期的なソリューションです(ライブラリーをフレームワークに変換します)。

これを使用してから、微調整してアーカイブビルドのサポートを追加します。アーカイブモードでこれをうまく機能させるために彼が使用している変更に関する@Frederikのコメントを参照してください。


最近の変更:1. iOS 10.xのサポートが追加されました(古いプラットフォームのサポートは維持されています)。

  1. このスクリプトをproject-embedded-in-another-projectで使用する方法についての情報(私は絶対にしないことを強くお勧めしますが、AppleはXcodeからプロジェクトを相互に埋め込んだ場合、Xcodeにいくつかの表示停止バグがあります3.xからXcode 4.6.xまで)

  2. バンドルを自動的に含めることができるボーナススクリプト(つまり、ライブラリからPNGファイル、PLISTファイルなどを含める!)-以下を参照(下にスクロール)

  3. iPhone5をサポートするようになりました(lipoのバグに対するAppleの回避策を使用)。注:インストール手順が変更されました(おそらく、今後スクリプトを変更することでこれを簡略化できますが、今は危険を冒したくありません)。

  4. 「ヘッダーのコピー」セクションは、公開ヘッダーの場所のビルド設定を尊重するようになりました(Frederik Wallnerの厚意による)

  5. Doug Dickinsonのおかげで、SYMROOTの明示的な設定が追加されました(OBJROOTも設定する必要があるかもしれませんか?)。


スクリプト(これは、コピー/貼り付けする必要があるものです)

使用方法/インストール手順については、以下を参照してください

##########################################
#
# c.f. /programming/3520977/build-fat-static-library-device-simulator-using-xcode-and-sdk-4
#
# Version 2.82
#
# Latest Change:
# - MORE tweaks to get the iOS 10+ and 9- working
# - Support iOS 10+
# - Corrected typo for iOS 1-10+ (thanks @stuikomma)
# 
# Purpose:
#   Automatically create a Universal static library for iPhone + iPad + iPhone Simulator from within XCode
#
# Author: Adam Martin - http://twitter.com/redglassesapps
# Based on: original script from Eonil (main changes: Eonil's script WILL NOT WORK in Xcode GUI - it WILL CRASH YOUR COMPUTER)
#

set -e
set -o pipefail

#################[ Tests: helps workaround any future bugs in Xcode ]########
#
DEBUG_THIS_SCRIPT="false"

if [ $DEBUG_THIS_SCRIPT = "true" ]
then
echo "########### TESTS #############"
echo "Use the following variables when debugging this script; note that they may change on recursions"
echo "BUILD_DIR = $BUILD_DIR"
echo "BUILD_ROOT = $BUILD_ROOT"
echo "CONFIGURATION_BUILD_DIR = $CONFIGURATION_BUILD_DIR"
echo "BUILT_PRODUCTS_DIR = $BUILT_PRODUCTS_DIR"
echo "CONFIGURATION_TEMP_DIR = $CONFIGURATION_TEMP_DIR"
echo "TARGET_BUILD_DIR = $TARGET_BUILD_DIR"
fi

#####################[ part 1 ]##################
# First, work out the BASESDK version number (NB: Apple ought to report this, but they hide it)
#    (incidental: searching for substrings in sh is a nightmare! Sob)

SDK_VERSION=$(echo ${SDK_NAME} | grep -o '\d\{1,2\}\.\d\{1,2\}$')

# Next, work out if we're in SIM or DEVICE

if [ ${PLATFORM_NAME} = "iphonesimulator" ]
then
OTHER_SDK_TO_BUILD=iphoneos${SDK_VERSION}
else
OTHER_SDK_TO_BUILD=iphonesimulator${SDK_VERSION}
fi

echo "XCode has selected SDK: ${PLATFORM_NAME} with version: ${SDK_VERSION} (although back-targetting: ${IPHONEOS_DEPLOYMENT_TARGET})"
echo "...therefore, OTHER_SDK_TO_BUILD = ${OTHER_SDK_TO_BUILD}"
#
#####################[ end of part 1 ]##################

#####################[ part 2 ]##################
#
# IF this is the original invocation, invoke WHATEVER other builds are required
#
# Xcode is already building ONE target...
#
# ...but this is a LIBRARY, so Apple is wrong to set it to build just one.
# ...we need to build ALL targets
# ...we MUST NOT re-build the target that is ALREADY being built: Xcode WILL CRASH YOUR COMPUTER if you try this (infinite recursion!)
#
#
# So: build ONLY the missing platforms/configurations.

if [ "true" == ${ALREADYINVOKED:-false} ]
then
echo "RECURSION: I am NOT the root invocation, so I'm NOT going to recurse"
else
# CRITICAL:
# Prevent infinite recursion (Xcode sucks)
export ALREADYINVOKED="true"

echo "RECURSION: I am the root ... recursing all missing build targets NOW..."
echo "RECURSION: ...about to invoke: xcodebuild -configuration \"${CONFIGURATION}\" -project \"${PROJECT_NAME}.xcodeproj\" -target \"${TARGET_NAME}\" -sdk \"${OTHER_SDK_TO_BUILD}\" ${ACTION} RUN_CLANG_STATIC_ANALYZER=NO" BUILD_DIR=\"${BUILD_DIR}\" BUILD_ROOT=\"${BUILD_ROOT}\" SYMROOT=\"${SYMROOT}\"

xcodebuild -configuration "${CONFIGURATION}" -project "${PROJECT_NAME}.xcodeproj" -target "${TARGET_NAME}" -sdk "${OTHER_SDK_TO_BUILD}" ${ACTION} RUN_CLANG_STATIC_ANALYZER=NO BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" SYMROOT="${SYMROOT}"

ACTION="build"

#Merge all platform binaries as a fat binary for each configurations.

# Calculate where the (multiple) built files are coming from:
CURRENTCONFIG_DEVICE_DIR=${SYMROOT}/${CONFIGURATION}-iphoneos
CURRENTCONFIG_SIMULATOR_DIR=${SYMROOT}/${CONFIGURATION}-iphonesimulator

echo "Taking device build from: ${CURRENTCONFIG_DEVICE_DIR}"
echo "Taking simulator build from: ${CURRENTCONFIG_SIMULATOR_DIR}"

CREATING_UNIVERSAL_DIR=${SYMROOT}/${CONFIGURATION}-universal
echo "...I will output a universal build to: ${CREATING_UNIVERSAL_DIR}"

# ... remove the products of previous runs of this script
#      NB: this directory is ONLY created by this script - it should be safe to delete!

rm -rf "${CREATING_UNIVERSAL_DIR}"
mkdir "${CREATING_UNIVERSAL_DIR}"

#
echo "lipo: for current configuration (${CONFIGURATION}) creating output file: ${CREATING_UNIVERSAL_DIR}/${EXECUTABLE_NAME}"
xcrun -sdk iphoneos lipo -create -output "${CREATING_UNIVERSAL_DIR}/${EXECUTABLE_NAME}" "${CURRENTCONFIG_DEVICE_DIR}/${EXECUTABLE_NAME}" "${CURRENTCONFIG_SIMULATOR_DIR}/${EXECUTABLE_NAME}"

#########
#
# Added: StackOverflow suggestion to also copy "include" files
#    (untested, but should work OK)
#
echo "Fetching headers from ${PUBLIC_HEADERS_FOLDER_PATH}"
echo "  (if you embed your library project in another project, you will need to add"
echo "   a "User Search Headers" build setting of: (NB INCLUDE THE DOUBLE QUOTES BELOW!)"
echo '        "$(TARGET_BUILD_DIR)/usr/local/include/"'
if [ -d "${CURRENTCONFIG_DEVICE_DIR}${PUBLIC_HEADERS_FOLDER_PATH}" ]
then
mkdir -p "${CREATING_UNIVERSAL_DIR}${PUBLIC_HEADERS_FOLDER_PATH}"
# * needs to be outside the double quotes?
cp -r "${CURRENTCONFIG_DEVICE_DIR}${PUBLIC_HEADERS_FOLDER_PATH}"* "${CREATING_UNIVERSAL_DIR}${PUBLIC_HEADERS_FOLDER_PATH}"
fi
fi

インストール手順

  1. 静的libプロジェクトを作成する
  2. ターゲットを選択
  3. [ビルド設定]タブで、[アクティブアーキテクチャのみをビルド]を[いいえ]に設定します(すべてのアイテムに対して)
  4. [ビルドフェーズ]タブで、[追加...新しいビルドフェーズ...新しい実行スクリプトビルドフェーズ]を選択します。
  5. スクリプト(上記)をコピーしてボックスに貼り付けます

...ボーナスオプションの使用:

  1. オプション:ライブラリにヘッダーがある場合は、「ヘッダーのコピー」フェーズに追加します
  2. オプション:...そして、それらを「プロジェクト」セクションから「パブリック」セクションにドラッグ/ドロップします
  3. オプション:...そして、アプリをビルドするたびに、「debug-universal」ディレクトリのサブディレクトリに自動的にエクスポートされます(これらはusr / local / includeにあります)。
  4. オプション:注:場合、あなたのドラッグで公開ヘッダを持っている場合、それは.IPAファイルを作成できない場合、これはXcodeの4のバグを公開して、他のXcodeプロジェクトにプロジェクトをドロップ/ドラッグしよう/プロジェクトを落としました。回避策:xcodeプロジェクトを埋め込まないでください(Appleのコードのバグが多すぎます!)

出力ファイルが見つからない場合の回避策は次のとおりです。

  1. スクリプトの最後に次のコードを追加します(Frederik Wallnerの厚意による):open "$ {CREATING_UNIVERSAL_DIR}"

  2. Appleは200行を過ぎるとすべての出力を削除します。ターゲットを選択し、スクリプトの実行フェーズで、「ビルドログに環境変数を表示する」のチェックを外す必要があります。

  3. XCode4のカスタム「ビルド出力」ディレクトリを使用している場合、XCodeはすべての「予期しない」ファイルを間違った場所に配置します。

    1. プロジェクトをビルドする
    2. Xcode4の左上にある右側の最後のアイコンをクリックします。
    3. 一番上のアイテムを選択します(これは「最新ビルド」です。アップルが自動選択するはずですが、彼らはそれを考えていませんでした)
    4. メインウィンドウで、一番下までスクロールします。最後の行は次のようになります。lipo:現在の構成(デバッグ)の場合は、出力ファイルを作成します:/Users/blah/Library/Developer/Xcode/DerivedData/AppName-ashwnbutvodmoleijzlncudsekyf/Build/Products/Debug-universal/libTargetName.a

    ...これがUniversal Buildの場所です。


プロジェクトに「非ソースコード」ファイルを含める方法(PNG、PLIST、XMLなど)

  1. 上記のすべてを行い、動作することを確認します
  2. 最初のものの後に来る新しいスクリプト実行フェーズを作成します(以下のコードをコピーして貼り付けます)
  3. タイプが「バンドル」の新しいターゲットをXcodeで作成します。
  4. MAIN PROJECTの[Build Phases]で、新しいバンドルを「依存するもの」として追加します(上部セクション、プラスボタンを押し、下部にスクロールして、製品で「.bundle」ファイルを見つけます)
  5. 新しいバンドルターゲットの「ビルドフェーズ」で、「バンドルリソースのコピー」セクションを追加し、すべてのPNGファイルなどをその中にドラッグアンドドロップします。

ビルドされたバンドルをFATスタティックライブラリと同じフォルダーに自動コピーするスクリプト:

echo "RunScript2:"
echo "Autocopying any bundles into the 'universal' output folder created by RunScript1"
CREATING_UNIVERSAL_DIR=${SYMROOT}/${CONFIGURATION}-universal
cp -r "${BUILT_PRODUCTS_DIR}/"*.bundle "${CREATING_UNIVERSAL_DIR}"

2
私はこれをいくつかのプロジェクトで使用し、ライブラリを構築するためにこれを使用するものをapp-storeに出荷しました。すべてが100%正常に機能したため、今のところ(おそらくXcode 4まで)これに固執します
Adam

2
この方法がXCode 4.5で機能するかどうかを誰かが確認できますか?静的ライブラリをコンパイルして、メインプロジェクトで使用しようとしています。これはデバイスでは実行できますが、シミュレータでは実行できません。これは私が受け取るエラーです:ファイル/Users/alex/Documents/iphone/production/iphone/mymedia/libMyUnrar4iOS.a(2スライス)に必要なアーキテクチャi386がありません
Alex1987

2
XCode 5とARM64でこれを機能させる方法はありますか?アーキテクチャを標準のままにしておくと、ライブラリはarmv7、armvs7、i386で期待どおりに作成されます。アーキテクチャを64ビットを含む標準に設定すると、ライブラリには「cputype 16777223」のみが含まれます。私は.aファイルでotool -hを使用して、内容を確認しています
Roger Binns

1
XCode5では、実行スクリプトのビルドフェーズを追加するのがさらに難しくなっています。これを確認してください: runscriptbuildphase.com
Fabio Napodano '25

1
これはXcode 6で変更なしで正常に動作するようです(これまでにいくつかのプロジェクトを試してみましたが、まだApp Storeの更新を送信していませんが、現在のところすべて正常に動作しています)。
アダム

85

armv7、armv7s、およびシミュレーターで動作する脂肪質の静的ライブラリーを構築するために何時間も費やしました。最後に解決策を見つけました

要点は、2つのライブラリ(1つはデバイス用、次に1つはシミュレータ用)を個別にビルドし、それらを互いに区別できるように名前を変更してから、それらを1つのライブラリにリポ作成します。

lipo -create libPhone.a libSimulator.a -output libUniversal.a

試してみましたが、うまくいきました!


4
受け入れられた回答を読むことをお勧めします。これは2年前にすでにカバーされていることに気付くかもしれません...
Adam

2
私はそれを読んで、スクリプトを使用しましたが、armv7sには機能しませんでした。
g_low

2
lipoコマンドはスクリプトでは機能しませんが、手動でうまく機能します!10x
Dima

9
+1本当に必要なのはこれだけで、巨大な「フレームワークを作成する」スクリプトではありませんでした。
LearnCocos2D 2013年

SolutionURLが「エラー404-見つかりません」を返す
Alex

74

私が作ったXCodeの4プロジェクトテンプレートは、簡単に通常のライブラリを作るなどとして、ユニバーサルフレームワークを作ることができます。


iOS 4.3ターゲットでビルドできませんでした。次のエラーを取得します。-stdlib= libc ++の無効な展開ターゲット(iOS 5.0以降が必要)
Alex1987

私はこの答えに対してより多くの評判ポイントを与えることができればいいのですが... CMakeを使用して静的ライブラリを作成するよりもはるかに簡単です。本当にありがとうございました!
iwasrobbed、2013年

私にとってはiOS 6でも動作します。しかし、それはおそらく私の
ライブラリ

そのソリューションには大きな問題があります:このソリューションによって作成されたフレームワークを使用したい他の人(このソリューションは、fremeworkテンプレートをxcodeにインストールすることを提案します)このテンプレートをxcodeにインストールする必要があります!!!
evya 2014

実際のフレームワーク用のテンプレートをインストールするだけで済みます。偽のフレームワークは、変更されていないXcodeで正常に動作します。
Karl

30

コマンドラインユーティリティがxcodebuildあり、xcode内でシェルコマンドを実行できます。そのため、カスタムスクリプトを使用しても構わない場合は、このスクリプトが役立つことがあります。

#Configurations.
#This script designed for Mac OS X command-line, so does not use Xcode build variables.
#But you can use it freely if you want.

TARGET=sns
ACTION="clean build"
FILE_NAME=libsns.a

DEVICE=iphoneos3.2
SIMULATOR=iphonesimulator3.2






#Build for all platforms/configurations.

xcodebuild -configuration Debug -target ${TARGET} -sdk ${DEVICE} ${ACTION} RUN_CLANG_STATIC_ANALYZER=NO
xcodebuild -configuration Debug -target ${TARGET} -sdk ${SIMULATOR} ${ACTION} RUN_CLANG_STATIC_ANALYZER=NO
xcodebuild -configuration Release -target ${TARGET} -sdk ${DEVICE} ${ACTION} RUN_CLANG_STATIC_ANALYZER=NO
xcodebuild -configuration Release -target ${TARGET} -sdk ${SIMULATOR} ${ACTION} RUN_CLANG_STATIC_ANALYZER=NO







#Merge all platform binaries as a fat binary for each configurations.

DEBUG_DEVICE_DIR=${SYMROOT}/Debug-iphoneos
DEBUG_SIMULATOR_DIR=${SYMROOT}/Debug-iphonesimulator
DEBUG_UNIVERSAL_DIR=${SYMROOT}/Debug-universal

RELEASE_DEVICE_DIR=${SYMROOT}/Release-iphoneos
RELEASE_SIMULATOR_DIR=${SYMROOT}/Release-iphonesimulator
RELEASE_UNIVERSAL_DIR=${SYMROOT}/Release-universal

rm -rf "${DEBUG_UNIVERSAL_DIR}"
rm -rf "${RELEASE_UNIVERSAL_DIR}"
mkdir "${DEBUG_UNIVERSAL_DIR}"
mkdir "${RELEASE_UNIVERSAL_DIR}"

lipo -create -output "${DEBUG_UNIVERSAL_DIR}/${FILE_NAME}" "${DEBUG_DEVICE_DIR}/${FILE_NAME}" "${DEBUG_SIMULATOR_DIR}/${FILE_NAME}"
lipo -create -output "${RELEASE_UNIVERSAL_DIR}/${FILE_NAME}" "${RELEASE_DEVICE_DIR}/${FILE_NAME}" "${RELEASE_SIMULATOR_DIR}/${FILE_NAME}"

おそらく非効率に見えますが(私はシェルスクリプトが得意ではありません)、理解しやすいでしょう。このスクリプトのみを実行する新しいターゲットを構成しました。スクリプトはコマンドライン用に設計されていますが、:)ではテストされていません。

コア概念であるxcodebuildlipo

Xcode UI内で多くの構成を試しましたが、何も機能しませんでした。これは一種のバッチ処理であるため、コマンドライン設計の方が適しているため、AppleはXcodeからバッチビルド機能を徐々に削除しました。そのため、今後、UIベースのバッチビルド機能を提供するとは思わない。


おかげで、基本的な単純なコマンドがまだ機能しているように見えるのは本当に興味深いことです。それは、AppleがGUIを目覚ましく壊したというだけのことです。すべてのターゲットを事前に作成し、このスクリプトをxcodeビルド変数に関連付けることにより、Appleが壊れないように「吸い込まない」で修正する完全にカスタムのプロジェクトテンプレートを作成できるようです。次のプロジェクトで試してみます:)
Adam

1
このようなスクリプトを使用して、シェルスクリプトのみを含む新しいターゲットの下に置きました。上記の再帰的なビルドスクリプトは非常に巧妙ですが、不必要に混乱しています。
ベンザド

1
私はこのようなものにはシェルスクリプトを好みます。これが私のテイクですgist.github.com/3178578
slf

@benzadoええ、変更のためにシェルスクリプトは読みやすいはずだと思うので、意図的に複雑さを回避しました。
Eonil 2012

lipo:入力ファイルを開けません:/ Debug-iphoneos /
Dima

11

JsonKitのファットな静的ライブラリが必要だったので、Xcodeで静的ライブラリプロジェクトを作成し、このbashスクリプトをプロジェクトディレクトリで実行しました。「アクティブ構成のビルドのみ」をオフにしてxcodeプロジェクトを構成している限り、すべてのアーキテクチャーを1つのlibに含める必要があります。

#!/bin/bash
xcodebuild -sdk iphoneos
xcodebuild -sdk iphonesimulator
lipo -create -output libJsonKit.a build/Release-iphoneos/libJsonKit.a build/Release-iphonesimulator/libJsonKit.a

7

iOS 10アップデート:

スクリプトの正規表現は9.x以下のみを想定し、ios 10.0に対して0.0を返すため、iphoneos10.0でfatlibを構築するときに問題が発生しました

これを修正するには、単に交換してください

SDK_VERSION=$(echo ${SDK_NAME} | grep -o '.\{3\}$')

SDK_VERSION=$(echo ${SDK_NAME} | grep -o '[\\.0-9]\{3,4\}$')

ありがとう。今朝も同様の変更を行いましたが、\ dを使用しました。これは私たちが望むものだと思います(あなたのそれよりも良いですか、悪いですか?)... grep -o '\ d \ {1,2 \} \。\ d \ {2 \} $'
Adam

私は数値のみを考慮しているので、私の方が信頼性が高いと思います
2016

1
いいえ、あなたの数字は特定の数字の書き方に一致します。Appleの歴史的なサポート(およびファイル名など)の文字とテキストの使用を前提として、数桁の独自の選択は信頼性が低いと思います。
Adam

1
さて、多分あなたは正しいです。少なくとも私は私のプロジェクトも機能させており、次の89のiOSバージョンでも安全です
2016

@benソリューションが機能します。Adamの正規表現 '[\\。0-9] \ {3,4 \} $'はエラーコード2
Zee

4

これをXcode 4テンプレートにしました。これは、カールの静的フレームワークテンプレートと同じです。

(プレーンな静的ライブラリの代わりに)静的フレームワークを構築すると、明らかにリンカのバグが原因でLLVMでランダムクラッシュが発生することがわかりました。つまり、静的ライブラリはまだ有用だと思います。


こんにちはマイケル、静的ライブラリテンプレートを試しましたが、シミュレータ用にコンパイルできますが、デバイス用にはコンパイルできません。ここでエラーが発生しました:**ビルドに失敗しました**次のビルドコマンドが失敗しました:ProcessPCH / var / folders / qy / ncy6fkpn6677qt876ljrc54m0000gn / C / com .apple.Xcode.501 / SharedPrecompiledHeaders / MenuBarUniversal-Prefix-gwxxzpanxyudmfgryorafazokagi / MenuBarUniversal-Prefix.pch.pth MenuBarUniversal / MenuBarUniversal-Prefix.pch normal armv7 Objective-c com.apple.compilers.llvm.clang.1_0。 )最初の200の通知のみを表示するコマンド/ bin / shが終了コード65で失敗しました
Kappe

2

よくやった!私は同様のものをハッキングしましたが、個別に実行する必要がありました。ビルドプロセスの一部とするだけで、非常に簡単になります。

注目の1アイテム。パブリックとしてマークしたインクルードファイルはコピーされないことに気付きました。私は自分のスクリプトにあったものをあなたのスクリプトに合わせましたが、それはかなりうまくいきます。以下をスクリプトの最後に貼り付けます。

if [ -d "${CURRENTCONFIG_DEVICE_DIR}/usr/local/include" ]
then
  mkdir -p "${CURRENTCONFIG_UNIVERSAL_DIR}/usr/local/include"
  cp "${CURRENTCONFIG_DEVICE_DIR}"/usr/local/include/* "${CURRENTCONFIG_UNIVERSAL_DIR}/usr/local/include"
fi

1
OK、それを上の答えに追加しました。(まだテストする機会はありませんでしたが、私には正しいように見えます)
Adam

1

私は実際にこの目的のために自分のスクリプト書いただけです。Xcodeは使用しません。(Gambit Schemeプロジェクトの同様のスクリプトに基づいています。)

基本的に、。/ configureとmakeを3回(i386、armv7、およびarmv7sの場合)実行し、生成された各ライブラリをまとめてファットライブラリにします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.