A Step by Step Guide On XCFramework and Swift Package
A Step by Step Guide On XCFramework and Swift Package
✕
Become an iOS developer in 30 days
Powered by RightMessage
IOS
In WWDC 2019, Apple announced a brand new feature for Xcode 11; the
came to its end. Up until then, a binary framework could be used in one
https://www.appcoda.com/xcframework/ 1/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
All that came to change with the XCFramework format, since it’s a type
working on Simulator, another one for macOS, one more for watchOS,
However, all that is news from last year. This year, in WWDC 2020,
https://www.appcoda.com/xcframework/ 2/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
talked thoroughly about Swift packages in the past in this post, and ✕
you’re promptedBecome
to read itan
if iOS
you developer in so
haven’t done 30already.
days
This post is dedicated to all the above, and to be specific, it has a double
it will give you an overview of how all this works. Finally, keep this help
Having said all the above, let’s have a quick look to what’s coming next,
and then let’s start working our way towards the creation of a
Table of Content
1. An Overview Of What’s Coming Up
2. Creating The Two Binary Frameworks
https://www.appcoda.com/xcframework/ 3/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
One could say that this tutorial is composed by two parts. The first one
from scratch with two other frameworks that offer similar features for
both iOS and macOS platforms, and we’ll use Terminal (extensively in
to perform other command line based tasks. The final goal here is to
The second part of the tutorial focuses on how to use the XCFramework
that we’ll produce in the first step along with Swift packages. In fact,
we’ll meet two different variations of that; in the first one, we’ll see
https://www.appcoda.com/xcframework/ 4/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
to make both of them reside remotely, with the binary framework and
the package being stored in different locations but still being possible to
Even though we’ll create various projects in Xcode in order to create the
we’ll use to try everything on can be downloaded from here. What you’ll
find in that starter pack is two projects, one for iOS and one for macOS,
with a counterpart XIB file. In the next part you’re going to understand
what these views are all about, and what we want to achieve with them.
For now download that starter material, take a quick look if you want,
previous part from scratch. One for the iOS platform, and one for
macOS. We’ll add similar source code to both of them that will be
be no more than just loading a view’s contents from a XIB file. That
topic of this post, and it has the least importance in the overall process.
https://www.appcoda.com/xcframework/ 5/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
the view object using XIBLoadable to its parent view by setting the
identical for both platforms. The best thing above all is that the same
Before we begin, you are advised to store both framework projects we’re
just about to create in the same subfolder. This will help you get along
smoothly later with the commands that we’ll need to write on Terminal.
With that said, it’s about time to bring the iOS based framework to life.
In Xcode, go to the File > New > Project… menu in order to start a new
project. Choose the iOS platform, and the Framework template in the
https://www.appcoda.com/xcframework/ 6/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
✕
Become an iOS developer in 30 days
Powered by RightMessage
In the next step name the framework as XIBLoadable-iOS. We’ll call the
https://www.appcoda.com/xcframework/ 7/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
Finally, find a proper place to save the new project in your disk and get ✕
Become
finished with that anprocess.
creation iOS developer in 30 days
Right after the project gets ready and lies just in front of your eyes,
the iOS platform. We need a source file in order to add the XIBLoadable
protocol implementation.
It doesn’t really matter how that file will be named. For convenience
though, let’s give it the name of the protocol we’ll implement right
next; XIBLoadable.
Once the new file is created, start by replacing the existing import
https://www.appcoda.com/xcframework/ 8/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
import UIKit ✕
Become an iOS developer in 30 days
Next, let’s define the protocol along with the two required methods:
Powered by RightMessage
any other module that will be using it (such as the demo project you
Note: Want to know more about access levels in Swift? Take a look at
this tutorial.
The Self: UIView condition limits the use of the protocol methods to
https://www.appcoda.com/xcframework/ 9/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
Powered by RightMessage
@discardableResult
public func load(from xibName: String) -> Bool {
guard let xibContents = Bundle.main.loadNibNamed(x
let view = xibContents.first as? UIView
else { return false }
self.addSubview(view)
view.translatesAutoresizingMaskIntoConstraints = f
view.leadingAnchor.constraint(equalTo: self.leadin
view.trailingAnchor.constraint(equalTo: self.trail
view.topAnchor.constraint(equalTo: self.topAnchor
view.bottomAnchor.constraint(equalTo: self.bottomA
return true
}
Describing the above shortly, the method first tries to load the contents
of the XIB file given as an argument. If for some reason that fails, it
returns false. Otherwise, is adds the top level view loaded from the XIB
protocol, and sets the necessary auto layout constraints. It’s marked
https://www.appcoda.com/xcframework/ 10/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
✕
public func add(toanview:
Become UIView) {in 30 days
iOS developer
view.addSubview(self)
self.translatesAutoresizingMaskIntoConstraints = f
self.leadingAnchor.constraint(equalTo: view.leadi
self.trailingAnchor.constraint(equalTo: view.trai
self.topAnchor.constraint(equalTo:
Powered by RightMessage view.topAnchor
self.bottomAnchor.constraint(equalTo: view.bottomA
}
This one simply adds the view using the XIBLoadable protocol to the
given view as a subview, and snaps it to all of the parent view edges by
shown above.
framework is now done. With all the above now in place, let’s do the
We’re going to repeat the above steps here in order to create the
So, start with another new project in Xcode, but this time make sure to
choose the macOS platform, and then the Framework template in the
https://www.appcoda.com/xcframework/ 11/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
✕
Become an iOS developer in 30 days
Powered by RightMessage
In the next step fill in the product name field with the XIBLoadable-
macOS value.
https://www.appcoda.com/xcframework/ 12/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
Eventually, save the new project in the disk, in the same subfolder ✕
Become
where you stored an iOS developer
the XIBLoadable-iOS in as
project 30well.
daysDoing so will
better help follow the steps coming up next.
Once again, even though the file name is not important, name it
done.
import AppKit
Let’s add the XIBLoadable protocol definition now, with the exact two
methods as before:
https://www.appcoda.com/xcframework/ 13/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
https://www.appcoda.com/xcframework/ 14/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
@discardableResult ✕
public func load(from
Become xibName:
an iOS String)
developer -> Bool {
in 30 days
var xibObjects: NSArray?
let xibName = NSNib.Name(stringLiteral: xibName)
if viewObjects.count > 0 {
guard let view = viewObjects[0] as? NSView
self.addSubview(view)
view.translatesAutoresizingMaskIntoConstra
view.leadingAnchor.constraint(equalTo: sel
view.trailingAnchor.constraint(equalTo: se
view.topAnchor.constraint(equalTo: self.to
view.bottomAnchor.constraint(equalTo: self
return true
}
}
return false
}
to iOS, but the final result remains the same; this method loads the first
top level view it finds along with its contents in the given XIB file, and
protocol.
Note: To find out more about this method and about how to create
https://www.appcoda.com/xcframework/ 15/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
is that instead of using the UIView class, we’re using the NSView:
Powered by RightMessage
public func add(to view: NSView) {
view.addSubview(self)
self.translatesAutoresizingMaskIntoConstraints = f
self.leadingAnchor.constraint(equalTo: view.leadi
self.trailingAnchor.constraint(equalTo: view.trai
self.topAnchor.constraint(equalTo: view.topAnchor
self.bottomAnchor.constraint(equalTo: view.bottomA
}
framework too. In the next step we’re going to archive both frameworks
using Terminal, and after that we’ll eventually build the single
As just said, the next step in the flow is to archive both frameworks
Xcode. However, we’ll use Terminal for doing that; it’s the
different archives. One that will be working on real iOS devices, and one
https://www.appcoda.com/xcframework/ 16/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
identical in order to create the archives; as you’ll see, there will be only ✕
Become
minor changes that anusiOS
will let developer
generate in 30 days
the Simulator archive.
image shows:
This will open a new Terminal window with the path already specified
https://www.appcoda.com/xcframework/ 17/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
Before archiving the framework, let’s create another folder where we’ll ✕
Become
output the archived an iOS developer
frameworks, in 30
as well as the days
final XCFramework.
Normally that’s not mandatory to do. All new archives are saved in the
educational purpose of the tutorial and the easier usage of the Terminal
commands.
We’ll create that new folder as a subfolder of the one that contains the
mkdir ../output
The “../” points to the parent folder in folders hierarchy, and the
archive meant for actual iOS devices. In the series of options given to
https://www.appcoda.com/xcframework/ 18/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
The path to the folder that the archive will be stored into is
respectively, and it’s really crucial not to skip them. The first
created, while the second one will make all the necessary
can be also set in Xcode, in the Build Settings tab of the project
as expected.
xcodebuild archive \
-scheme XIBLoadable-iOS \
-destination "generic/platform=iOS" \
-archivePath ../output/XIBLoadable-iOS \
SKIP_INSTALL=NO \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
Press the Return key once you type or paste the above in Terminal to
https://www.appcoda.com/xcframework/ 19/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
Now let’s create the archive for the iOS Simulator destination. The
xcodebuild archive \
-scheme XIBLoadable-iOS \
-destination "generic/platform=iOS Simulator" \
-archivePath ../output/XIBLoadable-Sim \
SKIP_INSTALL=NO \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
Let’s do the same for the macOS-based framework. Here we’ll generate
one archive only. First though, let’s change the working folder and let’s
framework:
cd ../XIBLoadable-macOS
https://www.appcoda.com/xcframework/ 20/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
Similarly as before, the following command creates the archive for this ✕
framework. OnceBecome anchange
again, we iOS developer in 30 days
the destination and archive path as
necessary:
Powered by RightMessage
xcodebuild archive \
-scheme XIBLoadable-macOS \
-destination "generic/platform=OS X" \
-archivePath ../output/XIBLoadable-macOS \
SKIP_INSTALL=NO \
BUILD_LIBRARY_FOR_DISTRIBUTION=YES
three archives:
it contains. You can choose any of the three archives we created, right
click on it, and select the Show Package Contents option from the
context menu.
https://www.appcoda.com/xcframework/ 21/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
✕
Become an iOS developer in 30 days
> Library > Frameworks folder. And guess what; a framework is actually
any other normal folder. For example, the following will list the
ls -l ./XIBLoadable-iOS.xcarchive/Products/Library/Fra
The above command assumes that we’re already inside the output
https://www.appcoda.com/xcframework/ 22/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
cd ../output
Powered by RightMessage
above.
With that information in mind, here’s the full command that will create
the XCFramework:
xcodebuild -create-xcframework \
-framework ./XIBLoadable-iOS.xcarchive/Products/Libra
-framework ./XIBLoadable-Sim.xcarchive/Products/Libra
-framework ./XIBLoadable-macOS.xcarchive/Products/Lib
-output ./XIBLoadable.xcframework
https://www.appcoda.com/xcframework/ 23/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
A few moments later after pressing the Return key on the keyboard, the ✕
Become
XCFramework will anin
show up iOS
thedeveloper in 30along
output folder, dayswith the archives
created previously. If you expand or open it, you’ll see that all three
Powered by RightMessage
first goal in this post; to create the XCFramework that contains the
other two frameworks for three different destinations; iOS devices, iOS
package that we’ll use to distribute and share that new framework.
Time to use the starter projects you downloaded earlier. Open the
At first, select the project in the Project navigator, and then open the
General tab. Place Finder next to Xcode, and then drag and drop the
https://www.appcoda.com/xcframework/ 24/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
✕
Become an iOS developer in 30 days
Powered by RightMessage
You’ll notice that a new group called Frameworks has been created in
dragged in it.
Next, press Cmd+B to build the project once, and then open the
the following:
import XIBLoadable_iOS
https://www.appcoda.com/xcframework/ 25/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
Powered by RightMessage
protocol:
The DemoView class has a XIB counterpart file that we want to load
init() {
super.init(frame: .zero)
load(from: "\(Self.self)")
}
https://www.appcoda.com/xcframework/ 26/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
load(from: "DemoView") ✕
Become an iOS developer in 30 days
Powered by RightMessage
Switching to the ViewController.swift file now, let’s go to the
make the initialisation, but we’ll also call the add(to:) protocol’s
method through demoView in order to add that view to the root view of
if demoView == nil {
demoView = DemoView()
demoView?.add(to: self.view)
}
}
The moment of truth has finally come. For starters, let’s run the app in
the Simulator and see if the DemoView contents will appear on screen.
https://www.appcoda.com/xcframework/ 27/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
✕
Become an iOS developer in 30 days
Powered by RightMessage
https://www.appcoda.com/xcframework/ 28/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
✕
Become an iOS developer in 30 days
Powered by RightMessage
Seeing that it’s working in Simulator, let’s run to an actual device to see
if it’ll work there too. And yes, it works on the device as well!
https://www.appcoda.com/xcframework/ 29/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
✕
Become an iOS developer in 30 days
Powered by RightMessage
https://www.appcoda.com/xcframework/ 30/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
Embedded Content section, in the General tab of the project target. After
Then, open the DemoView.swift file, and add the following import
import XIBLoadable_macOS
init() {
super.init(frame: .zero)
load(from: "\(Self.self)")
https://www.appcoda.com/xcframework/ 31/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
} ✕
Become an iOS developer in 30 days
method initialise the demoView object exactly as before, and then add
Powered by RightMessage
it to the root view of the view controller:
if demoView == nil {
demoView = DemoView()
demoView?.add(to: self.view)
}
}
Press Cmd+R to run the app. Here’s what you should see:
https://www.appcoda.com/xcframework/ 32/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
project.
Powered by RightMessage
We’ve already talked about Swift packages a couple of times in the past.
package (which I recommend you to read if you haven’t done so), and
how to reuse SwiftUI views with Swift packages. So here I won’t stick to
the details of making a Swift package, instead I’ll take as granted that
you have a basic knowledge about it. In case you want to make yourself
comfortable with Swift packages, then check out the first link I just
Up until Xcode 12, Swift packages had been useful for distributing and
sharing source code that was visible to everyone. A Swift package was
binary code, but all that have changed with Xcode 12. As of that version,
https://www.appcoda.com/xcframework/ 33/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
Powered by RightMessage
remotely as well. However, it’s also possible to keep and use both the
Swift package and the framework from a local path, and that usually is
that case things are a bit different; the binary framework must be
We’ll start from the second case that was just described above, and we’ll
see how to configure a Swift package that uses the binary framework
from a local path. Before creating the package though, let’s begin from a
output folder. By adding the framework to the package right next, the
entire framework folder will move to the package’s folder and will no
longer exist under its current location. However, I’d like us to have it in
https://www.appcoda.com/xcframework/ 34/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
So, back in Terminal make sure that you’re still in the output folder.
XIBLoadable.xcframework folder:
cp -r XIBLoadable.xcframework XIBLoadablePackage.xcfra
Let’s return to Xcode. Go to the File > New > Swift Package… menu to
Once it’s ready, and before we add the binary framework to it, we can
delete almost all files created by default; we don’t need them, but it’s
okay even if you leave them untouched. I choose to delete them here so
we have a clean package, so select the Tests folder and delete it entirely.
https://www.appcoda.com/xcframework/ 35/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
✕
Become an iOS developer in 30 days
Powered by RightMessage
the output folder in Finder under the Sources folder in Xcode. Then
https://www.appcoda.com/xcframework/ 36/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
✕
Become an iOS developer in 30 days
Powered by RightMessage
Now open the Package.swift file; the package’s manifest file where we’ll
array, and delete all the default content you’ll find there. Then add the
following:
targets: [
.binaryTarget(name: "XIBLoadable", path: "./Source
]
See that the path to the XCFramework is in relation to the root path of
the package.
XIBLoadable as the target name for the library that the package will
produce.
library(
name: "XIBLoadable",
targets: ["XIBLoadable"])
https://www.appcoda.com/xcframework/ 37/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
// swift-tools-version:5.3
// The swift-tools-version declares the minimum versio
Powered by RightMessage
import PackageDescription
time close the XIBLoadableLocal Swift package. Select the project name
item from the Project navigator, under the Frameworks group. When
https://www.appcoda.com/xcframework/ 38/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
Powered by RightMessage
Once you do all that, place Finder and Xcode one next to another, and
drag and drop the XIBLoadableLocal package folder onto the Project
navigator.
Then, in the General tab again press the plus button in the Frameworks,
Libraries, and Embedded Content section, and in the sheet that appears
https://www.appcoda.com/xcframework/ 39/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
✕
Become an iOS developer in 30 days
Powered by RightMessage
Without making any other change, either build the project to ensure
managed to use the local Swift package as a dependency with the binary
Feel free to follow the same steps as above and use the Swift package in
https://www.appcoda.com/xcframework/ 40/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
As I’ve already said, the Swift package and the binary framework don’t
Let’s see that case, so let’s work our way towards that direction. After
company server, but for testing purposes you can even store it to a local
There’s a particularity we have to watch out for here. The remote server
should not contain the framework’s folder as is, but compressed as a zip
later on, don’t use cloud services that they don’t return a share link with
the zip extension at the end of the URL. That’s why a custom server is
Having said that, bring Terminal in front, and supposing that you’re
still in the output folder type the following command to compress the
https://www.appcoda.com/xcframework/ 41/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
✕
zip -r XIBLoadable.xcframework.zip
Become an iOS developer inXIBLoadable.xcframe
30 days
please follow all steps described there, including the default files clean
XIBLoadable value.
XIBLoadable.
3. The checksum of the framework zip file. Using it, Xcode will
archived file.
change the working directory to the root folder of the Swift package
https://www.appcoda.com/xcframework/ 42/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
(that’s why I advised you earlier to save Swift package along with ✕
Become
output and the other an iOS
folders, developer
so as to make itin 30 here):
easy days
cd ../XIBLoadableRemote
Powered by RightMessage
8580a0031a90739830a613767150ab1a53644f6e745d6d16090429fbc0d7e7a
the server. Do that and come back to keep reading. Don’t forget to have
the URL to the remote location of the archived framework handy when
come back.
Having at this point the remote URL and the checksum available, let’s
head back to Xcode in order to specify what the remote binary target is.
https://www.appcoda.com/xcframework/ 43/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
✕
.binaryTarget(name:
Become an "XIBLoadable",
iOS developer inurl: "https://SERV
30 days
As a reminder, make sure that the above URL ends with the zip
The new Swift package has been configured, so now we’ll push it to a
instead.
process remains the same, and here I’m going to present them really
shortly.
https://www.appcoda.com/xcframework/ 44/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
Powered
4. In the new window thatbyappears,
RightMessage
either select an existing
click Create.
3. In the next window set the version number; 1.0.0 here is okay.
The Swift package now exists remotely on GitHub (or any other service
properly or not.
button, so the Swift package won’t be deleted from the disk too.
dependency to the project. Go to the File > Swift Packages > Add
Package Dependency… menu option, and either choose the new package
it’s fetched.
https://www.appcoda.com/xcframework/ 46/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
Continue to the next steps until the overall process is finished, just ✕
Become
make sure that the an iOSpackage
XIBLoadable developer in 30isdays
product selected in the last
step.
At this point we’re all set, and we can run the app once again to make
sure that it’s working. In case you get any error messages, make sure
Conclusion
Getting to the end of this post, there’s a confession I’d like to make; this
is one of the tutorials that I enjoyed writing the most, as it’s about stuff
that’s not only interesting, but also quite useful. If you ever tried to
https://www.appcoda.com/xcframework/ 47/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
significance of the XCFramework format. But even if you did not, you
that.
And if you’re a Swift package fan like I am, then you have all the reasons
hope you found this post helpful, and that there’s something new you
learnt here today. And with that I leave you, so, take care!
Learn how to
build UI with the
brand new
SwiftUI
framework
Enter your email below and
download the sample book of
Mastering SwiftUI. You will
https://www.appcoda.com/xcframework/ 48/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
[email protected]
Powered by RightMessage
Download eBook
SHARE:
@gabtheodor
Gabriel Theodoropoulos
Gabriel has been a software developer for almost about two decades
and he’s got long experience in programming using various
languages. iOS development is what he’s being doing since 2010. On
top of that, he’s added macOS programming to his repertoire over
the last few years. Using Swift of course! Follow Gabriel at Google+
and Twitter.
https://www.appcoda.com/xcframework/ 49/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
✕
Become an iOS developer in 30 days
RELATED ARTICLES
Powered by RightMessage
IOS
SWIFTUI
IOS
https://www.appcoda.com/xcframework/ 50/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
App
Powered by RightMessage
ALSO ON APPCODA
https://www.appcoda.com/xcframework/ 51/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
Powered by RightMessage
4 Comments
1 Login
LOG IN WITH
Name
Share
M
Mahesh Testing − ⚑
2 months ago
0 0 Reply • Share ›
J
john smith − ⚑
3 years ago
0 0 Reply • Share ›
A
Alex Green
Powered by RightMessage − ⚑
3 years ago
PREVIOUS POST
Introducing SwiftUI TabView and Working with Tab Bar Customization
NEXT POST
Announcing Beginning iOS 14 Programming with Swift
AppCoda is one of the leading iOS programming communities. Our aim is to teach
everyone how to build apps with high quality and easy-to-read tutorials. Learn by
doing is the heart of our learning materials.
MEET APPCODA
https://www.appcoda.com/xcframework/ 53/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
About
Our Team ✕
Write for Us Become an iOS developer in 30 days
Advertise
Powered by RightMessage
OUR BOOKS
Beginning iOS Programming with Swift
Written for beginners without any programming experience.
Supports Xcode 14, Swift 5.7 and iOS 16.
OUR PRODUCTS
RSS App Template OUR
Save you thousands of dollars. Simply plug your own RSS feeds
and turn the Xcode template into a RSS reader or a Blog reader
app.
COURSE
Beginning iOS Programming with Swift
Learn how to code in Swift and build a real world app from
scratch. Now supports Xcode 14, Swift 5.7 and iOS 16.
https://www.appcoda.com/xcframework/ 54/55
8/23/23, 12:51 PM A Step by Step Guide on XCFramework and Swift Package
✕
TWITTER FACEBOOK GITHUB
Become an iOS developer in 30 days
Powered by RightMessage
https://www.appcoda.com/xcframework/ 55/55