Skip to content

Instantly share code, notes, and snippets.

@furushchev
Created December 12, 2017 00:31
Show Gist options
  • Save furushchev/f86a4f14c7ba15eb93d457bcfa872fec to your computer and use it in GitHub Desktop.
Save furushchev/f86a4f14c7ba15eb93d457bcfa872fec to your computer and use it in GitHub Desktop.
#!/bin/sh
set -e
LIPO_DIR=$BUILD_DIR/Universal
SCHEME=$PROJECT_NAME-Package
rm -rf $PROJECT_DIR/$PROJECT_NAME.framework
rm -rf $LIPO_DIR && mkdir $LIPO_DIR
# build
xcodebuild clean build \
-scheme $SCHEME \
-project $PROJECT_NAME.xcodeproj \
-configuration Release \
-sdk iphoneos \
ONLY_ACTIVE_ARCH=NO \
DSTROOT=/
xcodebuild clean build \
-scheme $SCHEME \
-project $PROJECT_NAME.xcodeproj \
-configuration Release \
-sdk iphonesimulator \
ONLY_ACTIVE_ARCH=NO \
DSTROOT=/
# copy
(cd $BUILD_DIR/Release-iphoneos && tar cf - $PROJECT_NAME.framework) | (cd $LIPO_DIR && tar xfv -)
(cd $BUILD_DIR/Release-iphonesimulator/$PROJECT_NAME.framework/Modules && tar cf - $PROJECT_NAME.swiftmodule) | (cd $LIPO_DIR/$PROJECT_NAME.framework/Modules && tar xfv -)
# merge
lipo -create \
-output $LIPO_DIR/$PROJECT_NAME.framework/$PROJECT_NAME \
$BUILD_DIR/Release-iphoneos/$PROJECT_NAME.framework/$PROJECT_NAME \
$BUILD_DIR/Release-iphonesimulator/$PROJECT_NAME.framework/$PROJECT_NAME
# install
cp -RL $LIPO_DIR/$PROJECT_NAME.framework $PROJECT_DIR/

Make a project

Make project

PROJECT=FooKit
mkdir $PROJECT
cd $PROJECT
swift package init --type library
swift package generate-xcodeproj
open $PROJECT.xcodeproj

Setting

  1. File -> New -> Target
  2. Select CrossPlatform -> Aggregate
  3. Name ${PROJECT}Universal
  4. Select Logit -> TARGETS -> ${PROJECT}Universal -> BuildPhases
  5. Press "+" and add Run Script
  6. Paste build_framework.sh
  7. Switch Build target to ${PROJECT}Universal
  8. Build and the built framework will be created at project root directory

Use built framework in a new project

Make project

PROJECT=BarKit
mkdir $PROJECT
cd $PROJECT
swift package init --type library
swift package generate-xcodeproj
mkdir vendor
open $PROJECT.xcodeproj

Put the built framework

Put all frameworks that you use into $PROJECT/vendor

Setting

  1. Create ${PROJECT}Universal as same as previous project
  2. Select $PROJECT -> PROJECT -> $PROJECT -> Build Settings -> Framework Search Paths
  3. Add $(SRCROOT)/vendor
  4. Select $PROJECT -> TARGETS -> $PROJECT -> Linked Frameworks and Libraries
  5. D&D all frameworks under $PROJECT/vendor
  6. Build
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment