Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
What's new in iOS 9
Search
Adrien Humilière
January 12, 2017
Programming
0
270
What's new in iOS 9
Cocoaheads Paris, January 2017
Adrien Humilière
January 12, 2017
Tweet
Share
More Decks by Adrien Humilière
See All by Adrien Humilière
Build an iOS app from an iPad
adhumi
0
24
Something about Xcode ^^
adhumi
0
110
Inside Brut.
adhumi
0
81
Localization done bien
adhumi
1
240
Test and distribute an iOS app with Gitlab CI
adhumi
0
340
Pushing Forward iOS Notifications
adhumi
0
180
Good practices for iOS releases
adhumi
0
200
Rebranding an iOS app
adhumi
0
240
Cocoapods for private libraries
adhumi
0
120
Other Decks in Programming
See All in Programming
自分だけの世界を創るクリエイティブコーディング / Creative Coding: Creating Your Own World
chobishiba
1
160
全方位強化 Python 服務可觀測性:以 FastAPI 和 Grafana Stack 為例
blueswen
1
360
◯◯エンジニアになった理由
gessy0129
PRO
0
590
コードレビューと私の過去と未来
jxmtst
0
170
Go製CLIツールGatling Commanderによる負荷試験実施の自動化
okmtz
3
650
Интеграционное тестирование: как приручить хаос
mariyasaygina
0
480
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
6
220
MLOps in Mercari Group’s Trust and Safety ML Team
cjhj
1
100
Vue :: Better Testing 2024
up1
1
370
RemixとCloudflare Stack におけるFile Upload
ossamoon
1
120
M5Stack に色々な M5ユニットをつないで扱う為の新たなアプローチ
gob
0
200
GraphQLとGigaViewer for Apps
numeroanddev
4
880
Featured
See All Featured
The Language of Interfaces
destraynor
154
24k
Scaling GitHub
holman
458
140k
Build The Right Thing And Hit Your Dates
maggiecrowley
31
2.3k
Into the Great Unknown - MozCon
thekraken
30
1.4k
10 Git Anti Patterns You Should be Aware of
lemiorhan
653
59k
Fireside Chat
paigeccino
32
2.9k
A Modern Web Designer's Workflow
chriscoyier
692
190k
Fashionably flexible responsive web design (full day workshop)
malarkey
403
65k
What the flash - Photography Introduction
edds
67
11k
GraphQLとの向き合い方2022年版
quramy
43
13k
Building Better People: How to give real-time feedback that sticks.
wjessup
360
19k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.2k
Transcript
What’s new in iOS 9 @adhumi, Trainline Cocoaheads Paris, jan.
2017
→
None
None
None
None
What is already used (or could be)
iPad Multitasking / Split screen & slide over Gif animé
de changement de size class
iPad Multitasking / Split screen & slide over Out of
the box ✨ (if you support size classes correctly)
iPad Multitasking / Split screen & slide over <key>UIRequireFullScreen</key> <true/>
Opt-out (info.plist)
Search API Add content to spotlight "
Search API NSUserActivity For current activity indexation (can be public)
var activity = NSUserActivity(activityType: "com.ct.capitainetrain") activity.title = "Paris → Carpentras" activity.userInfo = ["id": "www.trainline.fr/results/paris/carpentras"] activity.isEligibleForSearch = true "
Search API " let attributeSet = CSSearchableItemAttributeSet( itemContentType: kUTTypeData) attributeSet.title
= "Private searchable item" let item = CSSearchableItem(uniqueIdentifier: "AE4F-C8C24D", domainIdentifier: "domain", attributeSet: attributeSet) CSSearchableIndex.default().indexSearchableItems([item], completionHandler: nil) CoreSpotlight For massive and/or private, indexation
App thinning / Bitcode & App Slicing Archive iTunes Connect
App record App Store armv7, arm64 iPhone, iPad screen density
App thinning / Bitcode & App Slicing Default on iOS
(optional) Mandatory on watchOS and tvOS ⚠ Dependencies need to support Bitcode ~20-50% size gain
Keyboard shortcuts
Keyboard shortcuts override var keyCommands: [UIKeyCommand]? { return [UIKeyCommand(input: "\r",
modifierFlags: .command, action: #selector(onCommandEnter(_:)), discoverabilityTitle: "Validate")] } override var keyCommands: [UIKeyCommand]?
3D Touch / Quick Actions
3D Touch / Quick Actions let shortcut = UIApplicationShortcutItem(type: "fr.adhumi.app.message",
localizedTitle: "Send message") UIApplication.shared.shortcutItems = [shortcut] Dynamic Static Compile time Runtime
3D Touch / Peek & Pop func previewingContext(_ previewingContext: UIViewControllerPreviewing,
commit vc: UIViewController) { self.navigationController?.pushViewController(vc, animated: true) } override func viewDidLoad() { self.registerForPreviewing(with: self, sourceView: self.view) } func previewingContext(_ previewingContext: UIViewControllerPreviewing, viewControllerForLocation location: CGPoint) -> UIViewController? { return MyController() }
What’s really new and can be adopted
UIAlertView UIActionSheet ↓ UIAlertController
UIAlertController
UIAlertController self.present(alert, animated: true, completion: nil) let alert = UIAlertController(title:
"Uh oh!", message: "An error occured.", preferredStyle: .alert) let resolve = UIAlertAction(title: "Resolve", style: .destructive) { (action) in // Do stuff } alert.addAction(resolve) let cancel = UIAlertAction(title: "Cancel", style: .cancel) { (action) in // Do stuff } alert.addAction(cancel)
UIWebView WKWebView ↓ SFSafariViewController
SFSafariViewController
SFSafariViewController let url = URL(string: "https://www.trainline.fr") let safari = SFSafariViewController(url:
url!) self.navigationController?.pushViewController(safari, animated: true)
AddressBook.framework ↓ Contacts.framework
Contacts.framework let contacts = CNContactPickerViewController() contacts.delegate = self self.present(contacts, animated:
true, completion: nil) func contactPicker(_ picker: CNContactPickerViewController, didSelect contact: CNContact) { print(contact.givenName) print(contact.emailAddresses) } let firstName: String = ABRecordCopyValue(contact, kABPersonFirstNameProperty).takeRetainedValue()
App thinning / On Demand Resources Xcode project tag-yellow tag-blue
No tag APP
App thinning / On Demand Resources let tags: Set<String> =
["tag-yellow, tag-blue"] let request = NSBundleResourceRequest(tags: tags) request.beginAccessingResources { (error) in if let error = error { print(error) } else { print("Resources available") } }
NSLayoutConstraint(item: view1, attribute: .centerX, relatedBy: .equal, toItem: view2, attribute: .leading,
multiplier: 1, constant: 0) ↓ view1.centerXAnchor.constraint(equalTo: view2.leadingAnchor)
Auto Layout New syntax UILayoutGuide ( empty views) Anchors
Auto Layout UIStackView
Auto Layout
Auto Layout let stackView = UIStackView() stackView.axis = .vertical stackView.distribution
= .equalSpacing stackView.alignment = .center stackView.spacing = 8 stackView.addArrangedSubview(logo) stackView.addArrangedSubview(title)
Split screen Search APIs Bitcode, App Slicing Keyboard shortcuts 3D
Touch (peek/pop & quick actions) Auto Layout UIAlertController SFSafariViewController On Demand Resources Contacts.framework
Thanks! @adhumi, Trainline trainline.fr/jobs