SVGKitFramework-iOS の Universal な Framework バイナリを作る




## コンパイル・ビルド

https://github.com/SVGKit/SVGKit の iOS 向けフレームワークを universal binary としてビルドするスクリプトです。


BUILD_DIR は適当な場所でいいとおもいます。Xcode と同じにしたいなら、xcodeproj からビルドしてフォルダを探して BUILD_DIR に .../Products となる範囲をコピペしてください。


```
$ git clone https://github.com/SVGKit/SVGKit
$ cd SVGKit
```

build-universal.sh を SVGKit/ フォルダにコピーして

```
$ sh build-universal.sh
```

で、実行させると Output/Debug-universal/SVGKit.framework
がビルドされます。

Release が欲しければ

```
$ CONFIGURATION="Release" sh build-universal.sh
```

とします。



## プロジェクトへの追加


SVGKit.framework と、SVGKit の `3rd-party-frameworks` に含まれる CocoaLumberjack.framework をプロジェクトに追加して、Project > General > "Embedded Binaries" にも SVGKit.framework と CocoaLumberjack.framework を追加します。

CocoaLumberjack.framework が CoreText.framework を要求します。その他は SVGKit の README のとおりです。



## スクリプト


```build-universal.sh
######################
# base script from https://gist.github.com/syshen/c24d127e1adc2783e0e7
######################
# Options
######################

REVEAL_ARCHIVE_IN_FINDER=false

TARGET_NAME="SVGKitFramework-iOS"
PRODUCT_NAME="SVGKit"

CONFIGURATION=${CONFIGURATION:="Debug"}
BUILD_DIR=${BUILD_DIR:="${HOME}/Library/Developer/Xcode/DerivedData/SVGKit-iOS-aaaaaaaaaabbbbbbbbbbcccccccc/Build/Products"}

SIMULATOR_LIBRARY_PATH="${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PRODUCT_NAME}.framework"

DEVICE_LIBRARY_PATH="${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PRODUCT_NAME}.framework"

UNIVERSAL_LIBRARY_DIR="${BUILD_DIR}/${CONFIGURATION}-iphoneuniversal"

FRAMEWORK="${UNIVERSAL_LIBRARY_DIR}/${PRODUCT_NAME}.framework"

PROJECT_DIR=${PROJECT_DIR:=.}

######################
# Build Frameworks
######################

xcodebuild -sdk iphonesimulator -configuration ${CONFIGURATION} -project SVGKit-iOS.xcodeproj -target ${TARGET_NAME} -arch i386 -arch x86_64 clean build CONFIGURATION_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphonesimulator 2>&1

xcodebuild -sdk iphoneos -configuration ${CONFIGURATION} -project SVGKit-iOS.xcodeproj -target ${TARGET_NAME} -arch armv7 -arch arm64 clean build CONFIGURATION_BUILD_DIR=${BUILD_DIR}/${CONFIGURATION}-iphoneos 2>&1

######################
# Create directory for universal
######################

rm -rf "${UNIVERSAL_LIBRARY_DIR}"

mkdir "${UNIVERSAL_LIBRARY_DIR}"

mkdir "${FRAMEWORK}"


######################
# Copy files Framework
######################

cp -r "${DEVICE_LIBRARY_PATH}/." "${FRAMEWORK}"


######################
# Make an universal binary
######################

lipo "${SIMULATOR_LIBRARY_PATH}/${PRODUCT_NAME}" "${DEVICE_LIBRARY_PATH}/${PRODUCT_NAME}" -create -output "${FRAMEWORK}/${PRODUCT_NAME}" | echo

# For Swift framework, Swiftmodule needs to be copied in the universal framework
if [ -d "${SIMULATOR_LIBRARY_PATH}/Modules/${PRODUCT_NAME}.swiftmodule/" ]; then
cp -f ${SIMULATOR_LIBRARY_PATH}/Modules/${PRODUCT_NAME}.swiftmodule/* "${FRAMEWORK}/Modules/${PRODUCT_NAME}.swiftmodule/" | echo
fi

if [ -d "${DEVICE_LIBRARY_PATH}/Modules/${PRODUCT_NAME}.swiftmodule/" ]; then
cp -f ${DEVICE_LIBRARY_PATH}/Modules/${PRODUCT_NAME}.swiftmodule/* "${FRAMEWORK}/Modules/${PRODUCT_NAME}.swiftmodule/" | echo
fi

######################
# check file infomation
######################
(cd ${FRAMEWORK};file ${PRODUCT_NAME})

######################
# On Release, copy the result to release directory
######################
OUTPUT_DIR="${PROJECT_DIR}/Output/${PRODUCT_NAME}-${CONFIGURATION}-iphoneuniversal/"

rm -rf "$OUTPUT_DIR"
mkdir -p "$OUTPUT_DIR"

cp -r "${FRAMEWORK}" "$OUTPUT_DIR"

if [ ${REVEAL_ARCHIVE_IN_FINDER} = true ]; then
open "${OUTPUT_DIR}/"
fi
```


#### 関連URLs
* [<span style="font-size:xx-small">Create an iOS Universal Framework</span>](https://medium.com/@syshen/create-an-ios-universal-framework-148eb130a46c#.5xni4ijkh)
* [<span style="font-size:xx-small">What are Embedded Binaries in Xcode?</span>](http://stackoverflow.com/questions/30173529/what-are-embedded-binaries-in-xcode)
* [<span style="font-size:xx-small">[iOS 8] App Extension #2 – Embedded Framework を利用して共有コードを Framework 化する</span>](http://dev.classmethod.jp/references/ios-8-embedded-framework/)
* [<span style="font-size:xx-small">Plugins iOS Custom Frameworks are added to "Embedded Binaries" XCode project section by default</span>](https://issues.apache.org/jira/browse/CB-10034)