What’s a framework?
A framework is a hierarchical listing that encapsulates shared sources, corresponding to a dynamic shared library, nib recordsdata, picture recordsdata, localized strings, header recordsdata, and reference documentation in a single bundle.
So in a nutshell, a framework is a extremely reusable element in your apps.
The way to make it?
There’s an article about Xcode conventions which can make it easier to set up your initiatives, it’s best to examine that first, if you have not earlier than.
Conventional manner
There’s a conventional solution to make a framework in Xcode. I’ll create a shared framework for all of the apple platforms (iOS, macOS, tvOS, watchOS), which goes to be able to logging issues to the usual console.
Let’s make the challenge:
- Create a brand new challenge utilizing one of many framework targets
- Comply with the directions fill & title all of the fields
- Add all the opposite platform framework targets
- Rename all targets in accordance with the platform names
Now in Finder:
- Create a Sources folder and transfer all of the Swift and header recordsdata there
- Create an Property folder with platforms subfolders
- Transfer all of the Data.plist recordsdata into the proper platfrom subdirectory
- Create a Assessments folder and transfer check recordsdata there
Again to Xcode:
- Take away each group and add the brand new Folders from Finder
- Examine that each goal has the proper recordsdata (framework & exams)
- Contained in the header file, exchange UIKit depencency with Basis
The purpose is to attain a construction considerably like this:
Challenge settings:
- Choose the proper plist recordsdata for the targets
- Set your bundle identifiers (use my conventions)
- Setup platform variations (recommendation: help 1 older model too)
- Setup the plist recordsdata for the exams from the construct settings pane
- Set the product title (Console) in your framework construct settings
- Examine your construct phases and add the general public header file.
Scheme settings:
- Go to the scheme settings and setup shared schemes for the frameworks
- Collect protection knowledge should you want it
- Write your framework you should use Swift “macros” to detect platforms
There’s a flag in Xcode to permit app extension API solely, if you’re embedding your framework inside an utility extension it needs to be enabled!
Congratulations, now you could have your model new Swift framework made within the conventional manner. Let’s proceed with a neat trick.
Common cross platform framework
It’s doable to create a multiplatform single scheme Xcode challenge with cross platform help for each platform, but it surely’s not advisable as a result of it is a hack. Nevertheless a number of open supply libraries do the identical manner, so why should not we.
- Delete all of the targets, schemes, besides macOS!!!
- Rename the remaining goal, scheme (we do not want platform names)
- Use the challenge configuration file, set the xcconfig on the challenge
- Delete Data.plist recordsdata, use one for the framework and one for the exams
- Rename bundle identifier (we do not want platform names there too)
States will be combined up if you’re constructing for a number of platforms, nonetheless it is a good clear solution to help each platforms, with out duplications.
The way to use a Swift framework?
Embedding your framework is essentially the most easy factor to do. You possibly can merely drag the framework challenge to a different Xcode challenge, the one factor left to do is to the embedded the framework into the applying. You possibly can go to the embedded binaries part inside the overall challenge data tab and add the framework as a dependency.
Swift Bundle Supervisor
With SPM, you must make a Bundle.swift file first, then you can construct your targets with the swift construct command. Now that Xcode helps the Swift Bundle Supervisor, it is very easy to combine third social gathering frameworks through the use of it.
You possibly can obtain the ultimate framework examples from GitHub.
Just remember to do not miss out my deep dive into swift frameworks put up.