Spaceship

1. Giới thiệu

Chắc hẳn mọi người không chỉ một lần bị gián đoạn công việc vì những thay đổi về web của Apple Dev Portal, ví dụ như không thể tạo app mới hay không thể đưa app lên Beta TestFlight. Với sự ra đời của Spaceship thì những phiền phức trên sẽ được giải quyết.

Spaceship là một thư viện Ruby cho phép tương tác với các webservice của Apple. Với spaceship chúng ta có thể trực tiếp truy cập vào các hàm API chỉ với một HTTP client.

Spaceship sử dụng kết hợp ba loại API được sử dụng bởi Apple Developer Portal và Xcode.

Ưu điểm:

  • Cho kết nối cực nhanh, chỉ cần sử dụng một HTML client.
  • Truy cập hướng đối tượng tới tất cả các tài nguyên
  • Không bị ảnh hưởng bởi các thay đổi trên giao diện web của Dev Portal.
  • Là một công cụ đa năng cho phép truy cập tới các dịch vụ của Apple.
  • Lưu lại script cho các lần sử dụng sau.

2. Cài đặt và sử dụng

Chúng ta có thể cài đặt spaceship bằng lệnh trên Terminal của Mac OS X:

sudo gem install spaceship

Để bắt đầu, chúng ta gõ dòng lệnh sau vào Terminal:

spaceship

3. Apple Developer Portal API

Dưới đây là một số lệnh sử dụng để tương tác với Apple Developer Portal, chi tiết các bạn có thể tham khảo tại đây

Đăng nhập

Chúng ta có hai cách đăng nhập:

  • Dùng lệnh spaceship, sau đó chúng ta phải điền username và password ở lần đăng nhập đầu tiên, các lần đăng nhập sau thì chỉ cần nhập username.
  • Dùng lệnh:
    Spaceship.login("username", "password")

Danh sách các app

Để liệt kê danh sách các app có trong iTunesConnect ta có thể dùng lệnh:

all_apps = Spaceship.app.all

Chú ý: danh sách các app sẽ được lưu vào biến all_apps

Tìm app dựa trên bundle identifier, ví dụ như "com.framgia.example"

app = Spaceship.app.find("com.framgia.example")

Liệt kê tên của toàn bộ app ta có thể dùng lệnh Ruby sau:

Spaceship.app.all.collect do |app|
  app.name
end

App Service

Dùng spaceship ta có thể thay đổi các dịch vụ của app như:

app_group.(on|off)
associated_domains.(on|off)
data_protection.(complete|unless_open|until_first_auth|off)
health_kit.(on|off)
home_kit.(on|off)
wireless_accessory.(on|off)
icloud.(on|off)
cloud_kit.(xcode5_compatible|cloud_kit)
inter_app_audio.(on|off)
passbook.(on|off)
push_notification.(on|off)
vpn_configuration.(on|off)

Ví dụ để enable cloud kit cho app "com.framgia.example" ta có thể chạy 2 lệnh như sau:

app = Spaceship.app.find("com.framgia.example")
app.update_service(Spaceship.app_service.cloud_kit.cloud_kit)

Thiết bị

Liệt kê danh sách các thiết bị đã đăng kí:

all_devices = Spaceship.device.all

Đăng ký mới thiết bị:

Spaceship.device.create!(name: "Private iPhone 6", udid: "5814abb3...")

4. iTunes Connect API

Đăng nhập

Spaceship::Tunes.login("email”, "password")

Ứng dụng

Liệt kê toàn bộ các app:

all_apps = Spaceship::Tunes::Application.all

Tìm app theo bundle identifier:

app = Spaceship::Tunes::Application.find("com.framgia.app")

Tìm app theo Apple ID:

app = Spaceship::Tunes::Application.find(7949…)

Xem các thông tin của app:

app.apple_id
app.name
app.bundle_id

Hiện tên của toàn bộ các app có trong iTunesConnect:

Spaceship::Tunes::Application.all.collect do |app|
    app.name
end

Tạo app mới:

app = Spaceship::Tunes::Application.create!(name: "App Name",
                                primary_language: "English",
                                         version: "1.0",
                                             sku: 123,
                                       bundle_id: "com.framgia.app")

Cập nhật thông tin chung của app:

details = app.details
details.name['en-US'] = "App Name"
details.privacy_url['en-US'] = “http://framgia.com”
details.save!

Cập nhật giá:

version.update_price_tier("3")

Phiên bản

Có tối đa 2 phiên bản cho mỗi app, một phiên bản trên App Store (live version) và phiên bản có thể chỉnh sửa (edit version). Edit version thường là bản chờ cập nhật.

Ta có thể truy cập 2 phiên bản như sau:

app.live_version
app.edit_version

Ví dụ thay đổi thông tin của edit version:

v = app.edit_version

Cập nhật copyright:

v.copyright = "#{Time.now.year} Framgia”

Cập nhật mô tả theo ngôn ngữ:

v.description["en-US"] = "App Description"

Cập nhật xếp hạng theo độ tuổi:

v.set_rating({
  'CARTOON_FANTASY_VIOLENCE' => 0,
  'MATURE_SUGGESTIVE' => 2,
  'UNRESTRICTED_WEB_ACCESS' => 0
})

Lưu thay đổi:

v.save!

Đăng ký review:

version = app.edit_version
builds = version.candidate_builds
version.select_build(builds.first)
version.save!

Build Train (Test Flight)

Build train được sử dụng để đưa app lên Test Flight. Một build train sẽ bao gồm toàn bộ build tương ứng với một version của app.

Truy cập build train theo version của app:

train = app.build_trains["0.9.21"]

Truy cập build trong build train

Đếm số lượng build:

train.builds.count

Truy cập bản build mới nhất:

build = train.builds.first

Kích hoạt beta testing cho bản build:

train.update_testing_status!(true, 'external')

Submit beta testing:

parameters = {
  changelog: "Awesome new features",
  description: "Why would I want to provide that?",
  feedback_email: "[email protected]",
  marketing_url: "http://marketing.com",
  first_name: "Felix",
  last_name: "Krause",
  review_email: "[email protected]",
  phone_number: "0123456789",
  significant_change: false,

Optional Metadata

  privacy_policy_url: nil,
  review_user_name: nil,
  review_password: nil,
  encryption: false
}
build.submit_for_beta_review!(parameters)

Submit App Store review

submission = app.create_submission

Set app submission information

submission.content_rights_contains_third_party_content = false
submission.content_rights_has_rights = true
submission.add_id_info_uses_idfa = false

Finalize app submission

submission.complete!

Tester

Tìm internal tester theo email:

tester = Spaceship::Tunes::Tester::Internal.find(“email”)

Tìm external tester theo email:

tester = Spaceship::Tunes::Tester::External.find(“email”)

Tạo mới external tester:

Spaceship::Tunes::Tester::External.create!(email: “email”,
                                      first_name: “First Name“,
                                       last_name: “Last Name”)

Thêm toàn bộ external tester vào một ứng dụng:

app.add_all_testers!

5. Ví dụ các bước submit Beta TestFlight

Dưới đây là ví dụ về toàn bộ các bước cần thiết để submit Beta TestFlight, điều kiện là bản build đã được upload lên iTunesConnect thông qua Xcode hay App Loader.

1. Login

Spaceship::Tunes.login("email", "password")

2. All apps

all_apps = Spaceship::Tunes::Application.all

3. Select app

app = Spaceship::Tunes::Application.find(794902327)

4. Build train

train = app.build_trains["0.9.21"]

5. Build

build = train.builds.first

6. External beta review

parameters = {
  changelog: "New features",
  description: "An AR app of MyPrint.",
  feedback_email: "[email protected]",
  marketing_url: "http://www.myprint.co.jp/",
  first_name: "Sa",
  last_name: "Saito",
  review_email: "[email protected]",
  phone_number: "+81 42-337-0712",
  significant_change: false,

Optional Metadata

  privacy_policy_url: nil,
  review_user_name: nil,
  review_password: nil,
  encryption: false
}
build.submit_for_beta_review!(parameters)