+ All Categories
Home > Technology > Advanced App Building - Tips, Tricks & Lessons Learned

Advanced App Building - Tips, Tricks & Lessons Learned

Date post: 31-Oct-2014
Category:
Upload: jay-graves
View: 9 times
Download: 6 times
Share this document with a friend
Description:
360iDevMin
Popular Tags:
83
Advanced App Building Tips, Tricks & Lessons Learned Wednesday, February 6, 13
Transcript
Page 1: Advanced App Building - Tips, Tricks & Lessons Learned

Advanced App Building

Tips, Tricks & Lessons Learned

Wednesday, February 6, 13

Page 2: Advanced App Building - Tips, Tricks & Lessons Learned

Jay GravesCTO

Wednesday, February 6, 13

Page 3: Advanced App Building - Tips, Tricks & Lessons Learned

Lots of Apps

Wednesday, February 6, 13

Page 4: Advanced App Building - Tips, Tricks & Lessons Learned

Ship It

Wednesday, February 6, 13

Page 5: Advanced App Building - Tips, Tricks & Lessons Learned

Ship It

Wednesday, February 6, 13

Page 6: Advanced App Building - Tips, Tricks & Lessons Learned

Provisioning Profiles

Wednesday, February 6, 13

Page 7: Advanced App Building - Tips, Tricks & Lessons Learned

Provisioning ProfilesHow do they work?

Wednesday, February 6, 13

Page 8: Advanced App Building - Tips, Tricks & Lessons Learned

Provisioning ProfilesWhat are they?

SMIME / PKCS#7

Originally designed for email signing & encryption.

Wednesday, February 6, 13

Page 9: Advanced App Building - Tips, Tricks & Lessons Learned

Read a Provisioning Profilevim

Wednesday, February 6, 13

Page 10: Advanced App Building - Tips, Tricks & Lessons Learned

Read a Provisioning Profileopenssl

openssl smime -in ./your.mobileprovision -inform der -verify

openssl smime -in /path/to/your.mobileprovision -inform der -verify -noverify

https://skabber.snipt.net/provisioning-profile-tips-tricks/

Wednesday, February 6, 13

Page 11: Advanced App Building - Tips, Tricks & Lessons Learned

Important Valuesapplication-identifier

<key>application-identifier</key>

<string>ABCDEFGHIJK.com.your.bundleid</string>

Wednesday, February 6, 13

Page 12: Advanced App Building - Tips, Tricks & Lessons Learned

Important ValuesEntitlements<key>Entitlements</key><dict>...<key>com.apple.developer.ubiquity-container-identifiers</key>...<key>com.apple.developer.ubiquity-kvstore-identifier</key>...<key>get-task-allow</key>...</dict>

Wednesday, February 6, 13

Page 13: Advanced App Building - Tips, Tricks & Lessons Learned

Important ValuesProvisionedDevices

<key>ProvisionedDevices</key><array><string>7af8ee3af8e4e13193bd834bab50e1d...</string> <string>a9f0d0477a6d3e8dad0ff984f7ba77e...</string> </array>

Wednesday, February 6, 13

Page 14: Advanced App Building - Tips, Tricks & Lessons Learned

Important ValuesUUID

<key>UUID</key>

<string>E0EF8ACE-E83A-475C-9DA7-C67A147659FD</string>

Wednesday, February 6, 13

Page 15: Advanced App Building - Tips, Tricks & Lessons Learned

Important ValuesDeveloperCertificates

<key>DeveloperCertificates</key>! <array>! ! <data>MIIFnDCCBISgAwIBAgIIEIdrqpJlb9MwDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNVBAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3JsZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlv...

Wednesday, February 6, 13

Page 16: Advanced App Building - Tips, Tricks & Lessons Learned

Important ValuesDeveloperCertificates

-----BEGIN CERTIFICATE-----MIIFnDCCBISgAwIBAgIIEIdrqpJlb9MwDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNVBAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3JsZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlv...-----END CERTIFICATE-----

Wednesday, February 6, 13

Page 17: Advanced App Building - Tips, Tricks & Lessons Learned

Important ValuesDeveloperCertificates

-----BEGIN CERTIFICATE-----MIIFnDCCBISgAwIBAgIIEIdrqpJlb9MwDQYJKoZIhvcNAQEFBQAwgZYxCzAJBgNVBAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBsZSBXb3JsZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBwbGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlv...-----END CERTIFICATE-----

openssl x509 -text -in cert.pem

Wednesday, February 6, 13

Page 18: Advanced App Building - Tips, Tricks & Lessons Learned

Important ValuesDeveloperCertificates

Certificate: Data: Version: 3 (0x2) Serial Number: 10:87:6b:aa:92:65:6f:d3 Signature Algorithm: sha1WithRSAEncryption Issuer: C=US, O=Apple Inc., OU=Apple Worldwide Developer Relations, CN=Apple Worldwide Developer Relations Certification Authority Validity Not Before: Nov 3 21:38:10 2012 GMT Not After : Nov 3 21:38:10 2013 GMT Subject: UID=9K9F9LCV74, CN=iPhone Distribution: Massively Overrated, OU=9K9F9LCV74, O=Massively Overrated, C=US Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public Key: (2048 bit) Modulus (2048 bit): 00:c8:57:f9:cf:af:c2:4d:7a:8a:16:62:47:4b:c2:

Wednesday, February 6, 13

Page 19: Advanced App Building - Tips, Tricks & Lessons Learned

Install a Provisioning Profile

Wednesday, February 6, 13

Page 20: Advanced App Building - Tips, Tricks & Lessons Learned

Install a Provisioning ProfileDon’t double click them.

Not human readable.

Wednesday, February 6, 13

Page 21: Advanced App Building - Tips, Tricks & Lessons Learned

Install a Provisioning ProfileDrag them into the Finder

~/Library/MobileDevice/Provisioning Profiles

Wednesday, February 6, 13

Page 22: Advanced App Building - Tips, Tricks & Lessons Learned

Install a Provisioning ProfileDrag them into the Finder

Wednesday, February 6, 13

Page 23: Advanced App Building - Tips, Tricks & Lessons Learned

Install a Provisioning ProfileDrag them into the Finder

Much betterWednesday, February 6, 13

Page 24: Advanced App Building - Tips, Tricks & Lessons Learned

Tools for using Provisioning ProfilesTerminal.app

Wednesday, February 6, 13

Page 25: Advanced App Building - Tips, Tricks & Lessons Learned

Tools for using Provisioning ProfilesTerminal.app - bash alias

alias prov='openssl smime -inform der -verify -in'

Wednesday, February 6, 13

Page 27: Advanced App Building - Tips, Tricks & Lessons Learned

Tools for using Provisioning ProfilesAutomator Service

Wednesday, February 6, 13

Page 28: Advanced App Building - Tips, Tricks & Lessons Learned

Tools for using Provisioning ProfilesAutomator Service

http://cl.ly/MTZb

Wednesday, February 6, 13

Page 29: Advanced App Building - Tips, Tricks & Lessons Learned

Tools for using Provisioning ProfilesAutomator Service

Wednesday, February 6, 13

Page 30: Advanced App Building - Tips, Tricks & Lessons Learned

Xcode

Wednesday, February 6, 13

Page 31: Advanced App Building - Tips, Tricks & Lessons Learned

XcodeHow does it see profiles?

Wednesday, February 6, 13

Page 32: Advanced App Building - Tips, Tricks & Lessons Learned

XcodeHow does it see profiles?

CODE_SIGN_IDENTITY = "iPhone Developer";

Wednesday, February 6, 13

Page 33: Advanced App Building - Tips, Tricks & Lessons Learned

XcodeHow does it see profiles?

CODE_SIGN_IDENTITY = "iPhone Developer";PROVISIONING_PROFILE = "";

Wednesday, February 6, 13

Page 34: Advanced App Building - Tips, Tricks & Lessons Learned

XcodeHow does it see profiles?

Wednesday, February 6, 13

Page 35: Advanced App Building - Tips, Tricks & Lessons Learned

XcodeHow does it see profiles?

CODE_SIGN_IDENTITY = "iPhone Developer: Jay Graves (E6L876QFM6)";

Wednesday, February 6, 13

Page 36: Advanced App Building - Tips, Tricks & Lessons Learned

XcodeHow does it see profiles?

CODE_SIGN_IDENTITY = "iPhone Developer: Jay Graves (E6L876QFM6)";

PROVISIONING_PROFILE = "0FEB5831-22D3-4B1D-A973-59ED243E8103";

Wednesday, February 6, 13

Page 37: Advanced App Building - Tips, Tricks & Lessons Learned

XcodeBuild error

Wednesday, February 6, 13

Page 38: Advanced App Building - Tips, Tricks & Lessons Learned

XcodeBuild error

Wednesday, February 6, 13

Page 39: Advanced App Building - Tips, Tricks & Lessons Learned

XcodeUpdate the profile.

Wednesday, February 6, 13

Page 40: Advanced App Building - Tips, Tricks & Lessons Learned

XcodeUpdate the profile.

Wednesday, February 6, 13

Page 41: Advanced App Building - Tips, Tricks & Lessons Learned

XcodeProject Diff

Wednesday, February 6, 13

Page 42: Advanced App Building - Tips, Tricks & Lessons Learned

What does all this mean?

Wednesday, February 6, 13

Page 43: Advanced App Building - Tips, Tricks & Lessons Learned

•Automatic Profiles•Good if you don’t have multiple projects.•It can select the wrong profile.•Rules on automatic selection are not defined.

What does all this mean?

Wednesday, February 6, 13

Page 44: Advanced App Building - Tips, Tricks & Lessons Learned

•Automatic Profiles•Good if you don’t have multiple projects.•It can select the wrong profile.•Rules on automatic selection are not defined.

•Specific Profiles•Much more control over which profile is selected.•Can be a pain to update the project file every time a profile is updated.

What does all this mean?

Wednesday, February 6, 13

Page 45: Advanced App Building - Tips, Tricks & Lessons Learned

Wednesday, February 6, 13

Page 46: Advanced App Building - Tips, Tricks & Lessons Learned

Wednesday, February 6, 13

Page 47: Advanced App Building - Tips, Tricks & Lessons Learned

Scenario

Wednesday, February 6, 13

Page 48: Advanced App Building - Tips, Tricks & Lessons Learned

Scenario1 Project 2 Builds

Wednesday, February 6, 13

Page 49: Advanced App Building - Tips, Tricks & Lessons Learned

Multiple Build ScenarioPossible Solutions

Wednesday, February 6, 13

Page 50: Advanced App Building - Tips, Tricks & Lessons Learned

•Add a Duplicate Target

Multiple Build ScenarioPossible Solutions

Wednesday, February 6, 13

Page 51: Advanced App Building - Tips, Tricks & Lessons Learned

•Add a Duplicate Target•Large project file change

Multiple Build ScenarioPossible Solutions

Wednesday, February 6, 13

Page 52: Advanced App Building - Tips, Tricks & Lessons Learned

•Add a Duplicate Target•Large project file change•Duplicated all of the Configurations

Multiple Build ScenarioPossible Solutions

Wednesday, February 6, 13

Page 53: Advanced App Building - Tips, Tricks & Lessons Learned

•Add a Duplicate Target•Large project file change•Duplicated all of the Configurations•A 2nd info.plist has been created.

Multiple Build ScenarioPossible Solutions

Wednesday, February 6, 13

Page 54: Advanced App Building - Tips, Tricks & Lessons Learned

•Add a Duplicate Target•Large project file change•Duplicated all of the Configurations•A 2nd info.plist has been created.

Multiple Build ScenarioPossible Solutions

Wednesday, February 6, 13

Page 55: Advanced App Building - Tips, Tricks & Lessons Learned

•Add a Duplicate Target•Large project file change•Duplicated all of the Configurations•A 2nd info.plist has been created.

• Add a new Configuration

Multiple Build ScenarioPossible Solutions

Wednesday, February 6, 13

Page 56: Advanced App Building - Tips, Tricks & Lessons Learned

•Add a Duplicate Target•Large project file change•Duplicated all of the Configurations•A 2nd info.plist has been created.

• Add a new Configuration•Still a large project file change

Multiple Build ScenarioPossible Solutions

Wednesday, February 6, 13

Page 57: Advanced App Building - Tips, Tricks & Lessons Learned

•Add a Duplicate Target•Large project file change•Duplicated all of the Configurations•A 2nd info.plist has been created.

• Add a new Configuration•Still a large project file change•Still duplicated all the build options

Multiple Build ScenarioPossible Solutions

Wednesday, February 6, 13

Page 58: Advanced App Building - Tips, Tricks & Lessons Learned

•Add a Duplicate Target•Large project file change•Duplicated all of the Configurations•A 2nd info.plist has been created.

• Add a new Configuration•Still a large project file change•Still duplicated all the build options•Easy to forget new build options

Multiple Build ScenarioPossible Solutions

Wednesday, February 6, 13

Page 59: Advanced App Building - Tips, Tricks & Lessons Learned

Multiple Build ScenarioA better solution

Wednesday, February 6, 13

Page 60: Advanced App Building - Tips, Tricks & Lessons Learned

Multiple Build ScenarioA better solution

.xcconfig file

Wednesday, February 6, 13

Page 61: Advanced App Building - Tips, Tricks & Lessons Learned

Multiple Build ScenarioCreate a .xcconfig file

Wednesday, February 6, 13

Page 62: Advanced App Building - Tips, Tricks & Lessons Learned

Multiple Build ScenarioCreate a .xcconfig file

CODE_SIGN_IDENTITY = iPhone Distribution: Double Encore

PROVISIONING_PROFILE = 1203C18-8F08-45D8-A5AC-76AD9319CDDC

Wednesday, February 6, 13

Page 63: Advanced App Building - Tips, Tricks & Lessons Learned

Multiple Build ScenarioBuild with a .xcconfig file

xcodebuild -xcconfig second_build.xcconfig

Wednesday, February 6, 13

Page 64: Advanced App Building - Tips, Tricks & Lessons Learned

Surprise?

Wednesday, February 6, 13

Page 65: Advanced App Building - Tips, Tricks & Lessons Learned

Surprise?

Wednesday, February 6, 13

Page 66: Advanced App Building - Tips, Tricks & Lessons Learned

Surprise?

Wednesday, February 6, 13

Page 67: Advanced App Building - Tips, Tricks & Lessons Learned

Surprise?

Wednesday, February 6, 13

Page 68: Advanced App Building - Tips, Tricks & Lessons Learned

Surprise?

Wednesday, February 6, 13

Page 69: Advanced App Building - Tips, Tricks & Lessons Learned

OK, OK, Enough with the Provisioning Profiles

already.

Wednesday, February 6, 13

Page 70: Advanced App Building - Tips, Tricks & Lessons Learned

Keychain Access

Wednesday, February 6, 13

Page 71: Advanced App Building - Tips, Tricks & Lessons Learned

Multiple Keychains

Wednesday, February 6, 13

Page 72: Advanced App Building - Tips, Tricks & Lessons Learned

Switch Keychains

security default-keychain -d user -s /FULLPATH/My.keychain

security unlock-keychain -p ******* /FULLPATH/My.keychain

unlock keychain

Wednesday, February 6, 13

Page 73: Advanced App Building - Tips, Tricks & Lessons Learned

Switch Keychains

Error: User interaction is not allowed.

unlock keychain

Wednesday, February 6, 13

Page 74: Advanced App Building - Tips, Tricks & Lessons Learned

Switch Keychainsunlock keychain

Wednesday, February 6, 13

Page 75: Advanced App Building - Tips, Tricks & Lessons Learned

Wednesday, February 6, 13

Page 76: Advanced App Building - Tips, Tricks & Lessons Learned

OTA Install

Wednesday, February 6, 13

Page 77: Advanced App Building - Tips, Tricks & Lessons Learned

md5checksum

Wednesday, February 6, 13

Page 78: Advanced App Building - Tips, Tricks & Lessons Learned

md5 checksumdoesn’t work

Wednesday, February 6, 13

Page 79: Advanced App Building - Tips, Tricks & Lessons Learned

md5 checksumdoesn’t work

Wednesday, February 6, 13

Page 80: Advanced App Building - Tips, Tricks & Lessons Learned

Install multiple appsat the same time

Wednesday, February 6, 13

Page 81: Advanced App Building - Tips, Tricks & Lessons Learned

Install multiple appsat the same time

Wednesday, February 6, 13

Page 82: Advanced App Building - Tips, Tricks & Lessons Learned

Install multiple appsat the same time

Wednesday, February 6, 13

Page 83: Advanced App Building - Tips, Tricks & Lessons Learned

Thank [email protected]@skabber

Wednesday, February 6, 13


Recommended