mas/mas-cli/AppStore/ISStoreAccount.swift

63 lines
1.9 KiB
Swift
Raw Normal View History

//
// ISStoreAccount.swift
// mas-cli
//
// Created by Andrew Naylor on 22/08/2015.
// Copyright (c) 2015 Andrew Naylor. All rights reserved.
//
extension ISStoreAccount {
static var primaryAccountIsPresentAndSignedIn: Bool {
2016-09-17 12:58:38 +00:00
return CKAccountStore.shared().primaryAccountIsPresentAndSignedIn
}
static var primaryAccount: ISStoreAccount? {
2016-09-17 12:58:38 +00:00
return CKAccountStore.shared().primaryAccount
}
2016-02-14 01:22:33 +00:00
static func signIn(username: String? = nil, password: String? = nil, systemDialog: Bool = false) throws -> ISStoreAccount {
2016-02-14 01:22:33 +00:00
var account: ISStoreAccount? = nil
2016-09-25 21:57:38 +00:00
var error: MASError? = nil
2016-02-14 01:22:33 +00:00
2016-09-17 12:58:38 +00:00
let accountService = ISServiceProxy.genericShared().accountService
2016-02-14 01:22:33 +00:00
let client = ISStoreClient(storeClientType: 0)
accountService.setStoreClient(client)
2016-09-17 12:58:38 +00:00
let context = ISAuthenticationContext(accountID: 0)!
context.appleIDOverride = username
if systemDialog {
context.appleIDOverride = username
} else {
context.demoMode = true
context.demoAccountName = username
context.demoAccountPassword = password
context.demoAutologinMode = true
}
2016-02-14 01:22:33 +00:00
2016-09-17 12:58:38 +00:00
let group = DispatchGroup()
group.enter()
2016-02-14 01:22:33 +00:00
2016-09-17 12:58:38 +00:00
accountService.signIn(with: context) { success, _account, _error in
2016-02-14 01:22:33 +00:00
if success {
account = _account
} else {
2016-09-25 21:57:38 +00:00
error = .signInFailed(error: _error as NSError?)
2016-02-14 01:22:33 +00:00
}
2016-09-17 12:58:38 +00:00
group.leave()
2016-02-14 01:22:33 +00:00
}
if systemDialog {
group.wait()
} else {
let _ = group.wait(timeout: DispatchTime.now() + Double(Int64(UInt64(30) * NSEC_PER_SEC)) / Double(NSEC_PER_SEC))
}
2016-02-14 01:22:33 +00:00
if let account = account {
return account
}
2016-09-25 21:13:23 +00:00
throw error ?? MASError.signInFailed(error: nil)
2016-02-14 01:22:33 +00:00
}
}