Overview
Developing your own swift framework has below benefits.
- Reusable code
- Secure or Hide your code
- Reduce recompilation
- Reduce recompilation
- Save time
Tool Used: Xcode 8.3.2, Swift 3+
To create your own framework in swift you just have to follow below 5 steps.
Step 1: Setup Framework Project
Create new Xcode project.
Click on ‘Cocoa Touch Framework’.
Write a name of your project, we have used ‘YudizFramework’. (Make sure to choose swift language) and Click on Next button.
Add new file inside ‘YudizFramework’ folder. (Press ⌘ + N or Click on File -> New -> File…)
Click on ‘Cocoa Touch Class’.
Write File Name ‘YudizFramework’ and Subclass of ‘NSObject’.
Step 2: Write some code
Write following code inside ‘YudizFramework.swift’
open class YudizFramework: NSObject { open class func logToConsole(_ msg: String) { print(msg); } }
Note:- Make sure your class and method are open.
Step 3: To create Universal Framework
Add new ‘Aggregate’ target to your project.
And Add below script in ‘Run Script’ to it.
#!/bin/sh UNIVERSAL_OUTPUTFOLDER=${BUILD_DIR}/${CONFIGURATION}-universal # make sure the output directory exists mkdir -p "${UNIVERSAL_OUTPUTFOLDER}" # Step 1. Build Device and Simulator versions xcodebuild -target "${PROJECT_NAME}" ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build xcodebuild -target "${PROJECT_NAME}" -configuration ${CONFIGURATION} -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" clean build # Step 2. Copy the framework structure (from iphoneos build) to the universal folder cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework" "${UNIVERSAL_OUTPUTFOLDER}/" # Step 3. Copy Swift modules from iphonesimulator build (if it exists) to the copied framework directory SIMULATOR_SWIFT_MODULES_DIR="${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/Modules/${PROJECT_NAME}.swiftmodule/." if [ -d "${SIMULATOR_SWIFT_MODULES_DIR}" ]; then cp -R "${SIMULATOR_SWIFT_MODULES_DIR}" "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/Modules/${PROJECT_NAME}.swiftmodule" fi # Step 4. Create universal binary file using lipo and place the combined executable in the copied framework directory lipo -create -output "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework/${PROJECT_NAME}" # Step 5. Convenience step to copy the framework to the project's directory cp -R "${UNIVERSAL_OUTPUTFOLDER}/${PROJECT_NAME}.framework" "${PROJECT_DIR}" # Step 6. Convenience step to open the project's directory in Finder open "${PROJECT_DIR}"
Step 5: Add this framework to your any of your project
import UIKit import YudizFramework class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() YudizFramework.logToConsole("Share it if you liked it. ") } }
Note:- If you are getting following error,
… Reason: image not found
Make sure your framework is added in both ‘Embedded Binaries’ and ‘Linked Framework and Libraries’.