Remember when I made a post about Publishing iOS framework made easy? I will try to further simplify the whole process by adding Fastlane to the mix. For our testing ground, we will use an old library that I created - ReusableViewExtensions.
To start we need to install a toll named Bundler. To do that open terminal and enter the command:
gem install bundler
When Bundler is installed we can start setting up Fastlane.
Open the project folder, and in the rood directory create
Gemfile, I prefer to do it from the terminal by running
touch Gemfile && atom Gemfile, this way it is created and immediately open in the editor:)
Gemfile we will add all the Gems that we will use:
source "https://rubygems.org" gem "fastlane" gem "cocoapods"
Save the file and in the terminal run:
After all gems are installed, we are ready to initialize Fastlane!
To use installed gems, we need to prepend all commands with
Open terminal in the project root folder, where
Gemfile is located and run
bundle exec fastlane init. When asked select
4 as answer:
After setup is complete, there will be a new folder in the project -
fastlane, it contains all
Fastlane configuration files we need to run our lanes.
Create first lane - testing
Navigate to the
fastlane folder and create a new file named
Fastlane_config - it will contain all variables needed in Fastlane lanes. Open the newly created file and fill it with the necessary info:
platform :ios do class Config WORKSPACE = "Example/ReusableViewExtensions.xcworkspace" #1 TEST_SCHEME = "ReusableViewExtensions-Example" #2 BUILD_SCHEME = "ReusableViewExtensions" #3 TEST_DEVICES = ["iPhone 6s", "iPad Air"] #4 PLATFORMS = ["iOS"] #5 ARCHIVE_PATH = "archive" #6 PODSPEC_FILE = "ReusableViewExtensions.podspec" #7 end end
- Path to workspace
- Name of test scheme
- Name of framework scheme to build
- Array with devices to run tests on
- The platform for which we will build
- Folder for artifacts
- Podspec needed to publish a new pod version
For now, we will need only the first two. The following five will be used in the next lanes:)
We can save and close
Fastlane_config. Now open
Fastfile. Before we start creating lanes, we need to inform Fastlane about our config file, so modify file content:
Now we are ready for testing! After the import statement, in a new line, add this definition:
platform :ios do desc "Run tests" lane :test do run_tests( workspace: Config::WORKSPACE, devices: Config::TEST_DEVICES, scheme: Config::TEST_SCHEME ) end end
As you can see, running tests with Fastlane is a cakewalk! Now we can use our lane by running
bundle exec fastlane test.
xcframework we will need to add the Fastlane plugin. To do that, open the terminal in the projects root folder and run
bundle exec fastlane add_plugin create_xcframework. When asked to modify the
Gemfile, say yes.
Now we can add a new lane to
default_platform(:ios) import("./Fastlane_config") platform :ios do desc "Run tests" lane :test do run_tests(......) #from last step end desc "Builds xcframework for distribution" lane :build_xcframework do test create_xcframework( workspace: Config::WORKSPACE, scheme: Config::BUILD_SCHEME, product_name: Config::BUILD_SCHEME, destinations: Config::PLATFORMS, xcframework_output_directory: Config::ARCHIVE_PATH ) end end
And building our library for distribution is done in a couple of lines of code! Every time you run
bundle exec fastlane ios build_xcframework, all necessary files and created
xcframework will be created in the
archive folder! Isn't this nice? No bash scripts, manual execution, no room for error or typo :)
You guessed it, Fastlane can distribute pod to trunk!
We will modify the
Fastfile once more:
default_platform(:ios) import("./Fastlane_config") platform :ios do desc "Run tests" lane :test do run_tests(......) #from last step end desc "Builds xcframework for distribution" lane :build_xcframework do test create_xcframework(......) #from last step end desc "Push new version to pod trunk" lane :release_pod do pod_push(path: Config::PODSPEC_FILE) end end
Yes, it is that easy, one line! With
bundle exec fastlane release_pod the new pod version is pushed to the trunk.
Fastlane is a very robust and powerful tool for iOS development and release. It can create frameworks, work with Cocoapods, upload apps to Testflight, automate screenshots, run tests, and many, many more. If you are not using it already I highly recommend giving it a try! Happy automating!