Passbook 備忘
Goto Developer Member Center
Adding a Pass Type ID
Registering a Pass Type ID
Enable Passbook in Xcode
Creating a Cert
First Creating a Cert Signing Request
Open Keychain Access
Set Cert Info
Upload CSR file
Download your Cert
Checking PassTypeID
Creating the Pass Package
To find your Team ID
Dir Structure
Edit the pass.json
"passTypeIdentifier" : "pass.com.your.id",
"teamIdentifier" : "RCXXXX77XX",
To Sign and Compress the pass raw data.
signpass -p Pass.raw
Now you can get your Pass.pkpass
file.
Get a pass from server
Synchronous
NSData *passData = [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:PASS_URL]];
NSError *error = nil;
PKPass *pass = [[PKPass alloc] initWithData:passData error:&error];
if(error) {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"OK"otherButtonTitles:nil];
[alertView show];
} else {
PKAddPassesViewController *pkvc = [[PKAddPassesViewController alloc] initWithPass:pass];
pkvc.delegate = self;
[self presentViewController:pkvc
animated:YES
completion:^{
// Do any cleanup here
}
];
}
Asynchronous - NSURLConnection
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:PASS_URL] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:10];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *passData, NSError *err) {
NSError *error = nil;
PKPass *pass = [[PKPass alloc] initWithData:passData error:&error];
if(error) {
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
return;
}
PKAddPassesViewController *pkvc = [[PKAddPassesViewController alloc] initWithPass:pass];
pkvc.delegate = self;
[self presentViewController:pkvc
animated:YES
completion:^{
// Do any cleanup here
}
];
}];
Asynchronous - NSURLSession
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionTask *task = [session dataTaskWithURL:[NSURL URLWithString:PASS_URL] completionHandler:^(NSData *passData, NSURLResponse *response, NSError *err) {
NSError *error = nil;
PKPass *pass = [[PKPass alloc] initWithData:passData error:&error];
if(error) {
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
}
return;
}
PKAddPassesViewController *pkvc = [[PKAddPassesViewController alloc] initWithPass:pass];
pkvc.delegate = self;
[self presentViewController:pkvc
animated:YES
completion:^{
// Do any cleanup here
}
];
}];
[task resume];