Skip to content

Instantly share code, notes, and snippets.

Fastlane action app_store_connect_api_key

Key Description Env Var Default
key_id The key ID APP_STORE_CONNECT_API_KEY_KEY_ID
issuer_id The issuer ID APP_STORE_CONNECT_API_KEY_ISSUER_ID
key_filepath The path to the key p8 file APP_STORE_CONNECT_API_KEY_KEY_FILEPATH
key_content The content of the key p8 file APP_STORE_CONNECT_API_KEY_KEY
is_key_content_base64 Whether :key_content is Base64 encoded or not APP_STORE_CONNECT_API_KEY_IS_KEY_CONTENT_BASE64 false
duration The token session duration APP_STORE_CONNECT_API_KEY_DURATION
lane :release do
api_key = app_store_connect_api_key(
key_id: "D383SF739",
issuer_id: "6053b7fe-68a8-4acb-89be-165aa6465141",
key_filepath: "./D383SF739.p8",
duration: 1200, # optional
in_house: false, # optional but may be required if using match/sigh
)
sigh(api_key: api_key)
@tedgonzalez
tedgonzalez / AppStoreConnectRoles.md
Last active January 6, 2024 15:59
Ever since the Apple developer portal and App Store Connect merged, I got confused with the summary. I like knowing the diff between App Store Connect roles. Here's a detailed list of what each role can do:

App Store Connect Roles

Developer Developer with certificates AppManager AppManager with certificates Admin Account Holder
App Features
Upload Builds
Edit App Store Details (Read)
Create Apps and Submit Versions
[
{
"food": {
"date": "2020-01-01",
"restaurantName": "Restaurant",
"totalCost": "8.00",
"orders": [
{
"name": "Pizza",
"cost": "100"
struct PassengerDelivery: Codable, Equatable {
struct CarType: Codable, Equatable {
let name: String
let distanceFare: String
let timeFare: String
}
let carType: CarType
let date: String
let distance: String
let time: String
struct PackageDelivery: Codable, Equatable {
let date: String
let size: String
let totalCost: String
let weight: String
}
enum OrderItem: Decodable, Equatable {
case food(FoodDelivery)
case package(PackageDelivery)
case passenger(PassengerDelivery)
enum CodingKeys: CodingKey, CaseIterable {
case food
case package
case passenger
}
struct GenericOrderItem: Codable {
// common between all the objects
let date: String
let totalCost: String
let carType: PassengerDelivery.CarType?
let restaurantName: String?
let distance: String?
let orders: [FoodDelivery.Order]?
let size: String?
struct FoodDelivery: Codable, Equatable {
struct Order: Codable, Equatable {
let name: String
let cost: String
}
let date: String
let orders: [Order]
let restaurantName: String
let totalCost: String
}
func testDecodingEmptyArraySucceeds() throws {
let givenJsonData = #"""
[]
"""#.data(using: .utf8)!
let result = try decoder.decode([OrderItem].self, from: givenJsonData)
let expected: [OrderItem] = []
XCTAssertEqual(result, expected)
}