create_xcframework
Package multiple build configs of a library/framework into a single xcframework
Utility for packaging multiple build configurations of a given library
or framework into a single xcframework.
If you want to package several frameworks just provide one of:
* An array containing the list of frameworks using the :frameworks parameter
(if they have no associated dSYMs):
['FrameworkA.framework', 'FrameworkB.framework']
* A hash containing the list of frameworks with their dSYMs using the
:frameworks_with_dsyms parameter:
{
'FrameworkA.framework' => {},
'FrameworkB.framework' => { dsyms: 'FrameworkB.framework.dSYM' }
}
If you want to package several libraries just provide one of:
* An array containing the list of libraries using the :libraries parameter
(if they have no associated headers or dSYMs):
['LibraryA.so', 'LibraryB.so']
* A hash containing the list of libraries with their headers and dSYMs
using the :libraries_with_headers_or_dsyms parameter:
{
'LibraryA.so' => { dsyms: 'libraryA.so.dSYM' },
'LibraryB.so' => { headers: 'headers' }
}
Finally specify the location of the xcframework to be generated using the :output
parameter.
| create_xcframework | |
|---|---|
| Supported platforms | ios, mac |
| Author | @jgongo |
4 Examples
create_xcframework(frameworks: ['FrameworkA.framework', 'FrameworkB.framework'], output: 'UniversalFramework.xcframework')
create_xcframework(frameworks_with_dsyms: {'FrameworkA.framework' => {}, 'FrameworkB.framework' => { dsyms: 'FrameworkB.framework.dSYM' } }, output: 'UniversalFramework.xcframework')
create_xcframework(libraries: ['LibraryA.so', 'LibraryB.so'], output: 'UniversalFramework.xcframework')
create_xcframework(libraries_with_headers_or_dsyms: { 'LibraryA.so' => { dsyms: 'libraryA.so.dSYM' }, 'LibraryB.so' => { headers: 'LibraryBHeaders' } }, output: 'UniversalFramework.xcframework')
Parameters
| Key | Description | Default |
|---|---|---|
frameworks |
Frameworks (without dSYMs) to add to the target xcframework | |
frameworks_with_dsyms |
Frameworks (with dSYMs) to add to the target xcframework | |
libraries |
Libraries (without headers or dSYMs) to add to the target xcframework | |
libraries_with_headers_or_dsyms |
Libraries (with headers or dSYMs) to add to the target xcframework | |
output |
The path to write the xcframework to | |
allow_internal_distribution |
Specifies that the created xcframework contains information not suitable for public distribution | false |
* = default value is dependent on the user's system
Lane Variables
Actions can communicate with each other using a shared hash lane_context, that can be accessed in other actions, plugins or your lanes: lane_context[SharedValues:XYZ]. The create_xcframework action generates the following Lane Variables:
| SharedValue | Description |
|---|---|
SharedValues::XCFRAMEWORK_PATH |
Location of the generated xcframework |
To get more information check the Lanes documentation.
Documentation
To show the documentation in your terminal, run
fastlane action create_xcframework
CLI
It is recommended to add the above action into your Fastfile, however sometimes you might want to run one-offs. To do so, you can run the following command from your terminal
fastlane run create_xcframework
To pass parameters, make use of the : symbol, for example
fastlane run create_xcframework parameter1:"value1" parameter2:"value2"
It's important to note that the CLI supports primitive types like integers, floats, booleans, and strings. Arrays can be passed as a comma delimited string (e.g. param:"1,2,3"). Hashes are not currently supported.
It is recommended to add all fastlane actions you use to your Fastfile.
Source code
This action, just like the rest of fastlane, is fully open source, view the source code on GitHub