Index
A
- AAA approach
- actions
- adding, to notifications / Adding actions to notifications
- action segues / Implementing navigation with segues
- adaptive layouts
- creating, with Auto Layout / Creating adaptive layouts with Auto Layout
- animation progress
- controlling / Understanding and controlling animation progress
- animations
- refactoring, with UIViewPropertyAnimator / Refactoring existing animations with UIViewPropertyAnimator
- vibrancy, adding / Adding vibrancy to animations
- app
- indexing, through user activity / Indexing your app through user activity
- packaging / Packaging and uploading your app for beta testing
- uploading, for beta testing / Packaging and uploading your app for beta testing
- preparing, for launch / Preparing your app for launch
- app contents
- adding, to Spotlight index / Adding your app contents to the Spotlight index
- Apple Push Notification Service (APNS) / Gaining a deep understanding of notifications
- App Store Connect
- application, adding / Adding your application to App Store Connect
- App Transport Security (ATS) / Understanding App Transport Security
- ARKit
- about / Understanding ARKit
- content, rendering / Understanding how ARKit renders content
- physical environment, tracking / Understanding how ARKit tracks the physical environment
- ARKit app
- image tracking, adding / Adding image tracking
- images, preparing for tracking / Preparing images for tracking
- image-tracking experience, building / Building the image-tracking experience
- content, placing in 3D space / Placing your own content in 3D space
- ARKit Quicklook
- about / Understanding how ARKit renders content
- using / Using ARKit Quicklook
- ARKit Quicklook view controller
- implementing / Implementing the ARKit Quicklook view controller
- associated types
- protocols, improving / Improving your protocols with associated types
- asynchronous code
- writing / Writing asynchronous code
- audio
- playing / Playing audio and video
- audio controls
- implementing / Implementing basic audio controls
- audio player
- creating / Creating an audio player
- time scrubber, implementing / Implementing the time scrubber
- song metadata, displaying / Displaying song metadata
- media, playing in background / Playing media in the background
- augmented reality / Understanding ARKit
- augmented reality apps
- features / Understanding ARKit
- Augmented Reality gallery
- implementing / Implementing an Augmented Reality gallery
- Auto Layout
- adaptive layouts, creating / Creating adaptive layouts with Auto Layout
- with Interface Builder / Auto Layout with Interface Builder
- scroll view, implementing / Implementing a scroll view with Auto Layout
- using, in code / Using Auto Layout in code
- compact size layout, implementing / Implementing the compact size layout
- regular size layout, implementing / Implementing the regular size layout
B
- background fetch
- working / Understanding how background fetch works
- viewing, from distance / Looking at background fetch from a distance
- broad understanding / Looking at background fetch in more depth
- prerequisites, implementing / Implementing the prerequisites for background fetch
C
- calendar-based notification
- scheduling / Scheduling a calendar-based notification
- cells
- reordering, in collection view / Reordering cells in a collection view
- cell selection
- enabling, for collection view / Enabling cell selection for your collection view
- CloudKit
- about / Getting familiar with CloudKit
- adding, to MustC app / Adding CloudKit to your project
- data, storing / Storing and retrieving data with CloudKit, Storing data in CloudKit
- data, retrieving / Storing and retrieving data with CloudKit
- communicating with / Communicating with CloudKit for the first time
- database changes / Listening for changes in the database
- changes, retrieving from / Retrieving changes from CloudKit
- AppDelegate, configuring / Configuring your AppDelegate
- combining, with Core Data / Combining CloudKit and Core Data
- Core Data models, preparing for / Preparing the Core Data models for CloudKit
- Core Data models, sending to / Sending Core Data models to CloudKit
- CloudKit container / Exploring the rest of your container
- CloudKit dashboard
- exploring / Exploring the CloudKit dashboard
- CloudKit data
- importing / Importing CloudKit data
- CloudKit database / Understanding your CloudKit database
- code
- testing / Understanding what it means to test code
- Code Coverage
- about / Gaining insights through code coverage
- enabling / Gaining insights through code coverage
- collection view
- table view, converting to / Converting from a table view to a collection view
- user interactions, implementing for / Implementing user interactions for the collection view
- cell selection, enabling for / Enabling cell selection for your collection view
- cells, reordering in / Reordering cells in a collection view
- long-press handler, refactoring / Refactoring the long-press handler
- reordering method calls, implementing / Implementing the reordering method calls
- data source methods, implementing / Implementing the data source methods
- edit button, adding / Adding the edit button
- concerns
- separating / Properly separating concerns
- content extension
- adding, to app / Adding a content extension to your app
- Continuity / Indexing your app through user activity
- conversations / Understanding sessions, messages, and conversations
- Core Data
- stack / Understanding the Core Data Stack
- adding, to application / Adding Core Data to an existing application
- Core Data database
- data, reading / Reading and writing data in a Core Data database
- data, writing / Reading and writing data in a Core Data database
- data persistence / Understanding data persistence
- models, persisting / Persisting your models
- persistence code, refactoring / Refactoring the persistence code
- data, reading with simple fetch request / Reading data with a simple fetch request
- data, filtering with predicates / Filtering data with predicates
- reacting, to database changes / Reacting to database changes
- NSFetchedResultsController, implementing / Implementing NSFetchedResultsController
- Core Data model
- creating / Creating a Core Data model, Creating the models
- relationships, defining / Defining relationships
- entities, using / Using your entities
- preparing, for CloudKit / Preparing the Core Data models for CloudKit
- sending, to CloudKit / Sending Core Data models to CloudKit
- Core Data objects
- updating, with fetched data / Updating Core Data objects with fetched data
- fetch logic, implementing / Implementing the fetch logic
- movie, updating with popularity rating / Updating a movie with a popularity rating
- multiple threads, visualizing / Visualizing multiple threads
- Core Image
- photos, manipulating / Manipulating photos with Core Image
- CoreML
- about / Understanding machine learning and CoreML, Understanding CoreML
- combining, with computer vision / Combining CoreML and computer vision
- CoreML models
- obtaining / Obtaining CoreML models
- using / Using a CoreML model
- CreateML
- models, training / Training your own models with CreateML
- natural language model, training / Training a natural language model
- Vision model, training / Training a Vision model
- critical notifications / Gaining a deep understanding of notifications
- CSSearchableItem
- indexing with / Indexing with CSSearchableItem
- CSSearchableItemAttributeSet
- information, containing / Containing information in CSSearchableItemAttributeSet
- CSSearchableItem instances
- adding, to search index / Adding CSSearchableItem instances to the search index
- custom collection view cell
- custom layout / Final words on the custom layout
- custom sticker app
- creating / Creating a custom sticker app
- custom summary message
- providing, for notification group / Providing a custom summary message for your notification group
- custom UI
- adding, to Siri / Adding a custom UI to Siri
- custom UICollectionViewLayout
- creating / Creating a custom UICollectionViewLayout
- layout, pre-calculating / Pre-calculating the layout
- collectionViewContentSize, implementing / Implementing collectionViewContentSize
- layoutAttributesForElements, implementing / Implementing layoutAttributesForElements(in:)
- layoutAttributesForItem, implementing / Implementing layoutAttributesForItem(at:)
- shouldInvalidateLayout, implementing / Implementing shouldInvalidateLayout(forBoundsChange:)
- custom layout, assigning to collection view / Assigning a custom layout to your collection view
D
- data
- fetching, from web / Fetching data from the web
- default behavior
- protocols, extending with / Extending your protocols with default behavior
- delegation / Protocols and delegation
- delivered notifications
- managing / Managing pending and delivered notifications
- dispatch queues
- using, in application / Using dispatch queues in your application
- drag and drop
- implementing / Implementing a basic drag and drop functionality
- adding, to plain UIView / Adding drag and drop to a plain UIView
- adding, to UICollectionView / Adding drag and drop to a UICollectionView
- drag and drop experience
- about / Understanding the drag and drop experience
- customizing / Customizing the drag and drop experience
- dynamism
- adding, with UIKit Dynamics / Adding dynamism with UIKit Dynamics
E
- enums / Understanding enums
F
- flexibility
- adding, with generics / Adding flexibility with generics
G
- generics
- flexibility, adding / Adding flexibility with generics
- geofences
- setting up / Setting up geofences
- grouped notifications
- about / Gaining a deep understanding of notifications
- implementing / Implementing grouped notifications
H
- HealthKit
- about / Understanding HealthKit
- data, storing / Storing and retrieving data with HealthKit
- data, retrieving / Storing and retrieving data with HealthKit
- HealthKit Store
- access, requesting to / Requesting access to the HealthKit Store
- Hello-Contacts app
- creating / Setting up the user interface
- user's contacts, fetching / Fetching a user's contacts
- custom UITableViewCell, creating for contact display / Creating a custom UITableViewCell to show contacts
- table-view cell, designing / Designing a table-view cell
- table-view cell subclass, creating / Creating the table-view cell subclass
- contact list, displaying / Displaying the list of contacts
- protocols / Protocols and delegation
- delegation / Protocols and delegation
- conforming, to UITableViewDataSource protocols / Conforming to the UITableViewDataSource and UITableViewDelegate protocols
- conforming, to UITableViewDelegate protocols / Conforming to the UITableViewDataSource and UITableViewDelegate protocols
- users, allowing to remove contacts / Allowing users to delete cells
- navigation, implementing with segues / Implementing navigation with segues
- adaptive layouts, creating with Auto Layout / Creating adaptive layouts with Auto Layout
- image, laying out / Laying out the image and name label
- name label, laying out / Laying out the image and name label
- image, adjusting / Adjusting the image and label for large screens
- labels, adjusting / Adjusting the image and label for large screens
- bottom section, laying out / Laying out the bottom section
- bottom section, adjusting / Adjusting the bottom section for small screens
- data, passing between view controllers / Passing data between view controllers
- data loading, updating / Updating the data loading and model
- model, updating / Updating the data loading and model
- model, passing to details page / Passing the model to the details page
- new outlets, implementing / Implementing the new outlets and displaying data
- data, displaying / Implementing the new outlets and displaying data
- user experience, enhancing with 3D Touch / Enhancing the user experience with 3D Touch
- contact-fetching code, extracting / Extracting the contact-fetching code
- bounce animation, extracting / Extracting the bounce animation
- protocols, adding / Adding protocols for clarity
- ViewEffectAnimatorType protocol, defining / Defining the ViewEffectAnimatorType protocol
- contact-displayable protocol, defining / Defining a contact-displayable protocol
I
- ImageAnalyzer / Implementing an image classifier
- image classifier
- implementing / Implementing an image classifier
- iMessage apps
- about / Understanding iMessage apps
- message types / Understanding iMessage apps
- interactive message / Understanding iMessage apps
- stickers / Understanding iMessage apps, Creating an iMessage sticker pack
- media content / Understanding iMessage apps
- implementing / Implementing custom, interactive iMessage apps
- life cycle / Understanding the iMessage app life cycle
- custom compact view, implementing / Implementing the custom compact view
- expanded view, implementing / Implementing the expanded view
- iMessage sticker pack
- creating / Creating an iMessage sticker pack
- indexing delegate / Registering as an indexing delegate
- indexing methods
- combining, safely / Safely combining indexing methods
- Instrument
- creating / Creating your own Instrument
- signpost logging, adding to app / Adding signpost logging to your app
- Instruments Package
- building / Building an Instruments Package
- creating / Building an Instruments Package
- Instruments suite
- exploring / Exploring the Instruments suite
- integration tests / Integration tests
- intents / Understanding intents
- intents, handling in extension
- about / Handling intents in your extension
- user's input, resolving / Resolving the user's input
- intent status, combining / Confirming the intent status
- desired action, performing / Performing the desired action
- intents extension
- implementing / Implementing an intents extension
- app extensions / Understanding app extensions
- configuring / Configuring your extension
- interactions
- Siri Shortcuts, donating / Donating shortcuts with INinteractions
- iOS
- Today Extension, finding / Finding Today Extensions in iOS
J
- JSON
- in Swift / Working with JSON in Swift
K
- KVO (Key-Value Observing) / Using Operations in your apps
L
- labels
- containing, in stack view / Containing labels in a stack view
- layouts
- improving, with UIStackView / Improving layouts with UIStackView
- local notifications
- about / Gaining a deep understanding of notifications
- creating / Creating local notifications
- location-based notification
- scheduling / Scheduling a location-based notification
- location changes
- subscribing to / Subscribing to location changes
- logic
- testing, with XCTest / Testing logic with XCTest
M
- machine learning / Understanding machine learning and CoreML, Understanding what machine learning is
- machine learning, Apple
- reference / Obtaining CoreML models
- managed object context / Understanding the Core Data Stack
- manual segues / Implementing navigation with segues
- memory leaks
- closing / Closing memory leaks
- about / Understanding what a memory leak is
- discovering / Discovering memory leaks
- avoiding / Discovering memory leaks
- messages
- about / Understanding sessions, messages, and conversations
- composing / Composing a message
- sending / Sending a message
- models
- training, with CreateML / Training your own models with CreateML
- Mojave / Training your own models with CreateML
- Mosaic app / Closing memory leaks
- movie cell
- rating, adding to / Adding the rating to the movie cell
- movie ratings
- changes, observing to / Observing changes to movie ratings
- MovieTrivia app
- code, optimizing for testability / Optimizing code for testability
- question loader / Introducing the question loader
- API responses, mocking / Mocking API responses
- models, using for consistency / Using models for consistency
- accessibility, providing to tests / Making your app accessible to your tests
- UI tests, recording / Recording UI tests
- launch arguments, passing / Passing launch arguments to your app
- UI, updating / Making sure the UI updates as expected
- multiple inheritance / Extending your protocols with default behavior
- MustC app
- background fetch capability, adding / Adding the background fetch capability
- iOS, used for waking up / Asking iOS to wake your app
- movies, updating in background / Updating movies in the background, Updating movies in the background
- data model, updating / Updating the data model
- existing code, refactoring / Refactoring the existing code
- helper struct, preparing / Preparing the helper struct
- movies, updating / Updating the movies
- CloudKit, adding to / Adding CloudKit to your project
N
- natural language model
- training / Training a natural language model
- navigation
- implementing, with segues / Implementing navigation with segues
- neural network / Understanding what machine learning is
- notification contents
- creating / Creating notification contents
- notification extensions
- implementing / Implementing notification extensions
- notification group
- custom summary message, providing for / Providing a custom summary message for your notification group
- notifications
- about / Gaining a deep understanding of notifications
- forms / Gaining a deep understanding of notifications
- scheduling / Scheduling and handling notifications, Scheduling your notification
- handling / Scheduling and handling notifications, Handling notifications
- registering for / Registering for notifications
- push notifications / Creating push notifications
- local notifications / Creating local notifications
- timed notification / Scheduling a timed notification
- calendar-based notification / Scheduling a calendar-based notification
- location-based notification / Scheduling a location-based notification
- handling, in app / Handling notifications in your app
- actions, adding to / Adding actions to notifications
- grouped notifications / Implementing grouped notifications
- grouping, based on thread identifiers / Grouping notifications based on thread identifiers
- NSFetchedResultsController
- implementing / Implementing NSFetchedResultsController
- NSManagedObjectContext
- multiple instances / Understanding the use of multiple instances of NSManagedObjectContext
- NSUserActivity
- Siri Shortcuts, implementing through / Implementing shortcuts through NSUserActivity
O
- objects
- preventing, from using infinite memory / Preventing objects from using infinite memory
- Operations
- reusable tasks, creating / Creating reusable tasks with Operations
- using, in apps / Using Operations in your apps
P
- pending notifications
- managing / Managing pending and delivered notifications
- persistent store / Understanding the Core Data Stack
- persistent store coordinator / Understanding the Core Data Stack
- photos
- manipulating, with Core Image / Manipulating photos with Core Image
- pictures
- plain UIView
- drag and drop, adding / Adding drag and drop to a plain UIView
- predicate / Filtering data with predicates
- protocols
- defining / Defining your own protocols
- extending, with default behavior / Extending your protocols with default behavior
- improving, with associated types / Improving your protocols with associated types
- prototype cell / Designing a table-view cell
- provisional notifications / Gaining a deep understanding of notifications
- push notifications / Gaining a deep understanding of notifications
- creating / Creating push notifications
R
- reference cycles
- avoiding / Avoiding reference cycles
- reference types
- about / Reference types
- versus value types / Comparing value types to reference types
- using / When to use a reference type?
- reusable tasks
- creating, with Operations / Creating reusable tasks with Operations
S
- SceneKit
- exploring / Exploring SceneKit
- SceneKit scene
- creating / Creating a basic SceneKit scene
- scroll view
- implementing, with Auto Layout / Implementing a scroll view with Auto Layout
- searchable item selection
- handling / Handling searchable item selection
- Search Engine Optimization (SEO) / Adding your app contents to the Spotlight index
- segues
- navigation, implementing with / Implementing navigation with segues
- selection segue / Implementing navigation with segues
- server
- preparing, for Universal Links / Preparing your server for Universal Links
- service extension
- adding, to app / Adding a service extension to your app
- sessions / Understanding sessions, messages, and conversations
- Siri
- about / Understanding intents
- domains / Understanding intents
- new vocabularies, teaching at runtime / Teaching Siri new vocabularies at runtime
- custom UI, adding to / Adding a custom UI to Siri
- Siri Shortcuts
- implementing / Implementing Siri Shortcuts
- implementing, through NSUserActivity / Implementing shortcuts through NSUserActivity
- donating, with interactions / Donating shortcuts with INinteractions
- slow code
- discovering / Discovering slow code
- Spotlight
- best practices / Understanding Spotlight best practices and ratings
- ratings / Understanding Spotlight best practices and ratings
- metadata, adding to web links / Adding metadata to your web links
- indexing delegate / Registering as an indexing delegate
- Spotlight index
- app contents, adding to / Adding your app contents to the Spotlight index
- Spotlight search / Understanding Spotlight search
- sprite / Exploring SpriteKit
- SpriteKit
- exploring / Exploring SpriteKit
- SpriteKit scene
- creating / Creating a SpriteKit scene
- stack view
- labels, containing in / Containing labels in a stack view
- stickers
- assets, optimizing for / Optimizing assets for your stickers
- structs / Understanding structs
- support vector machine / Understanding what machine learning is
T
- table view
- converting, to collection view / Converting from a table view to a collection view
- tests
- writing / Determining which tests to write
- unit tests / Unit tests
- integration tests / Integration tests
- isolating / Isolating tests
- test suite
- setting up, with XCTest / Setting up a test suite with XCTest
- test type
- selecting / Choosing the correct test type
- threads / Understanding threads
- timed notification
- scheduling / Scheduling a timed notification
- Today Extension
- anatomy / Understanding the anatomy of a Today Extension
- finding, in iOS / Finding Today Extensions in iOS
- about / Understanding Today Extensions
- adding, to app / Adding a Today Extension to your app
- traits
- checking for / Checking for traits instead of types
- Trekker app
- implementing / Implementing a workout app
- types
- about / Knowing what types are available
- reference types / Reference types
- value types / Value types
- comparing / Understanding differences in types
- differences, in usage / Differences in usage
- differences, in memory allocation / Differences in memory allocation
- usage, deciding / Deciding which type you should use
U
- UICollectionView
- performance / UICollectionView performance
- drag and drop, adding / Adding drag and drop to a UICollectionView
- UICollectionViewFlowLayout / Understanding UICollectionViewFlowLayout and its delegate
- UIDragInteractionDelegate / Understanding UIDragInteractionDelegate
- UIDropInteractionDelegate / Understanding UIDropInteractionDelegate
- UIKit Dynamics
- dynamism, adding / Adding dynamism with UIKit Dynamics
- UIStackView
- layouts, improving / Improving layouts with UIStackView
- UITableView
- about / Under-the-hood performance of UITableView
- performance, improving with prefetching / Improving performance with prefetching
- UITableViewDelegate
- about / UITableViewDelegate and interactions
- responding, to cell-selection / Responding to cell-selection
- cell-deletion, implementing / Implementing cell-deletion
- user, allowing to reorder cells / Allowing the user to reorder cells
- UIViewPropertyAnimator
- animations, refactoring / Refactoring existing animations with UIViewPropertyAnimator
- unit tests / Unit tests
- universal applications
- building / Building universal applications
- Universal Links
- visibility, increasing of app / Increasing your app's visibility with Universal Links
- server, preparing for / Preparing your server for Universal Links
- handling, in app / Handling Universal Links in your app
- URLSession
- basics / Understanding URLSession basics
- user activity
- app, indexing through / Indexing your app through user activity
- user interactions
- implementing, for collection view / Implementing user interactions for the collection view
- user interface
- setting up / Setting up the user interface
- testing, with XCUITest / Testing the user interface with XCUITest
- user location
- requesting / Requesting a user's location
- permission, asking to access location data / Asking for permission to access location data
- obtaining / Obtaining a user's location
V
- value types
- about / Value types
- structs / Understanding structs
- enums / Understanding enums
- versus reference types / Comparing value types to reference types
- using / When to use a value type?
- vibrancy
- adding, to animations / Adding vibrancy to animations
- video
- playing / Playing audio and video
- recording / Recording video and taking pictures, Recording and storing video
- storing / Recording and storing video
- video player
- creating / Creating a simple video player
- view-controller transitions
- customizing / Customizing view-controller transitions
- custom modal presentation transition, implementing / Implementing a custom modal presentation transition
- interactive dismissal transition, making / Making an interactive dismissal transition
- custom UINavigationController transition, implementing / Implementing a custom UINavigationController transition
- Vision framework / Understanding the Vision framework
- Vision model
- training / Training a Vision model
- Visual Format Language (VFL) / Using Auto Layout in code
- vocabularies
- adding, to app / Adding vocabularies to your app
- adding, through .plist file / Adding vocabularies through a .plist file
W
- web
- data, fetching from / Fetching data from the web
- workout app
- implementing / Implementing a workout app
- world tracking / Understanding how ARKit tracks the physical environment
X
- XCTest
- logic, testing / Testing logic with XCTest
- test suite, setting up / Setting up a test suite with XCTest
- XCUITest
- user interface, testing / Testing the user interface with XCUITest