Generated Swift code for the App Store Connect API based on the official OpenAPI spec.
What is Bagbutik?
Bag·bu·tik (noun) /ˈb̥a̝w-ˌb̥u-tiːk/ - (Danish) A room behind a store
Bagbutik is two things, a command line tool for generating Swift code, and a library with the generated code for the App Store Connect API. The command line tool decodes the official OpenAPI spec for Apple's App Store Connect API.
While generating the code, the command line tool also downloads the official documentation from Apple's Documentation site for the App Store Connect API and applies it to the generated code, so you can get documentation right in Xcode.
The command line tool is only needed, when Apple publishes a new version of the spec. A GitHub Action automatically checks for new versions of the spec and creates a pull request with the changes.
How to use Bagbutik
Bagbutik uses JSON Web Tokens (JWT) for authorization. You obtain the required keys from your organization's App Store Connect account.
See Creating API Keys for App Store Connect API for how to create your keys.
Here is a basic example for fetching all bundle IDs for iOS apps including related profiles sorted by seed ID and the bundle ID itself descending.
import Bagbutik_Core
import Bagbutik_Provisioning
let service = BagbutikService(jwt: try .init(
keyId: "P9M252746H",
issuerId: "82067982-6b3b-4a48-be4f-5b10b373c5f2",
privateKey: """
-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgevZzL1gdAFr88hb2
OF/2NxApJCzGCEDdfSp6VQO30hyhRANCAAQRWz+jn65BtOMvdyHKcvjBeBSDZH2r
1RTwjmYSi9R/zpBnuQ4EiMnCqfMPWiZqB4QdbAd0E7oH50VpuZ1P087G
-----END PRIVATE KEY-----
"""
))
let response = try await service.request(
.listBundleIdsV1(filters: [.platform([.iOS])],
includes: [.profiles],
sorts: [.seedIdDescending, .idDescending])
)
print(response)
How to get Bagbutik into a project
Bagbutik supports Swift Package Manager and the internal libraries used to generate the code is also managed by it.
The library of generated code actually consists of multiple libraries, to let the consumer only depend on the endpoints needed. So to get Bagbutik, you need to decide which functionality you need.
In your Package.swift
add Bagbutik as a dependency:
dependencies: [
.package(url: "https://github.com/MortenGregersen/Bagbutik", from: "5.0.0"),
Then in targets
add the libraries needed by your target:
targets: [
.target(
name: "Awesome",
dependencies: [
.product(name: "Bagbutik-AppStore", package: "Bagbutik"),
.product(name: "Bagbutik-TestFlight", package: "Bagbutik"),
If all libraries are needed, the umbrella library Bagbutik
can be used:
targets: [
.target(
name: "Awesome",
dependencies: [
.product(name: "Bagbutik", package: "Bagbutik"),
Remember to replace the hyphen with an underscore when importing the libraries.
When importing
Bagbutik-TestFlight
write:
import Bagbutik_TestFlight
Bagbutik-Core
The core library is Bagbutik-Core
which contains the BagbutikService
, the JWT
, protocols and the general generated types like ErrorResponse
and PagingInformation
.
All other libraries depend on Bagbutik-Core
. This is the only library which is documented on Bagbutik.dev, as the other libraries only contain types which are already documented by Apple.
Bagbutik-Models
Because the models from the API are used from many different endpoints, they are all located in Bagbutik-Models
. All libraries with endpoints depend on Bagbutik-Models
.
Bagbutik-<API-Area>
The endpoints of all the areas of the App Store Connect API are located in different libraries with a describing name.
Right now there are 6 libraries with endpoints:
Bagbutik-AppStore
: Manage all aspects of your app, App Clips, in-app purchases, and customer reviews in the App Store.Bagbutik-Provisioning
: Manage the bundle IDs, certificates, devices and provisioning profiles for your app.Bagbutik-Reporting
: Download your sales and financial reports and get power and performance metrics, logs, and signatures.Bagbutik-TestFlight
: Manage your beta testing program, including beta testers and groups, apps, App Clips, and builds.Bagbutik-Users
: Manage users and email invitations to join your App Store Connect team.Bagbutik-XcodeCloud
: Automate reading Xcode Cloud data, managing workflows, and starting builds.