SlideShare una empresa de Scribd logo
1 de 83
Descargar para leer sin conexión
Advanced App
                              Building
                            Tips, Tricks & Lessons Learned




Wednesday, February 6, 13
Jay Graves
                                CTO




Wednesday, February 6, 13
Lots of Apps


Wednesday, February 6, 13
Ship It




Wednesday, February 6, 13
Ship It




Wednesday, February 6, 13
Provisioning Profiles




Wednesday, February 6, 13
Provisioning Profiles
                            How do they work?




Wednesday, February 6, 13
Provisioning Profiles
                            What are they?



                                        SMIME / PKCS#7

                                        Originally designed for email signing & encryption.


Wednesday, February 6, 13
Read a Provisioning Profile
                            vim




Wednesday, February 6, 13
Read a Provisioning Profile
                            openssl

                  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
Important Values
                            application-identifier



                       <key>application-identifier</key>

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




Wednesday, February 6, 13
Important Values
                            Entitlements
                       <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
Important Values
                            ProvisionedDevices



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




Wednesday, February 6, 13
Important Values
                            UUID



                       <key>UUID</key>

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




Wednesday, February 6, 13
Important Values
                            DeveloperCertificates


                       <key>DeveloperCertificates</key>
                       ! <array>
                       ! ! <data>
                       MIIFnDCCBISgAwIBAgIIEIdrqpJlb9MwDQYJKoZIhvcNAQEFBQAwgZYxCzAJ
                       BgNVBAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBs
                       ZSBXb3JsZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBw
                       bGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlv
                       ...




Wednesday, February 6, 13
Important Values
                            DeveloperCertificates


                       -----BEGIN CERTIFICATE-----
                       MIIFnDCCBISgAwIBAgIIEIdrqpJlb9MwDQYJKoZIhvcNAQEFBQAwgZYxCzAJ
                       BgNVBAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBs
                       ZSBXb3JsZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBw
                       bGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlv
                       ...
                       -----END CERTIFICATE-----




Wednesday, February 6, 13
Important Values
                            DeveloperCertificates


                       -----BEGIN CERTIFICATE-----
                       MIIFnDCCBISgAwIBAgIIEIdrqpJlb9MwDQYJKoZIhvcNAQEFBQAwgZYxCzAJ
                       BgNVBAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBs
                       ZSBXb3JsZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBw
                       bGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlv
                       ...
                       -----END CERTIFICATE-----




                                  openssl x509 -text -in cert.pem

Wednesday, February 6, 13
Important Values
                            DeveloperCertificates

                       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
Install a Provisioning Profile




Wednesday, February 6, 13
Install a Provisioning Profile
                            Don’t double click them.




                                                  Not human readable.


Wednesday, February 6, 13
Install a Provisioning Profile
                            Drag them into the Finder




                             ~/Library/MobileDevice/Provisioning Profiles




Wednesday, February 6, 13
Install a Provisioning Profile
                            Drag them into the Finder




Wednesday, February 6, 13
Install a Provisioning Profile
                            Drag them into the Finder




                                                   Much better
Wednesday, February 6, 13
Tools for using Provisioning Profiles
                            Terminal.app




Wednesday, February 6, 13
Tools for using Provisioning Profiles
                            Terminal.app - bash alias



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




Wednesday, February 6, 13
Tools for using Provisioning Profiles
                            Quicklook Plugin




                                        http://www.macmation.com/blog/2011/10/quicklook-plugin-for-mobile-provision-files/

Wednesday, February 6, 13
Tools for using Provisioning Profiles
                            Automator Service




Wednesday, February 6, 13
Tools for using Provisioning Profiles
                            Automator Service




                                                http://cl.ly/MTZb


Wednesday, February 6, 13
Tools for using Provisioning Profiles
                            Automator Service




Wednesday, February 6, 13
Xcode


Wednesday, February 6, 13
Xcode
                            How does it see profiles?




Wednesday, February 6, 13
Xcode
                            How does it see profiles?




                            CODE_SIGN_IDENTITY = "iPhone Developer";


Wednesday, February 6, 13
Xcode
                            How does it see profiles?




                            CODE_SIGN_IDENTITY = "iPhone Developer";
                            PROVISIONING_PROFILE = "";
Wednesday, February 6, 13
Xcode
                            How does it see profiles?




Wednesday, February 6, 13
Xcode
                            How does it see profiles?




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




Wednesday, February 6, 13
Xcode
                            How does it see profiles?




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

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

Wednesday, February 6, 13
Xcode
                            Build error




Wednesday, February 6, 13
Xcode
                            Build error




Wednesday, February 6, 13
Xcode
                            Update the profile.




Wednesday, February 6, 13
Xcode
                            Update the profile.




Wednesday, February 6, 13
Xcode
                            Project Diff




Wednesday, February 6, 13
What does all this mean?




Wednesday, February 6, 13
What does all this mean?
                            •Automatic Profiles
                             •Good if you don’t have multiple projects.
                             •It can select the wrong profile.
                             •Rules on automatic selection are not defined.




Wednesday, February 6, 13
What does all this mean?
                            •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.




Wednesday, February 6, 13
Wednesday, February 6, 13
Wednesday, February 6, 13
Scenario


Wednesday, February 6, 13
Scenario
                            1 Project   2 Builds




Wednesday, February 6, 13
Multiple Build Scenario
                            Possible Solutions




Wednesday, February 6, 13
Multiple Build Scenario
                            Possible Solutions

                            •Add a Duplicate Target




Wednesday, February 6, 13
Multiple Build Scenario
                            Possible Solutions

                            •Add a Duplicate Target
                             •Large project file change




Wednesday, February 6, 13
Multiple Build Scenario
                            Possible Solutions

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




Wednesday, February 6, 13
Multiple Build Scenario
                            Possible Solutions

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




Wednesday, February 6, 13
Multiple Build Scenario
                            Possible Solutions

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




Wednesday, February 6, 13
Multiple Build Scenario
                            Possible Solutions

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

                            • Add a new Configuration




Wednesday, February 6, 13
Multiple Build Scenario
                            Possible Solutions

                            •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




Wednesday, February 6, 13
Multiple Build Scenario
                            Possible Solutions

                            •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




Wednesday, February 6, 13
Multiple Build Scenario
                            Possible Solutions

                            •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



Wednesday, February 6, 13
Multiple Build Scenario
                            A better solution




Wednesday, February 6, 13
Multiple Build Scenario
                            A better solution




                                                .xcconfig file


Wednesday, February 6, 13
Multiple Build Scenario
                            Create a .xcconfig file




Wednesday, February 6, 13
Multiple Build Scenario
                            Create a .xcconfig file



                        CODE_SIGN_IDENTITY = iPhone Distribution: Double Encore

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




Wednesday, February 6, 13
Multiple Build Scenario
                            Build with a .xcconfig file




                                 xcodebuild -xcconfig second_build.xcconfig




Wednesday, February 6, 13
Surprise?




Wednesday, February 6, 13
Surprise?




Wednesday, February 6, 13
Surprise?




Wednesday, February 6, 13
Surprise?




Wednesday, February 6, 13
Surprise?




Wednesday, February 6, 13
OK, OK, Enough with the
                             Provisioning Profiles
                                    already.

Wednesday, February 6, 13
Keychain
                             Access

Wednesday, February 6, 13
Multiple Keychains




Wednesday, February 6, 13
Switch Keychains
                            unlock keychain



              security default-keychain -d user -s /FULLPATH/My.keychain
              security unlock-keychain -p ******* /FULLPATH/My.keychain




Wednesday, February 6, 13
Switch Keychains
                            unlock keychain



                     Error: User interaction is not allowed.




Wednesday, February 6, 13
Switch Keychains
                            unlock keychain




Wednesday, February 6, 13
Wednesday, February 6, 13
OTA Install


Wednesday, February 6, 13
md5
                            checksum




Wednesday, February 6, 13
md5 checksum
                            doesn’t work




Wednesday, February 6, 13
md5 checksum
                            doesn’t work




Wednesday, February 6, 13
Install multiple apps
                            at the same time




Wednesday, February 6, 13
Install multiple apps
                            at the same time




Wednesday, February 6, 13
Install multiple apps
                            at the same time




Wednesday, February 6, 13
Thank You
                            jay@doubleencore.com
                            @skabber




Wednesday, February 6, 13

Más contenido relacionado

Similar a Advanced App Building - Tips, Tricks & Lessons Learned

Provisioning profiles like a Pro
Provisioning profiles like a ProProvisioning profiles like a Pro
Provisioning profiles like a ProJay Graves
 
SQL Server Scheduling Basics
SQL Server Scheduling BasicsSQL Server Scheduling Basics
SQL Server Scheduling BasicsAmit Banerjee
 
Enterprise Maven Repository BOF
Enterprise Maven Repository BOFEnterprise Maven Repository BOF
Enterprise Maven Repository BOFMax Andersen
 
Unleashing the Rails Asset Pipeline
Unleashing the Rails Asset PipelineUnleashing the Rails Asset Pipeline
Unleashing the Rails Asset PipelineKenneth Kalmer
 
Oracle GoldenGate and Baseball - 5 Keys for Moving to the Cloud
Oracle GoldenGate and Baseball - 5 Keys for Moving to the CloudOracle GoldenGate and Baseball - 5 Keys for Moving to the Cloud
Oracle GoldenGate and Baseball - 5 Keys for Moving to the CloudBobby Curtis
 
Engineering culture
Engineering cultureEngineering culture
Engineering culturePamela Fox
 
Open Source Monitoring for Java with JMX and Graphite (GeeCON 2013)
Open Source Monitoring for Java with JMX and Graphite (GeeCON 2013)Open Source Monitoring for Java with JMX and Graphite (GeeCON 2013)
Open Source Monitoring for Java with JMX and Graphite (GeeCON 2013)Cyrille Le Clerc
 
Writing SaltStack Modules - OpenWest 2013
Writing SaltStack Modules - OpenWest 2013Writing SaltStack Modules - OpenWest 2013
Writing SaltStack Modules - OpenWest 2013SaltStack
 
Cassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at Ooyala
Cassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at OoyalaCassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at Ooyala
Cassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at OoyalaDataStax Academy
 
iOSDevCamp 2011 - Getting "Test"-y: Test Driven Development & Automated Deplo...
iOSDevCamp 2011 - Getting "Test"-y: Test Driven Development & Automated Deplo...iOSDevCamp 2011 - Getting "Test"-y: Test Driven Development & Automated Deplo...
iOSDevCamp 2011 - Getting "Test"-y: Test Driven Development & Automated Deplo...Rudy Jahchan
 
Functional Reactive Programming in the Netflix API
Functional Reactive Programming in the Netflix APIFunctional Reactive Programming in the Netflix API
Functional Reactive Programming in the Netflix APIC4Media
 
Front-End Performance Starts On the Server
Front-End Performance Starts On the ServerFront-End Performance Starts On the Server
Front-End Performance Starts On the ServerJon Arne Sæterås
 
Catalyst And Chained
Catalyst And ChainedCatalyst And Chained
Catalyst And ChainedJay Shirley
 
#Interactive Session by Ashwini Lalit, RRR of Test Automation Maintenance" at...
#Interactive Session by Ashwini Lalit, RRR of Test Automation Maintenance" at...#Interactive Session by Ashwini Lalit, RRR of Test Automation Maintenance" at...
#Interactive Session by Ashwini Lalit, RRR of Test Automation Maintenance" at...Agile Testing Alliance
 
The State of Puppet
The State of PuppetThe State of Puppet
The State of PuppetPuppet
 
Juan Vazquez & Julián Vilas – Tú a Barcelona y yo a Tejas, a patadas con mi S...
Juan Vazquez & Julián Vilas – Tú a Barcelona y yo a Tejas, a patadas con mi S...Juan Vazquez & Julián Vilas – Tú a Barcelona y yo a Tejas, a patadas con mi S...
Juan Vazquez & Julián Vilas – Tú a Barcelona y yo a Tejas, a patadas con mi S...RootedCON
 
Easy logins for Ruby web applications
Easy logins for Ruby web applicationsEasy logins for Ruby web applications
Easy logins for Ruby web applicationsFrancois Marier
 

Similar a Advanced App Building - Tips, Tricks & Lessons Learned (20)

Provisioning profiles like a Pro
Provisioning profiles like a ProProvisioning profiles like a Pro
Provisioning profiles like a Pro
 
SQL Server Scheduling Basics
SQL Server Scheduling BasicsSQL Server Scheduling Basics
SQL Server Scheduling Basics
 
Enterprise Maven Repository BOF
Enterprise Maven Repository BOFEnterprise Maven Repository BOF
Enterprise Maven Repository BOF
 
Unleashing the Rails Asset Pipeline
Unleashing the Rails Asset PipelineUnleashing the Rails Asset Pipeline
Unleashing the Rails Asset Pipeline
 
Oracle GoldenGate and Baseball - 5 Keys for Moving to the Cloud
Oracle GoldenGate and Baseball - 5 Keys for Moving to the CloudOracle GoldenGate and Baseball - 5 Keys for Moving to the Cloud
Oracle GoldenGate and Baseball - 5 Keys for Moving to the Cloud
 
Engineering culture
Engineering cultureEngineering culture
Engineering culture
 
Open Source Monitoring for Java with JMX and Graphite (GeeCON 2013)
Open Source Monitoring for Java with JMX and Graphite (GeeCON 2013)Open Source Monitoring for Java with JMX and Graphite (GeeCON 2013)
Open Source Monitoring for Java with JMX and Graphite (GeeCON 2013)
 
PhpStorm for WordPress
PhpStorm for WordPressPhpStorm for WordPress
PhpStorm for WordPress
 
Writing SaltStack Modules - OpenWest 2013
Writing SaltStack Modules - OpenWest 2013Writing SaltStack Modules - OpenWest 2013
Writing SaltStack Modules - OpenWest 2013
 
Cassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at Ooyala
Cassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at OoyalaCassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at Ooyala
Cassandra Meetup: Real-time Analytics using Cassandra, Spark and Shark at Ooyala
 
4-identifying-problems.pdf
4-identifying-problems.pdf4-identifying-problems.pdf
4-identifying-problems.pdf
 
iOSDevCamp 2011 - Getting "Test"-y: Test Driven Development & Automated Deplo...
iOSDevCamp 2011 - Getting "Test"-y: Test Driven Development & Automated Deplo...iOSDevCamp 2011 - Getting "Test"-y: Test Driven Development & Automated Deplo...
iOSDevCamp 2011 - Getting "Test"-y: Test Driven Development & Automated Deplo...
 
DevOpsDays Openstack Toolchains
DevOpsDays Openstack ToolchainsDevOpsDays Openstack Toolchains
DevOpsDays Openstack Toolchains
 
Functional Reactive Programming in the Netflix API
Functional Reactive Programming in the Netflix APIFunctional Reactive Programming in the Netflix API
Functional Reactive Programming in the Netflix API
 
Front-End Performance Starts On the Server
Front-End Performance Starts On the ServerFront-End Performance Starts On the Server
Front-End Performance Starts On the Server
 
Catalyst And Chained
Catalyst And ChainedCatalyst And Chained
Catalyst And Chained
 
#Interactive Session by Ashwini Lalit, RRR of Test Automation Maintenance" at...
#Interactive Session by Ashwini Lalit, RRR of Test Automation Maintenance" at...#Interactive Session by Ashwini Lalit, RRR of Test Automation Maintenance" at...
#Interactive Session by Ashwini Lalit, RRR of Test Automation Maintenance" at...
 
The State of Puppet
The State of PuppetThe State of Puppet
The State of Puppet
 
Juan Vazquez & Julián Vilas – Tú a Barcelona y yo a Tejas, a patadas con mi S...
Juan Vazquez & Julián Vilas – Tú a Barcelona y yo a Tejas, a patadas con mi S...Juan Vazquez & Julián Vilas – Tú a Barcelona y yo a Tejas, a patadas con mi S...
Juan Vazquez & Julián Vilas – Tú a Barcelona y yo a Tejas, a patadas con mi S...
 
Easy logins for Ruby web applications
Easy logins for Ruby web applicationsEasy logins for Ruby web applications
Easy logins for Ruby web applications
 

Último

Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024The Digital Insurer
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Zilliz
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProduct Anonymous
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 

Último (20)

Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 

Advanced App Building - Tips, Tricks & Lessons Learned

  • 1. Advanced App Building Tips, Tricks & Lessons Learned Wednesday, February 6, 13
  • 2. Jay Graves CTO Wednesday, February 6, 13
  • 3. Lots of Apps Wednesday, February 6, 13
  • 7. Provisioning Profiles How do they work? Wednesday, February 6, 13
  • 8. Provisioning Profiles What are they? SMIME / PKCS#7 Originally designed for email signing & encryption. Wednesday, February 6, 13
  • 9. Read a Provisioning Profile vim Wednesday, February 6, 13
  • 10. Read a Provisioning Profile openssl 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
  • 11. Important Values application-identifier <key>application-identifier</key> <string>ABCDEFGHIJK.com.your.bundleid</string> Wednesday, February 6, 13
  • 12. Important Values Entitlements <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
  • 13. Important Values ProvisionedDevices <key>ProvisionedDevices</key> <array> <string>7af8ee3af8e4e13193bd834bab50e1d...</string> <string>a9f0d0477a6d3e8dad0ff984f7ba77e...</string> </array> Wednesday, February 6, 13
  • 14. Important Values UUID <key>UUID</key> <string>E0EF8ACE-E83A-475C-9DA7-C67A147659FD</ string> Wednesday, February 6, 13
  • 15. Important Values DeveloperCertificates <key>DeveloperCertificates</key> ! <array> ! ! <data> MIIFnDCCBISgAwIBAgIIEIdrqpJlb9MwDQYJKoZIhvcNAQEFBQAwgZYxCzAJ BgNVBAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBs ZSBXb3JsZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBw bGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlv ... Wednesday, February 6, 13
  • 16. Important Values DeveloperCertificates -----BEGIN CERTIFICATE----- MIIFnDCCBISgAwIBAgIIEIdrqpJlb9MwDQYJKoZIhvcNAQEFBQAwgZYxCzAJ BgNVBAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBs ZSBXb3JsZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBw bGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlv ... -----END CERTIFICATE----- Wednesday, February 6, 13
  • 17. Important Values DeveloperCertificates -----BEGIN CERTIFICATE----- MIIFnDCCBISgAwIBAgIIEIdrqpJlb9MwDQYJKoZIhvcNAQEFBQAwgZYxCzAJ BgNVBAYTAlVTMRMwEQYDVQQKDApBcHBsZSBJbmMuMSwwKgYDVQQLDCNBcHBs ZSBXb3JsZHdpZGUgRGV2ZWxvcGVyIFJlbGF0aW9uczFEMEIGA1UEAww7QXBw bGUgV29ybGR3aWRlIERldmVsb3BlciBSZWxhdGlvbnMgQ2VydGlmaWNhdGlv ... -----END CERTIFICATE----- openssl x509 -text -in cert.pem Wednesday, February 6, 13
  • 18. Important Values DeveloperCertificates 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
  • 19. Install a Provisioning Profile Wednesday, February 6, 13
  • 20. Install a Provisioning Profile Don’t double click them. Not human readable. Wednesday, February 6, 13
  • 21. Install a Provisioning Profile Drag them into the Finder ~/Library/MobileDevice/Provisioning Profiles Wednesday, February 6, 13
  • 22. Install a Provisioning Profile Drag them into the Finder Wednesday, February 6, 13
  • 23. Install a Provisioning Profile Drag them into the Finder Much better Wednesday, February 6, 13
  • 24. Tools for using Provisioning Profiles Terminal.app Wednesday, February 6, 13
  • 25. Tools for using Provisioning Profiles Terminal.app - bash alias alias prov='openssl smime -inform der -verify -in' Wednesday, February 6, 13
  • 26. Tools for using Provisioning Profiles Quicklook Plugin http://www.macmation.com/blog/2011/10/quicklook-plugin-for-mobile-provision-files/ Wednesday, February 6, 13
  • 27. Tools for using Provisioning Profiles Automator Service Wednesday, February 6, 13
  • 28. Tools for using Provisioning Profiles Automator Service http://cl.ly/MTZb Wednesday, February 6, 13
  • 29. Tools for using Provisioning Profiles Automator Service Wednesday, February 6, 13
  • 31. Xcode How does it see profiles? Wednesday, February 6, 13
  • 32. Xcode How does it see profiles? CODE_SIGN_IDENTITY = "iPhone Developer"; Wednesday, February 6, 13
  • 33. Xcode How does it see profiles? CODE_SIGN_IDENTITY = "iPhone Developer"; PROVISIONING_PROFILE = ""; Wednesday, February 6, 13
  • 34. Xcode How does it see profiles? Wednesday, February 6, 13
  • 35. Xcode How does it see profiles? CODE_SIGN_IDENTITY = "iPhone Developer: Jay Graves (E6L876QFM6)"; Wednesday, February 6, 13
  • 36. Xcode How does it see profiles? CODE_SIGN_IDENTITY = "iPhone Developer: Jay Graves (E6L876QFM6)"; PROVISIONING_PROFILE = "0FEB5831-22D3-4B1D-A973-59ED243E8103"; Wednesday, February 6, 13
  • 37. Xcode Build error Wednesday, February 6, 13
  • 38. Xcode Build error Wednesday, February 6, 13
  • 39. Xcode Update the profile. Wednesday, February 6, 13
  • 40. Xcode Update the profile. Wednesday, February 6, 13
  • 41. Xcode Project Diff Wednesday, February 6, 13
  • 42. What does all this mean? Wednesday, February 6, 13
  • 43. What does all this mean? •Automatic Profiles •Good if you don’t have multiple projects. •It can select the wrong profile. •Rules on automatic selection are not defined. Wednesday, February 6, 13
  • 44. What does all this mean? •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. Wednesday, February 6, 13
  • 48. Scenario 1 Project 2 Builds Wednesday, February 6, 13
  • 49. Multiple Build Scenario Possible Solutions Wednesday, February 6, 13
  • 50. Multiple Build Scenario Possible Solutions •Add a Duplicate Target Wednesday, February 6, 13
  • 51. Multiple Build Scenario Possible Solutions •Add a Duplicate Target •Large project file change Wednesday, February 6, 13
  • 52. Multiple Build Scenario Possible Solutions •Add a Duplicate Target •Large project file change •Duplicated all of the Configurations Wednesday, February 6, 13
  • 53. Multiple Build Scenario Possible Solutions •Add a Duplicate Target •Large project file change •Duplicated all of the Configurations •A 2nd info.plist has been created. Wednesday, February 6, 13
  • 54. Multiple Build Scenario Possible Solutions •Add a Duplicate Target •Large project file change •Duplicated all of the Configurations •A 2nd info.plist has been created. Wednesday, February 6, 13
  • 55. Multiple Build Scenario Possible Solutions •Add a Duplicate Target •Large project file change •Duplicated all of the Configurations •A 2nd info.plist has been created. • Add a new Configuration Wednesday, February 6, 13
  • 56. Multiple Build Scenario Possible Solutions •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 Wednesday, February 6, 13
  • 57. Multiple Build Scenario Possible Solutions •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 Wednesday, February 6, 13
  • 58. Multiple Build Scenario Possible Solutions •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 Wednesday, February 6, 13
  • 59. Multiple Build Scenario A better solution Wednesday, February 6, 13
  • 60. Multiple Build Scenario A better solution .xcconfig file Wednesday, February 6, 13
  • 61. Multiple Build Scenario Create a .xcconfig file Wednesday, February 6, 13
  • 62. Multiple Build Scenario Create a .xcconfig file CODE_SIGN_IDENTITY = iPhone Distribution: Double Encore PROVISIONING_PROFILE = 1203C18-8F08-45D8-A5AC-76AD9319CDDC Wednesday, February 6, 13
  • 63. Multiple Build Scenario Build with a .xcconfig file xcodebuild -xcconfig second_build.xcconfig Wednesday, February 6, 13
  • 69. OK, OK, Enough with the Provisioning Profiles already. Wednesday, February 6, 13
  • 70. Keychain Access Wednesday, February 6, 13
  • 72. Switch Keychains unlock keychain security default-keychain -d user -s /FULLPATH/My.keychain security unlock-keychain -p ******* /FULLPATH/My.keychain Wednesday, February 6, 13
  • 73. Switch Keychains unlock keychain Error: User interaction is not allowed. Wednesday, February 6, 13
  • 74. Switch Keychains unlock keychain Wednesday, February 6, 13
  • 77. md5 checksum Wednesday, February 6, 13
  • 78. md5 checksum doesn’t work Wednesday, February 6, 13
  • 79. md5 checksum doesn’t work Wednesday, February 6, 13
  • 80. Install multiple apps at the same time Wednesday, February 6, 13
  • 81. Install multiple apps at the same time Wednesday, February 6, 13
  • 82. Install multiple apps at the same time Wednesday, February 6, 13
  • 83. Thank You jay@doubleencore.com @skabber Wednesday, February 6, 13