SlideShare ist ein Scribd-Unternehmen logo
1 von 22
Downloaden Sie, um offline zu lesen
Nantes
CocoaHeads
@cocoanantes
COCOAHEADS NANTES
▸ MyScript: One year later
▸ UI testing with Push Notifications
▸ L’accessibilité pour les mal-voyants sur iOS 11
▸ 🍺 + 🌯
FÉVRIER 2018
@cocoanantes@iTony_L
MYSCRIPT: ONE YEAR LATER
CALCULATOR 2
💀
Calculator 2
@cocoanantes@iTony_L
MYSCRIPT: ONE YEAR LATER
CALCULATOR 2
@cocoanantes@iTony_L
MYSCRIPT: ONE YEAR LATER
PRE-ORDER: FOR THE DEVELOPER
▸ Very easy with few rules:
▸ Like a normal submission
▸ Max 90 days
▸ As many updates you want
▸ Limitations:
▸ Only for the first version
▸ No info except the number of pre-orders
@cocoanantes@iTony_L
MYSCRIPT: ONE YEAR LATER
PRE-ORDER: FOR THE USER
▸ The app is next to the other apps
▸ Can see descriptions, videos and screenshots
▸ Can cancel at any moment
▸ Will be charged when the app will be available
@cocoanantes@iTony_L
MYSCRIPT: ONE YEAR LATER
FASTLANE (VIVIEN CORMIER, MARS 2017)
▸ Before:
Build Test
Build Test
Build Test
.ipa
.ipa
.ipa
✅
✅
… …
⛔
App Store
1. A developer did a
checkout of this
commit
2. Modied the
build number
3. Did an archive
and upload via
Xcode 🎉
@cocoanantes@iTony_L
MYSCRIPT: ONE YEAR LATER
FASTLANE (VIVIEN CORMIER, MARS 2017)
▸ After:
Build Test
Build Test
Build Test
.ipa
.ipa
.ipa
✅
✅
… …
⛔
App Store
Pilot 🎉
@cocoanantes@iTony_L
MYSCRIPT: ONE YEAR LATER
Pilot 🎉
@cocoanantes@iTony_L
Or
lane :upload do
pilot(
ipa: “MyApp.ipa",
skip_submission: true,
skip_waiting_for_build_processing: true
)
end
+ $ fastlane itunesConnectFastle
FASTLANE (VIVIEN CORMIER, MARS 2017)
$ fastlane pilot upload -u user@myscript.com -i MyApp.ipa -s -z
MYSCRIPT: ONE YEAR LATER
FASTLANE (VIVIEN CORMIER, MARS 2017)
desc "Build the app-store xcarchive"
lane :buildStore do |options|
gym(
workspace: "UnicornNote/UnicornNote.xcworkspace",
scheme: options[:scheme],
output_directory: './artifact',
output_name: "MyScript_Nebo.ipa",
archive_path: "./artifact/"+options[:scheme],
xcargs: "OTHER_SWIFT_FLAGS='$OTHER_SWIFT_FLAGS -DARCHIVE'",
clean: true
)
end
Fastle
$ fastlane buildStore scheme:${SCHEME}
How we call it
@cocoanantes@iTony_L
MYSCRIPT: ONE YEAR LATER
FASTLANE (VIVIEN CORMIER, MARS 2017)
▸ Now, we use:
▸ gym
▸ sigh
▸ pilot
▸ Next:
▸ deliver
@cocoanantes@iTony_L
MYSCRIPT: ONE YEAR LATER
BUNDLER (JULIEN QUÉRÉ, MAI 2017)
Bundler provides a consistent environment for Ruby projects by tracking and installing the
exact gems and versions that are needed.
Bundler is an exit from dependency hell, and ensures that the gems you need are present in
development, staging, and production. Starting work on a project is as simple as bundle
install.
@cocoanantes@iTony_L
MYSCRIPT: ONE YEAR LATER
BUNDLER (JULIEN QUÉRÉ, MAY 2017)
▸ Before:
'Cocoapods 1.1
(Cocoapods 1.1.1
(Cocoapods 1.2
'Cocoapods 0.9
'Cocoapods 1.3.1
🖥Cocoapods 1.0
@cocoanantes@iTony_L
MYSCRIPT: ONE YEAR LATER
BUNDLER (JULIEN QUÉRÉ, MAY 2017)
▸ Inconvenient:
▸ Podfile.lock
▸ Incompatibility between versions
▸ Workspace integration
▸ CI: Ask to install a specific version on each Mac
@cocoanantes@iTony_L
MYSCRIPT: ONE YEAR LATER
BUNDLER (JULIEN QUÉRÉ, MAI 2017)
▸ After:
source 'https://rubygems.org'
gem 'cocoapods', '1.3.1'
gem 'fastlane', '~> 2', '>= 2.61.0'
'Cocoapods 1.3.1
🖥Cocoapods 1.3.1
@cocoanantes@iTony_L
1. $ gem install bundler
2. Gemle
3. $ bundle install
4. $ bundle exec pod install
MYSCRIPT: ONE YEAR LATER
BUNDLER (JULIEN QUÉRÉ, MAY 2017)
▸ Inconvenients:
▸ Podfile.lock ✅
▸ Incompatibility between versions ✅
▸ Workspace integration ✅
▸ CI: Ask to install a specific version on each Mac ✅
⚠ Everyone can have a different version of bundler
@cocoanantes@iTony_L
MYSCRIPT: ONE YEAR LATER
PROMISEKIT (JULIEN QUÉRÉ, JANUARY 2018)
A promise is an object that represents an asynchronous task.
Pass that object around, and write clean, ordered code; a
logical, simple, modular stream of progression from one
asynchronous task to another.
@cocoanantes@iTony_L
MYSCRIPT: ONE YEAR LATER
PROMISEKIT (JULIEN QUÉRÉ, JANUARY 2018)
APIManager.shared.fetchToken(withLogin: "dh", password: "dd",
completion: { (token, error) in
guard error == nil else {
print("Error:(error!)")
return
}
guard let token = token else {
print("Received empty token ¯_(ツ)_/¯")
return
}
APIManager.shared.fetchUser(withToken: token,
completion:{ (user, error) in
guard error == nil else {
print("Error:(error!)")
return
}
guard var user = user else {
print("Received nil user ¯_(ツ)_/¯")
return
}
APIManager.shared.fetchConversations(forUserWithId: user.identier,
completion: { (conversations, error) in
guard error == nil else {
print("Error:(error!)")
return
}
guard let conversations = conversations else {
print("Received nil conversations ¯_(ツ)_/¯")
return
}
APIManager.shared.fetchFriends(forUserWithId: user.identier,
completion: { (friends, error) in
guard error == nil else {
print("Error:(error!)")
return
}
guard let friends = friends else {
print("Received nil friend list ¯_(ツ)_/¯")
return
}
// Here we have all the friends, conversations and user.
// It's OVER !
// PS: If you can read this, raise your hands :)
})
})
})
})
MYSCRIPT: ONE YEAR LATER
PROMISEKIT (JULIEN QUÉRÉ, JANUARY 2018)
rstly {
APIManager.shared.fetchToken(withLogin: "dh", password: "dd")
}.then { token in
APIManager.shared.fetchUser(withToken: token)
}.then { user -> Promise<([User], [Conversation])> in
self.currentUser = user
let friendsPromise = APIManager.shared.fetchFriends(forUserWithId: user.identier)
let conversationsPromise = APIManager.shared.fetchConversations(forUserWithId: user.identier)
return when(fullled: friendsPromise, conversationsPromise)
}.then { (friends, conversations) -> Void in
print("Hello (self.currentUser!.fullname).")
print("You have (conversations.count) conversations:")
for conversation in conversations {
let friend = friends.rst(where: {$0.identier == conversation.otherPeerId})
print("[(friend?.fullname ?? "Unknow")] (conversation.title)")
}
}.catch { (error) in
print("We have an error, another failed experiment :( (error)")
}
MYSCRIPT: ONE YEAR LATER
PROMISEKIT (JULIEN QUÉRÉ, JANUARY 2018)
▸ We use it for the CloudKit integration in Nebo
▸ What we like:
▸ Very easy to integrate
▸ Code readability
▸ Simplify the workflow
@cocoanantes@iTony_L
MYSCRIPT: ONE YEAR LATER
PROMISEKIT (JULIEN QUÉRÉ, JANUARY 2018)
▸ Problems encountered:
▸ Debugging as Julien said
▸ Progress handler
▸ Promise in Promise
.then { variable -> Promise<TonType> in
if condition {
return otherPromise
} else {
return nil
}
}
Unsupported
@cocoanantes@iTony_L
QUESTIONS ?
Thank you for your attention
@cocoanantes@iTony_L

Weitere ähnliche Inhalte

Ähnlich wie My script - One year of CocoaHeads

Advanced Mac Software Deployment and Configuration: Just Make It Work!
Advanced Mac Software Deployment and Configuration: Just Make It Work!Advanced Mac Software Deployment and Configuration: Just Make It Work!
Advanced Mac Software Deployment and Configuration: Just Make It Work!Timothy Sutton
 
Jose l ugia 6 wunderkinder, momenta
Jose l ugia  6 wunderkinder, momentaJose l ugia  6 wunderkinder, momenta
Jose l ugia 6 wunderkinder, momentaapps4allru
 
Build your cross-platform service in a week with App Engine
Build your cross-platform service in a week with App EngineBuild your cross-platform service in a week with App Engine
Build your cross-platform service in a week with App EngineJl_Ugia
 
Installable web applications
Installable web applicationsInstallable web applications
Installable web applicationsLiveChat
 
APIdays Paris 2018 - Deliver API Updates in Real Time with Mercure.rocks KĂŠvi...
APIdays Paris 2018 - Deliver API Updates in Real Time with Mercure.rocks KĂŠvi...APIdays Paris 2018 - Deliver API Updates in Real Time with Mercure.rocks KĂŠvi...
APIdays Paris 2018 - Deliver API Updates in Real Time with Mercure.rocks KĂŠvi...apidays
 
Odoo development workflow with pip and virtualenv
Odoo development workflow with pip and virtualenvOdoo development workflow with pip and virtualenv
Odoo development workflow with pip and virtualenvacsone
 
Continuous integration by RĂŠmy Virin
Continuous integration by RĂŠmy VirinContinuous integration by RĂŠmy Virin
Continuous integration by RĂŠmy VirinCocoaHeads France
 
Moderne Android Builds mit Gradle
Moderne Android Builds mit GradleModerne Android Builds mit Gradle
Moderne Android Builds mit Gradleinovex GmbH
 
Official "push" and real-time capabilities for Symfony and API Platform (Merc...
Official "push" and real-time capabilities for Symfony and API Platform (Merc...Official "push" and real-time capabilities for Symfony and API Platform (Merc...
Official "push" and real-time capabilities for Symfony and API Platform (Merc...Les-Tilleuls.coop
 
Cloud66 workshop handouts
Cloud66 workshop handoutsCloud66 workshop handouts
Cloud66 workshop handoutsCloud 66
 
Google Glass Mirror API Setup
Google Glass Mirror API SetupGoogle Glass Mirror API Setup
Google Glass Mirror API SetupDiana Michelle
 
Boxen: How to Manage an Army of Laptops and Live to Talk About It
Boxen: How to Manage an Army of Laptops and Live to Talk About ItBoxen: How to Manage an Army of Laptops and Live to Talk About It
Boxen: How to Manage an Army of Laptops and Live to Talk About ItPuppet
 
Intro to Google TV
Intro to Google TVIntro to Google TV
Intro to Google TVGauntFace
 
Everything-as-code – Polyglotte Entwicklung in der Praxis
Everything-as-code – Polyglotte Entwicklung in der PraxisEverything-as-code – Polyglotte Entwicklung in der Praxis
Everything-as-code – Polyglotte Entwicklung in der PraxisQAware GmbH
 
JavaScript on the Desktop
JavaScript on the DesktopJavaScript on the Desktop
JavaScript on the DesktopDomenic Denicola
 
Тестирование мобильных приложений используя облачные сервисы. TestDroid, Test...
Тестирование мобильных приложений используя облачные сервисы. TestDroid, Test...Тестирование мобильных приложений используя облачные сервисы. TestDroid, Test...
Тестирование мобильных приложений используя облачные сервисы. TestDroid, Test...COMAQA.BY
 
Behavioural Driven Development in Zf2
Behavioural Driven Development in Zf2Behavioural Driven Development in Zf2
Behavioural Driven Development in Zf2David Contavalli
 
Open shift
Open shiftOpen shift
Open shiftmarcolof
 

Ähnlich wie My script - One year of CocoaHeads (20)

Advanced Mac Software Deployment and Configuration: Just Make It Work!
Advanced Mac Software Deployment and Configuration: Just Make It Work!Advanced Mac Software Deployment and Configuration: Just Make It Work!
Advanced Mac Software Deployment and Configuration: Just Make It Work!
 
Jose l ugia 6 wunderkinder, momenta
Jose l ugia  6 wunderkinder, momentaJose l ugia  6 wunderkinder, momenta
Jose l ugia 6 wunderkinder, momenta
 
Build your cross-platform service in a week with App Engine
Build your cross-platform service in a week with App EngineBuild your cross-platform service in a week with App Engine
Build your cross-platform service in a week with App Engine
 
Installable web applications
Installable web applicationsInstallable web applications
Installable web applications
 
APIdays Paris 2018 - Deliver API Updates in Real Time with Mercure.rocks KĂŠvi...
APIdays Paris 2018 - Deliver API Updates in Real Time with Mercure.rocks KĂŠvi...APIdays Paris 2018 - Deliver API Updates in Real Time with Mercure.rocks KĂŠvi...
APIdays Paris 2018 - Deliver API Updates in Real Time with Mercure.rocks KĂŠvi...
 
Odoo development workflow with pip and virtualenv
Odoo development workflow with pip and virtualenvOdoo development workflow with pip and virtualenv
Odoo development workflow with pip and virtualenv
 
Continuous integration by RĂŠmy Virin
Continuous integration by RĂŠmy VirinContinuous integration by RĂŠmy Virin
Continuous integration by RĂŠmy Virin
 
JavaScript isn't evil.
JavaScript isn't evil.JavaScript isn't evil.
JavaScript isn't evil.
 
Moderne Android Builds mit Gradle
Moderne Android Builds mit GradleModerne Android Builds mit Gradle
Moderne Android Builds mit Gradle
 
Official "push" and real-time capabilities for Symfony and API Platform (Merc...
Official "push" and real-time capabilities for Symfony and API Platform (Merc...Official "push" and real-time capabilities for Symfony and API Platform (Merc...
Official "push" and real-time capabilities for Symfony and API Platform (Merc...
 
Cloud66 workshop handouts
Cloud66 workshop handoutsCloud66 workshop handouts
Cloud66 workshop handouts
 
Google Glass Mirror API Setup
Google Glass Mirror API SetupGoogle Glass Mirror API Setup
Google Glass Mirror API Setup
 
Meteor
MeteorMeteor
Meteor
 
Boxen: How to Manage an Army of Laptops and Live to Talk About It
Boxen: How to Manage an Army of Laptops and Live to Talk About ItBoxen: How to Manage an Army of Laptops and Live to Talk About It
Boxen: How to Manage an Army of Laptops and Live to Talk About It
 
Intro to Google TV
Intro to Google TVIntro to Google TV
Intro to Google TV
 
Everything-as-code – Polyglotte Entwicklung in der Praxis
Everything-as-code – Polyglotte Entwicklung in der PraxisEverything-as-code – Polyglotte Entwicklung in der Praxis
Everything-as-code – Polyglotte Entwicklung in der Praxis
 
JavaScript on the Desktop
JavaScript on the DesktopJavaScript on the Desktop
JavaScript on the Desktop
 
Тестирование мобильных приложений используя облачные сервисы. TestDroid, Test...
Тестирование мобильных приложений используя облачные сервисы. TestDroid, Test...Тестирование мобильных приложений используя облачные сервисы. TestDroid, Test...
Тестирование мобильных приложений используя облачные сервисы. TestDroid, Test...
 
Behavioural Driven Development in Zf2
Behavioural Driven Development in Zf2Behavioural Driven Development in Zf2
Behavioural Driven Development in Zf2
 
Open shift
Open shiftOpen shift
Open shift
 

Mehr von CocoaHeads France

Mutation testing for a safer Future
Mutation testing for a safer FutureMutation testing for a safer Future
Mutation testing for a safer FutureCocoaHeads France
 
iOS App Group for Debugging
iOS App Group for DebuggingiOS App Group for Debugging
iOS App Group for DebuggingCocoaHeads France
 
Visual accessibility in iOS11
Visual accessibility in iOS11Visual accessibility in iOS11
Visual accessibility in iOS11CocoaHeads France
 
Ui testing dealing with push notifications
Ui testing dealing with push notificationsUi testing dealing with push notifications
Ui testing dealing with push notificationsCocoaHeads France
 
CONTINUOUS DELIVERY WITH FASTLANE
CONTINUOUS DELIVERY WITH FASTLANECONTINUOUS DELIVERY WITH FASTLANE
CONTINUOUS DELIVERY WITH FASTLANECocoaHeads France
 
L'intĂŠgration continue avec Bitrise
L'intĂŠgration continue avec BitriseL'intĂŠgration continue avec Bitrise
L'intĂŠgration continue avec BitriseCocoaHeads France
 
Design like a developer
Design like a developerDesign like a developer
Design like a developerCocoaHeads France
 
Quoi de neuf dans iOS 10.3
Quoi de neuf dans iOS 10.3Quoi de neuf dans iOS 10.3
Quoi de neuf dans iOS 10.3CocoaHeads France
 
PrĂŠsentation de HomeKit
PrĂŠsentation de HomeKitPrĂŠsentation de HomeKit
PrĂŠsentation de HomeKitCocoaHeads France
 
Programme MFI retour d'expĂŠrience
Programme MFI retour d'expĂŠrienceProgramme MFI retour d'expĂŠrience
Programme MFI retour d'expĂŠrienceCocoaHeads France
 
How to communicate with Smart things?
How to communicate with Smart things?How to communicate with Smart things?
How to communicate with Smart things?CocoaHeads France
 
Build a lego app with CocoaPods
Build a lego app with CocoaPodsBuild a lego app with CocoaPods
Build a lego app with CocoaPodsCocoaHeads France
 
Let's migrate to Swift 3.0
Let's migrate to Swift 3.0Let's migrate to Swift 3.0
Let's migrate to Swift 3.0CocoaHeads France
 

Mehr von CocoaHeads France (20)

Mutation testing for a safer Future
Mutation testing for a safer FutureMutation testing for a safer Future
Mutation testing for a safer Future
 
iOS App Group for Debugging
iOS App Group for DebuggingiOS App Group for Debugging
iOS App Group for Debugging
 
Asynchronous swift
Asynchronous swiftAsynchronous swift
Asynchronous swift
 
Visual accessibility in iOS11
Visual accessibility in iOS11Visual accessibility in iOS11
Visual accessibility in iOS11
 
Ui testing dealing with push notifications
Ui testing dealing with push notificationsUi testing dealing with push notifications
Ui testing dealing with push notifications
 
CONTINUOUS DELIVERY WITH FASTLANE
CONTINUOUS DELIVERY WITH FASTLANECONTINUOUS DELIVERY WITH FASTLANE
CONTINUOUS DELIVERY WITH FASTLANE
 
L'intĂŠgration continue avec Bitrise
L'intĂŠgration continue avec BitriseL'intĂŠgration continue avec Bitrise
L'intĂŠgration continue avec Bitrise
 
Super combinators
Super combinatorsSuper combinators
Super combinators
 
Design like a developer
Design like a developerDesign like a developer
Design like a developer
 
Handle the error
Handle the errorHandle the error
Handle the error
 
Quoi de neuf dans iOS 10.3
Quoi de neuf dans iOS 10.3Quoi de neuf dans iOS 10.3
Quoi de neuf dans iOS 10.3
 
IoT Best practices
 IoT Best practices IoT Best practices
IoT Best practices
 
SwiftyGPIO
SwiftyGPIOSwiftyGPIO
SwiftyGPIO
 
PrĂŠsentation de HomeKit
PrĂŠsentation de HomeKitPrĂŠsentation de HomeKit
PrĂŠsentation de HomeKit
 
Programme MFI retour d'expĂŠrience
Programme MFI retour d'expĂŠrienceProgramme MFI retour d'expĂŠrience
Programme MFI retour d'expĂŠrience
 
How to communicate with Smart things?
How to communicate with Smart things?How to communicate with Smart things?
How to communicate with Smart things?
 
Build a lego app with CocoaPods
Build a lego app with CocoaPodsBuild a lego app with CocoaPods
Build a lego app with CocoaPods
 
Let's migrate to Swift 3.0
Let's migrate to Swift 3.0Let's migrate to Swift 3.0
Let's migrate to Swift 3.0
 
Project Entourage
Project EntourageProject Entourage
Project Entourage
 
What's new in iOS9
What's new in iOS9What's new in iOS9
What's new in iOS9
 

KĂźrzlich hochgeladen

Generic or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsGeneric or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsBert Jan Schrijver
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is insideshinachiaurasa2
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Hararemasabamasaba
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...masabamasaba
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park masabamasaba
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfproinshot.com
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionOnePlan Solutions
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024Mind IT Systems
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisamasabamasaba
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...masabamasaba
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...Health
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrainmasabamasaba
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...panagenda
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...SelfMade bd
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastPapp KrisztiĂĄn
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrandmasabamasaba
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfkalichargn70th171
 

KĂźrzlich hochgeladen (20)

Generic or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisionsGeneric or specific? Making sensible software design decisions
Generic or specific? Making sensible software design decisions
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
%+27788225528 love spells in Atlanta Psychic Readings, Attraction spells,Brin...
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
Exploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdfExploring the Best Video Editing App.pdf
Exploring the Best Video Editing App.pdf
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
%+27788225528 love spells in Boston Psychic Readings, Attraction spells,Bring...
 
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
+971565801893>>SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHAB...
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 

My script - One year of CocoaHeads

  • 2. COCOAHEADS NANTES ▸ MyScript: One year later ▸ UI testing with Push Notications ▸ L’accessibilitĂŠ pour les mal-voyants sur iOS 11 ▸ 🍺 + 🌯 FÉVRIER 2018 @cocoanantes@iTony_L
  • 3. MYSCRIPT: ONE YEAR LATER CALCULATOR 2 💀 Calculator 2 @cocoanantes@iTony_L
  • 4. MYSCRIPT: ONE YEAR LATER CALCULATOR 2 @cocoanantes@iTony_L
  • 5. MYSCRIPT: ONE YEAR LATER PRE-ORDER: FOR THE DEVELOPER ▸ Very easy with few rules: ▸ Like a normal submission ▸ Max 90 days ▸ As many updates you want ▸ Limitations: ▸ Only for the rst version ▸ No info except the number of pre-orders @cocoanantes@iTony_L
  • 6. MYSCRIPT: ONE YEAR LATER PRE-ORDER: FOR THE USER ▸ The app is next to the other apps ▸ Can see descriptions, videos and screenshots ▸ Can cancel at any moment ▸ Will be charged when the app will be available @cocoanantes@iTony_L
  • 7. MYSCRIPT: ONE YEAR LATER FASTLANE (VIVIEN CORMIER, MARS 2017) ▸ Before: Build Test Build Test Build Test .ipa .ipa .ipa ✅ ✅ … … ⛔ App Store 1. A developer did a checkout of this commit 2. Modied the build number 3. Did an archive and upload via Xcode 🎉 @cocoanantes@iTony_L
  • 8. MYSCRIPT: ONE YEAR LATER FASTLANE (VIVIEN CORMIER, MARS 2017) ▸ After: Build Test Build Test Build Test .ipa .ipa .ipa ✅ ✅ … … ⛔ App Store Pilot 🎉 @cocoanantes@iTony_L
  • 9. MYSCRIPT: ONE YEAR LATER Pilot 🎉 @cocoanantes@iTony_L Or lane :upload do pilot( ipa: “MyApp.ipa", skip_submission: true, skip_waiting_for_build_processing: true ) end + $ fastlane itunesConnectFastle FASTLANE (VIVIEN CORMIER, MARS 2017) $ fastlane pilot upload -u user@myscript.com -i MyApp.ipa -s -z
  • 10. MYSCRIPT: ONE YEAR LATER FASTLANE (VIVIEN CORMIER, MARS 2017) desc "Build the app-store xcarchive" lane :buildStore do |options| gym( workspace: "UnicornNote/UnicornNote.xcworkspace", scheme: options[:scheme], output_directory: './artifact', output_name: "MyScript_Nebo.ipa", archive_path: "./artifact/"+options[:scheme], xcargs: "OTHER_SWIFT_FLAGS='$OTHER_SWIFT_FLAGS -DARCHIVE'", clean: true ) end Fastle $ fastlane buildStore scheme:${SCHEME} How we call it @cocoanantes@iTony_L
  • 11. MYSCRIPT: ONE YEAR LATER FASTLANE (VIVIEN CORMIER, MARS 2017) ▸ Now, we use: ▸ gym ▸ sigh ▸ pilot ▸ Next: ▸ deliver @cocoanantes@iTony_L
  • 12. MYSCRIPT: ONE YEAR LATER BUNDLER (JULIEN QUÉRÉ, MAI 2017) Bundler provides a consistent environment for Ruby projects by tracking and installing the exact gems and versions that are needed. Bundler is an exit from dependency hell, and ensures that the gems you need are present in development, staging, and production. Starting work on a project is as simple as bundle install. @cocoanantes@iTony_L
  • 13. MYSCRIPT: ONE YEAR LATER BUNDLER (JULIEN QUÉRÉ, MAY 2017) ▸ Before: 'Cocoapods 1.1 (Cocoapods 1.1.1 (Cocoapods 1.2 'Cocoapods 0.9 'Cocoapods 1.3.1 🖥Cocoapods 1.0 @cocoanantes@iTony_L
  • 14. MYSCRIPT: ONE YEAR LATER BUNDLER (JULIEN QUÉRÉ, MAY 2017) ▸ Inconvenient: ▸ Podle.lock ▸ Incompatibility between versions ▸ Workspace integration ▸ CI: Ask to install a specic version on each Mac @cocoanantes@iTony_L
  • 15. MYSCRIPT: ONE YEAR LATER BUNDLER (JULIEN QUÉRÉ, MAI 2017) ▸ After: source 'https://rubygems.org' gem 'cocoapods', '1.3.1' gem 'fastlane', '~> 2', '>= 2.61.0' 'Cocoapods 1.3.1 🖥Cocoapods 1.3.1 @cocoanantes@iTony_L 1. $ gem install bundler 2. Gemle 3. $ bundle install 4. $ bundle exec pod install
  • 16. MYSCRIPT: ONE YEAR LATER BUNDLER (JULIEN QUÉRÉ, MAY 2017) ▸ Inconvenients: ▸ Podle.lock ✅ ▸ Incompatibility between versions ✅ ▸ Workspace integration ✅ ▸ CI: Ask to install a specic version on each Mac ✅ ⚠ Everyone can have a different version of bundler @cocoanantes@iTony_L
  • 17. MYSCRIPT: ONE YEAR LATER PROMISEKIT (JULIEN QUÉRÉ, JANUARY 2018) A promise is an object that represents an asynchronous task. Pass that object around, and write clean, ordered code; a logical, simple, modular stream of progression from one asynchronous task to another. @cocoanantes@iTony_L
  • 18. MYSCRIPT: ONE YEAR LATER PROMISEKIT (JULIEN QUÉRÉ, JANUARY 2018) APIManager.shared.fetchToken(withLogin: "dh", password: "dd", completion: { (token, error) in guard error == nil else { print("Error:(error!)") return } guard let token = token else { print("Received empty token ÂŻ_(ツ)_/ÂŻ") return } APIManager.shared.fetchUser(withToken: token, completion:{ (user, error) in guard error == nil else { print("Error:(error!)") return } guard var user = user else { print("Received nil user ÂŻ_(ツ)_/ÂŻ") return } APIManager.shared.fetchConversations(forUserWithId: user.identier, completion: { (conversations, error) in guard error == nil else { print("Error:(error!)") return } guard let conversations = conversations else { print("Received nil conversations ÂŻ_(ツ)_/ÂŻ") return } APIManager.shared.fetchFriends(forUserWithId: user.identier, completion: { (friends, error) in guard error == nil else { print("Error:(error!)") return } guard let friends = friends else { print("Received nil friend list ÂŻ_(ツ)_/ÂŻ") return } // Here we have all the friends, conversations and user. // It's OVER ! // PS: If you can read this, raise your hands :) }) }) }) })
  • 19. MYSCRIPT: ONE YEAR LATER PROMISEKIT (JULIEN QUÉRÉ, JANUARY 2018) rstly { APIManager.shared.fetchToken(withLogin: "dh", password: "dd") }.then { token in APIManager.shared.fetchUser(withToken: token) }.then { user -> Promise<([User], [Conversation])> in self.currentUser = user let friendsPromise = APIManager.shared.fetchFriends(forUserWithId: user.identier) let conversationsPromise = APIManager.shared.fetchConversations(forUserWithId: user.identier) return when(fullled: friendsPromise, conversationsPromise) }.then { (friends, conversations) -> Void in print("Hello (self.currentUser!.fullname).") print("You have (conversations.count) conversations:") for conversation in conversations { let friend = friends.rst(where: {$0.identier == conversation.otherPeerId}) print("[(friend?.fullname ?? "Unknow")] (conversation.title)") } }.catch { (error) in print("We have an error, another failed experiment :( (error)") }
  • 20. MYSCRIPT: ONE YEAR LATER PROMISEKIT (JULIEN QUÉRÉ, JANUARY 2018) ▸ We use it for the CloudKit integration in Nebo ▸ What we like: ▸ Very easy to integrate ▸ Code readability ▸ Simplify the workflow @cocoanantes@iTony_L
  • 21. MYSCRIPT: ONE YEAR LATER PROMISEKIT (JULIEN QUÉRÉ, JANUARY 2018) ▸ Problems encountered: ▸ Debugging as Julien said ▸ Progress handler ▸ Promise in Promise .then { variable -> Promise<TonType> in if condition { return otherPromise } else { return nil } } Unsupported @cocoanantes@iTony_L
  • 22. QUESTIONS ? Thank you for your attention @cocoanantes@iTony_L