{"id":2657,"date":"2022-06-10T17:36:33","date_gmt":"2022-06-10T21:36:33","guid":{"rendered":"https:\/\/michaelrowe01.com\/?p=2657"},"modified":"2022-12-15T06:45:54","modified_gmt":"2022-12-15T11:45:54","slug":"wwdc-2022-day-five-smooth-landing","status":"publish","type":"post","link":"https:\/\/michaelrowe01.com\/index.php\/uncategorized\/wwdc-2022-day-five-smooth-landing\/","title":{"rendered":"<strong>WWDC 2022 &#8211; Day Five &#8211; Smooth Landing<\/strong>"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Wow, this week has flown by and I\u2019ve learned a lot, but I still have tons more to learn.&nbsp; While I have less sessions planned today, I am sure I can find other sessions I will watch.&nbsp; So let\u2019s get started.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Creating accessible Single App Mode Experiences<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Single mode apps, lock the system to a single app.&nbsp; This is great for a kiosk, but you should make sure that accessibility is available.&nbsp; Other scenarios, medical offices, testing, and you can actually enable it via guided access.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Links:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/developer.apple.com\/documentation\/devicemanagement\/autonomoussingleappmode\">AutonomousSingleAppMode<\/a><\/li><li><a href=\"https:\/\/developer.apple.com\/documentation\/uikit\/uiaccessibility\/1615186-requestguidedaccesssession\">requestGuidedAccessSession(enabled:completionHandler:)<\/a><\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>Guided access<ul><li>Turn it on in accessibility settings.&nbsp; Triple tap the side button and you can set restrictions and enable the restrictions you want in place.<\/li><li>I\u2019ve never actually known about this setting, so I find it a great way to help setup a device for just email as an example.&nbsp; Will have to test if you can launch a browser from an email when in this mode.<\/li><li>As a developer you can create your own custom experiences in your app.<\/li><li>For cognitive disability:<ul><li>Be forgiving of errors,<\/li><li>Warn users before irreversible actions<\/li><li>Reduce dependence on timing<\/li><li>Always confirm payments<\/li><li>These will promote independence for people with cognitive issues<\/li><\/ul><\/li><\/ul><\/li><li>Code example&nbsp;<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/michaelrowe01.com\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-10-at-14.51.52-2.png?w=660&#038;ssl=1\" alt=\"\"\/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Enable the UIGuidedAccessRestrictionDelegate for your app to enable this feature.<\/li><li>You must provide an array of restrictions which can be addressed by Guided Access<\/li><li>You also should provide a simple user facing title and additional details information&nbsp;<\/li><li>Then implement the guidedAccessRestriction(withIdentifier: didChange:) method to get a notification when a restriction is toggled.&nbsp; You can then post a Notification in your app to turn off user&nbsp;<\/li><li>This feature was enabled in iOS 12.2 and you can check the status of customer restrictions by calling guidedAccessRestrictionState(forIdentifier:) at anytime.<\/li><li>Single App Modes<ul><li>You can programmatically enable this mode on device programmatically, and they all benefit from the above features.<\/li><li>For Single App mode &#8211; this is for when you want the device to run always.&nbsp; Will go back to the state on a reboot, but you need to make sure the devices is supervised &#8211; Use the Apple Configurator to setup the device in this mode.&nbsp; You can only exit via the configurator<\/li><li>Autonomous Single App Mode &#8211; for when the app goes in and out of the mode.<\/li><\/ul><\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/michaelrowe01.com\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-10-at-15.00.34-2.png?w=660&#038;ssl=1\" alt=\"\"\/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Use a single API method to do it. &#8211; UIAccessibility.requestGuidedAccessSession(enabled: true)<\/li><li>Must be device supervised.<\/li><li>You can check for this mode on any iOS 6.0 device or higher.<\/li><li>Assessment Mode &#8211; this is for testing type applications.<ul><li>This has been unified for iOS and MacOS<\/li><li>Doesn\u2019t need to be supervised, but you have to get Entitlement<\/li><\/ul><\/li><li>Accessibility API designed for Single App Mode<ul><li>You may need to address additional items for people who are using assistive technologies.&nbsp; In the configurator you enable a handful always available.&nbsp; You can also add items in the Accessibility Shortcut menu.<ul><li>But they need to be configured before single app mode<\/li><\/ul><\/li><li>You can enable some of these via APIs<ul><li>Use UIAccessibility.configureForGuidedAccess(features: enabled:) API for .zoom, .voiceOver, .invertColors, .assistiveTouch, and .grayscaleDisplay<\/li><\/ul><\/li><\/ul><\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Explore Apple Business Essentials<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I wanted to learn more about how Apple is targeting SMB (small and medium businesses) customers for their services.&nbsp; I also wonder if they enable APIs to let you add value added services on top of business essentials.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Links:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/www.apple.com\/business\/essentials\/\">Apple Business Essentials<\/a><\/li><li><a href=\"https:\/\/support.apple.com\/guide\/apple-business-essentials\/\">Apple Business Essentials User Guide<\/a><\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>This is a subscription based service with Cloud Storage, Devices Management, and other services for SMB<\/li><li>Signing in with a managed Apple ID the device is automatically setup and configured, along with all the software that is required will be installed.<\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>Apple Business Manager<ul><li>This is required to setup. &nbsp;<\/li><li>You can add individuals or sync in from MS Active Directory or Google Workplace<\/li><li>You can setup Groups<\/li><\/ul><\/li><li>Subscription<ul><li>Then you can enroll either an employee plan or a device plan (for loaners, kiosks, etc.). Each employee can have up to three devices.&nbsp; A fully loaded account appears to be about $25 per employee.<\/li><\/ul><\/li><li>Settings and Apps<ul><li>There is a security tab to bring together all the defaults for their devices. You can pre-configure wifi settings and many more so that the devices will be addressed automatically for a user and they won\u2019t have to setup Wifi.<\/li><li>Managed Apps are auto updated and uninstalled if the user signs out of the device.<\/li><li>You provide a managed ID here for the users.<\/li><\/ul><\/li><li>Employee experience<ul><li>By signing in via their managed ID the device is already setup.<\/li><li>On a personal devices you go to setting and VPN which allows you to sign in with a separate work account. They will be crypto graphically separated on the device.&nbsp; The essentials app will be on the machine which will provide access to services, like device repair, apps, etc.<\/li><\/ul><\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">There were no APIs discussed in this session, but it certainly makes sense for a small firm.&nbsp; At one level, I would do this for my family as a means to manage their devices, but on another, I think the family sharing I have setup is good enough.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>What\u2019s new in Screen Time API<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I use Screen TIme myself to help balance how much time I sit working on my machines.&nbsp; Setting this up has been one way that I\u2019ve improved my balance between computers and physical activity.&nbsp; I have not looked at the APIs yet, to see if it makes sense to add any to my Apps.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Links:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/developer.apple.com\/documentation\/DeviceActivity\">DeviceActivity<\/a><\/li><li><a href=\"https:\/\/developer.apple.com\/documentation\/FamilyControls\">FamilyControls<\/a><\/li><li><a href=\"https:\/\/developer.apple.com\/documentation\/ManagedSettings\">ManagedSettings<\/a><\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This API was introduced last year, to help apps manage time for users and kids.&nbsp; There were a set of Apps called out on this screen.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/michaelrowe01.com\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-10-at-15.26.50-2.png?w=660&#038;ssl=1\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">To be honest, I don\u2019t recognize any of them. I may have to look them up to see what they do.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Highlights from 15<ul><li>Family controls<ul><li>Gate way to Screen Time API<\/li><li>Prevents removal<\/li><li>Provides privacy tokens&nbsp;<\/li><\/ul><\/li><li>Managed settings<ul><li>Allows your app to brand a similar feature to screen time<\/li><\/ul><\/li><li>Device Activity&nbsp;<ul><li>Tracked activities and identified if you exceed a threshold.<\/li><\/ul><\/li><\/ul><\/li><li>New Items<ul><li>Sample app &#8211; Workload<\/li><li>In Family Controls in iOS16<ul><li>Can authorize independent users from their own device<\/li><li>This allows for non-parental control use cases<\/li><li>You do a simple request on app launch<\/li><\/ul><\/li><\/ul><\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/michaelrowe01.com\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-10-at-15.29.57-2.png?w=660&#038;ssl=1\" alt=\"\"\/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Once successfully authenticated it won\u2019t prompt again.<\/li><li>Managed Settings:<ul><li>Revamped to make it easier to use.&nbsp; Especially in the data store.<\/li><li>In iOS15 you could only have one per process. Now &nbsp; you can create up to 15 stores per process and they are shared between the app and all of it\u2019s extensions<\/li><\/ul><\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/michaelrowe01.com\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-10-at-15.32.05-2.png?w=660&#038;ssl=1\" alt=\"\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/michaelrowe01.com\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-10-at-15.32.13-2.png?w=660&#038;ssl=1\" alt=\"\"\/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>The most restrictive settings always win.<\/li><li>Device activity&nbsp;<ul><li>Has new reporting services to create custom usage reports via SwiftUI<\/li><li>Will address privacy too<\/li><\/ul><\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/michaelrowe01.com\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-10-at-15.33.40-2.png?w=660&#038;ssl=1\" alt=\"\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/michaelrowe01.com\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-10-at-15.34.04-2.png?w=660&#038;ssl=1\" alt=\"\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/michaelrowe01.com\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-10-at-15.34.36-2.png?w=660&#038;ssl=1\" alt=\"\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/michaelrowe01.com\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-10-at-15.34.44-2.png?w=660&#038;ssl=1\" alt=\"\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/michaelrowe01.com\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-10-at-15.34.52-2.png?w=660&#038;ssl=1\" alt=\"\"\/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>The above code is a sample of a report, using the new Swift Charts API<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>What\u2019s new in PDFKit<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I\u2019ve never looked at PDFKit; however, I am thinking about adding printing features to my card tracking application.&nbsp; My assumption for this session is that I will be able to create a PDF for the reports I am thinking about.&nbsp; By creating PDFs, it should become easier to create the reports, as well as to share them.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Links:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/developer.apple.com\/sample-code\/wwdc\/2017\/PDFAnnotationWidgetsAdvanced.zip\">PDFAnnotationWidgetsAdvanced<\/a><\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li>PDFKit Review<ul><li>Full featured framework for viewing, editing, and writing PDF files,&nbsp; available on iOS, macOS and Catalyst<\/li><li>Four core classes&nbsp;<ul><li>PDFView (included in your layout)<\/li><li>PDFDocument (the file or root of the object graph)<\/li><li>PDFPage (one ore more are contained in the Document<\/li><li>PDFAnnotations (Optional leaves to a Page &#8211; this are editable)<\/li><li>Check out Introducing PDFKit<\/li><\/ul><\/li><\/ul><\/li><li>Live text and Forms<ul><li>In PDFs this is different than in the photos, in PDF if you see text &#8211; it is expected Text.<\/li><li>This allows Text selection and search<\/li><li>OCR Scanning has on demand on and is done in the document itself<\/li><li>Forms are automatically recognized and you can tab thru them as you would expect<\/li><\/ul><\/li><li>Create PDFs from images<ul><li>This creates Pages from images. This is a new API<\/li><li>public convenience init(image: CGImage, andOptions options: [PDFPageInitWithImageOption : ANY] = [:] )<\/li><li>This is auto compressed by default<\/li><li>Options include &#8211;&nbsp;<ul><li>mediaBox (like Letter or A4)<\/li><li>rotation (Portrait or landscape<\/li><li>upscaleIfSmaller &#8211; by default if the image is larger than the media box, it will scale down to fit,&nbsp;<\/li><\/ul><\/li><\/ul><\/li><li>Overlay Views<ul><li>To draw on a page with Pencil get<\/li><li>You can now use Overlay view on each PDF page<ul><li>Install your overlay view&nbsp;<ul><li>Since you can have 1000s of pages in a PDF &#8211;&nbsp; PDFKit will intelligently load via a new protocol<\/li><li>You must create overlayViewFor page:, the others are optional<\/li><li>A detailed walk thru of an implantation of this codes is included in the video<\/li><\/ul><\/li><\/ul><\/li><\/ul><\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/michaelrowe01.com\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-10-at-16.01.38-2.png?w=660&#038;ssl=1\" alt=\"\"\/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Save your content in the PDF<ul><li>Use the PDF Annotations a the model &#8211;&nbsp;<ul><li>The Appearance Stream can recorded and will work across other readers<\/li><li>PDF annotations are stored in a dictionary &#8211; so you can put your own custom data in private objects<\/li><\/ul><\/li><li>Override content for saving.<\/li><li>Images and PDFs are saved by default with maximum resolution.&nbsp;<\/li><\/ul><\/li><li>Best practices when saving<ul><li>You can over ride this by .saveAllImagesAsJPEG and\/or .optimizationImagesForScreen<\/li><li>.createLinearizedPDF &#8211; is optimized for internet based reading.. loading the first page first.&nbsp; By default PDFs have always loaded from the last page<\/li><\/ul><\/li><li>This is another session that I recommend going thru the video multiple times to get all the code examples.&nbsp; Or you can get the transcript: <a href=\"https:\/\/developer.apple.com\/videos\/play\/wwdc2022\/10089\/\">https:\/\/developer.apple.com\/videos\/play\/wwdc2022\/10089\/<\/a><\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Use Xcode for server-side development<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">While Swift has already been made available on platforms like IBM System-Z and Linux, most people still think of it as a client side application language.&nbsp; While viewing this session I looked up if Swift supported WebSphere and was disappointed to see this article from 2020 &#8211; IBM Stops working on Swift &#8211; <a href=\"https:\/\/www.infoq.com\/news\/2020\/01\/ibm-stop-work-swift-server\/\">https:\/\/www.infoq.com\/news\/2020\/01\/ibm-stop-work-swift-server\/<\/a>. While I was disappointed to see this, I figured I could still learn how the technology works.&nbsp; This session will show how to do server-side code in Xcode.&nbsp; I have used multiple IDEs over my years and find that even with it\u2019s nuances, Xcode is my favorite IDE.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Links:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/www.swift.org\/server\/\">Swift on Server<\/a><\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/michaelrowe01.com\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-10-at-16.14.30-2.png?w=660&#038;ssl=1\" alt=\"\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Extending an iOS application into the cloud, is an example of why you may care about server-side development.&nbsp; Server components tend to be created using different technologies\u2026 but if you can use Swift, it would simplify this a lot.&nbsp; Server apps are modeled as Swift Packages.&nbsp; Making it a web server, requires you to define the package dependency to appropriate technology. The example talked about using Vapor which is an opens source server.&nbsp; The sample code was a simple server that echo\u2019s back data sent to it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">By using Xcode you can not only test in a terminal window via CURL, you can also write a simple iOS app to test the interaction via the simulator.&nbsp; Enabling simple server deploy allows for quick testing via the cloud.&nbsp; Many of these use cases are very much like what my day job application does via it\u2019s on infrastructure and languages. &nbsp; The pattern here is traditional server based development.&nbsp; From a server database perspective, Swift has drivers for FoundationDB, Redis, Cassandra, Postgres, DynamoDB, MongoDB, SQLite and more.&nbsp; For more information you can look at the above Swift server documentation page.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So allowing for a swift development shop to extend it\u2019s reach to server based apps via Swift, is a great story.&nbsp; Glad to see this one.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Bring multiple windows to your SwiftUI App<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Okay, going to wrap up the day with two more sessions on SwiftUI.&nbsp; The amount of links that theses sessions are driving shows that they are really bringing together a lot of the ideas presented over the course of the week.&nbsp; SwiftUI has really made it easier to develop for Apple\u2019s platforms.&nbsp; As I mentioned elsewhere, I was really hoping that this year Apple would make a SwiftData framework to simplify the usage of things like Core Data and CloudKit.&nbsp; Unfortunately, they did not do that, there\u2019s always WWDC23.&nbsp; Well let\u2019s dive into the last two sessions.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Links:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/developer.apple.com\/documentation\/swiftui\/bringing_multiple_windows_to_your_swiftui_app\">Bringing multiple windows to your SwiftUI app<\/a><\/li><li><a href=\"https:\/\/developer.apple.com\/documentation\/SwiftUI\/DocumentGroup\">DocumentGroup<\/a><\/li><li><a href=\"https:\/\/developer.apple.com\/documentation\/SwiftUI\/MenuBarExtra\">MenuBarExtra<\/a><\/li><li><a href=\"https:\/\/developer.apple.com\/documentation\/SwiftUI\/NewDocumentAction\">NewDocumentAction<\/a><\/li><li><a href=\"https:\/\/developer.apple.com\/documentation\/SwiftUI\/OpenDocumentAction\">OpenDocumentAction<\/a><\/li><li><a href=\"https:\/\/developer.apple.com\/documentation\/SwiftUI\/OpenWindowAction\">OpenWindowAction<\/a><\/li><li><a href=\"https:\/\/developer.apple.com\/swift\/blog\/?id=10\">Value and Reference Types<\/a><\/li><li><a href=\"https:\/\/developer.apple.com\/documentation\/SwiftUI\/Window\">Window<\/a><\/li><li><a href=\"https:\/\/developer.apple.com\/documentation\/SwiftUI\/WindowGroup\">WindowGroup<\/a><\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">One thing that amazes me about Friday sessions as WWDC is how dense they are.&nbsp; Each my planned sessions today are only about 15 minutes long, but they pack a ton of great content in them.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Scene basics<ul><li>Scenes commonly represent a window on screen.&nbsp;<ul><li>Window Group (All platforms), for data drive applications&nbsp;<\/li><li>Document Group (iOS and macOS), for document driven applications&nbsp;<\/li><li>Settings defines an interface for in app settings on macOS<\/li><\/ul><\/li><li>You can compose them together to extend your apps functionality.<\/li><li>Two new additions:<ul><li>Window &#8211; a single unique window on all platforms (this is great for things like games)<\/li><li>MenuBarExtra &#8211; macOS only &#8211; control in the menu bar (it is persistent in the menu bar- available as long as the app is running) &#8211; has two rendering styes &#8211; both a default style, and a chrome-less window attached to the menu bar.<\/li><\/ul><\/li><\/ul><\/li><li>Auxiliary scenes<ul><li>You can add an additional scene to your Scene group &#8211; this will take it\u2019s title and add it to the Window menu item&nbsp; on the Mac<\/li><\/ul><\/li><li>Scene Navigation<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/michaelrowe01.com\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-10-at-16.50.36-2.png?w=660&#038;ssl=1\" alt=\"\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/michaelrowe01.com\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-10-at-16.52.27-2.png?w=660&#038;ssl=1\" alt=\"\"\/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>There are new callable types via @Environment for example:<ul><li>\\.openWindow &#8211; can present windows for either a window Group or window<\/li><li>\\.newDocument &#8211; can create a new document window for both FileDocument and referenceFileDocument<\/li><li>\\.openDocument &#8211; can present a document window with contents from disk (using a url)<\/li><\/ul><\/li><li>Prefer your model\u2019s identifier rather than the model itself. Value should be Hashable, Codable,<\/li><li>You need to create a scene for a data type.&nbsp; The above code shows the button and the scene definitions.<\/li><li>Scene customizations<ul><li>By default you will get a menu item for each group in the file menu.&nbsp; You can override this with the .commandsRemoved() scene modifier.<\/li><li>By default new windows are placed in the center of the screen &#8211; you can override with .defaultPosition(.topTrailing) which will be used if now position has been provided before<\/li><li>Also .defaultSize(width: , height:) modifier&nbsp;<\/li><li>And .keyboardShortcut(\u201c0\u201d, modifiers: [.option, .commend]) = at the scene level which allows you to create a new scene with this keyboard shortcut&nbsp;<\/li><\/ul><\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Efficiency awaits: Background tasks in SwiftUI&nbsp;<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And finally a follow up from last year\u2019s async updates.&nbsp; This should improve the UI responsiveness of my card tracker app.&nbsp; While I have loaded a lazy grid for the cards view, it is still pretty slow.&nbsp; I think I need to put up placeholder images.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Stormy: a sample app &#8211; that uses background tasks<ul><li>This API is available on watchOS, iOS, tvOS, Mac Catalyst and Widgets.&nbsp; It is also supported for IOS apps running on Apple Silicon Macs<\/li><li>This app prompts users to take pictures at noon if it is stormy outside.&nbsp; You can see the the system can schedule the refresh for noon, and then run multiple tasks in the background awaiting for results via async\/ await before notifying if the user should take the picture.&nbsp;<\/li><\/ul><\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/michaelrowe01.com\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-10-at-17.04.45-2.png?w=660&#038;ssl=1\" alt=\"\"\/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Background on Background Tasks<ul><li>These happen during the App Refresh period for background processing.&nbsp; If the app is running out of time, the system will notify it to gracefully handle processing.<\/li><li>By setting a network request as a background network request, it can be put back into a wait state and woken back up for more processing when the network responds.<\/li><\/ul><\/li><li>SwiftUI API in practice<\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/michaelrowe01.com\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-10-at-17.09.23-2.png?w=660&#038;ssl=1\" alt=\"\"\/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Creating the schedule request, we will call this function and register a New .backgroundTask() scene modifier.&nbsp; In this case we use .appRefresh(\u201cName\u201d)<ul><li>Note this code allows for a periodic check and&nbsp;<\/li><\/ul><\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/michaelrowe01.com\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-10-at-17.10.01-2.png?w=660&#038;ssl=1\" alt=\"\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/michaelrowe01.com\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-10-at-17.11.02-2.png?w=660&#038;ssl=1\" alt=\"\"\/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Swift Concurrency<ul><li>URLSession has adopted concurrency so now you can use try? await on URLSession.&nbsp; If you want to setup it up as a background session, you should change from URLSession.shared to URLSessionConfiguration.background(withIdentifier: \u201cApp specific identifier\u201d), and use that configuration in your URLSession(configuration: config) don\u2019t forget to set sessionSendsLaunchEvents = true for your config object.<\/li><li>This is really important on watchOS as all network request must be done as background sessions.<\/li><li>Since an background may be expiring, add a onCancel: to your await via awaitTaskCancellationHandler{ } on Cancel: { }<\/li><li>The second runs only when the task is cancelled, and in this code it will promote the request from background to background Download.<\/li><\/ul><\/li><\/ul>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" decoding=\"async\" src=\"https:\/\/i0.wp.com\/michaelrowe01.com\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-10-at-17.17.01-2.png?w=660&#038;ssl=1\" alt=\"\"\/><\/figure>\n\n\n\n<ul class=\"wp-block-list\"><li>Updating the app to be able to launch in the background with a .urlSession type using the same identifier we created earlier.&nbsp; This ill only launch when the specific task request it.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Wow, this week has flown by and I\u2019ve learned a lot, but I still have tons more to learn.&nbsp; While I have less sessions planned today, I am sure I can find other sessions I will watch.&nbsp; So let\u2019s get started. Creating accessible Single App Mode Experiences Single mode apps, lock the system to a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_wp_convertkit_post_meta":{"form":"-1","landing_page":"0","tag":"0","restrict_content":"0"},"hide_page_title":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"jetpack_post_was_ever_published":false},"categories":[3,1],"tags":[658,665,663,636],"class_list":["post-2657","post","type-post","status-publish","format-standard","hentry","category-personal-softwareandit","category-uncategorized","tag-guided-access","tag-screen-time-api","tag-server-side-swift","tag-wwdc22"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 4.9.8 - aioseo.com -->\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Michael Rowe\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/michaelrowe01.com\/index.php\/uncategorized\/wwdc-2022-day-five-smooth-landing\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.8\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Random Thoughts | A blog about things that interest me.\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"WWDC 2022 \u2013 Day Five \u2013 Smooth Landing | Random Thoughts\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/michaelrowe01.com\/index.php\/uncategorized\/wwdc-2022-day-five-smooth-landing\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/michaelrowe01.com\/wp-content\/uploads\/2019\/04\/img_0391.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/michaelrowe01.com\/wp-content\/uploads\/2019\/04\/img_0391.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"3088\" \/>\n\t\t<meta property=\"og:image:height\" content=\"2316\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2022-06-10T21:36:33+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2022-12-15T11:45:54+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:title\" content=\"WWDC 2022 \u2013 Day Five \u2013 Smooth Landing | Random Thoughts\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/michaelrowe01.com\/wp-content\/uploads\/2019\/04\/img_0391.jpg\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/michaelrowe01.com\\\/index.php\\\/uncategorized\\\/wwdc-2022-day-five-smooth-landing\\\/#article\",\"name\":\"WWDC 2022 \\u2013 Day Five \\u2013 Smooth Landing | Random Thoughts\",\"headline\":\"WWDC 2022 &#8211; Day Five &#8211; Smooth Landing\",\"author\":{\"@id\":\"https:\\\/\\\/michaelrowe01.com\\\/index.php\\\/author\\\/michaelrowe\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/michaelrowe01.com\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/michaelrowe01.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/Screen-Shot-2022-06-10-at-14.51.52-2.png?fit=3840%2C2160&ssl=1\",\"@id\":\"https:\\\/\\\/michaelrowe01.com\\\/index.php\\\/uncategorized\\\/wwdc-2022-day-five-smooth-landing\\\/#articleImage\",\"width\":3840,\"height\":2160},\"datePublished\":\"2022-06-10T17:36:33-04:00\",\"dateModified\":\"2022-12-15T06:45:54-05:00\",\"inLanguage\":\"en-US\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/michaelrowe01.com\\\/index.php\\\/uncategorized\\\/wwdc-2022-day-five-smooth-landing\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/michaelrowe01.com\\\/index.php\\\/uncategorized\\\/wwdc-2022-day-five-smooth-landing\\\/#webpage\"},\"articleSection\":\"Personal - Software and IT, Uncategorized, Guided Access, screen time api, Server side swift, wwdc22\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/michaelrowe01.com\\\/index.php\\\/uncategorized\\\/wwdc-2022-day-five-smooth-landing\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/michaelrowe01.com#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/michaelrowe01.com\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/michaelrowe01.com\\\/index.php\\\/category\\\/uncategorized\\\/#listItem\",\"name\":\"Uncategorized\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/michaelrowe01.com\\\/index.php\\\/category\\\/uncategorized\\\/#listItem\",\"position\":2,\"name\":\"Uncategorized\",\"item\":\"https:\\\/\\\/michaelrowe01.com\\\/index.php\\\/category\\\/uncategorized\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/michaelrowe01.com\\\/index.php\\\/uncategorized\\\/wwdc-2022-day-five-smooth-landing\\\/#listItem\",\"name\":\"WWDC 2022 &#8211; Day Five &#8211; Smooth Landing\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/michaelrowe01.com#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/michaelrowe01.com\\\/index.php\\\/uncategorized\\\/wwdc-2022-day-five-smooth-landing\\\/#listItem\",\"position\":3,\"name\":\"WWDC 2022 &#8211; Day Five &#8211; Smooth Landing\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/michaelrowe01.com\\\/index.php\\\/category\\\/uncategorized\\\/#listItem\",\"name\":\"Uncategorized\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/michaelrowe01.com\\\/#organization\",\"name\":\"Michael Rowe\",\"description\":\"A blog about things that interest me.\",\"url\":\"https:\\\/\\\/michaelrowe01.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/michaelrowe01.com\\\/wp-content\\\/uploads\\\/2024\\\/11\\\/IMG_0120.jpeg?fit=1024%2C1024&ssl=1\",\"@id\":\"https:\\\/\\\/michaelrowe01.com\\\/index.php\\\/uncategorized\\\/wwdc-2022-day-five-smooth-landing\\\/#organizationLogo\",\"width\":1024,\"height\":1024},\"image\":{\"@id\":\"https:\\\/\\\/michaelrowe01.com\\\/index.php\\\/uncategorized\\\/wwdc-2022-day-five-smooth-landing\\\/#organizationLogo\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/michaelrowe01.com\\\/index.php\\\/author\\\/michaelrowe\\\/#author\",\"url\":\"https:\\\/\\\/michaelrowe01.com\\\/index.php\\\/author\\\/michaelrowe\\\/\",\"name\":\"Michael Rowe\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/michaelrowe01.com\\\/index.php\\\/uncategorized\\\/wwdc-2022-day-five-smooth-landing\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/23f6c08c7576fa07e47f582da2eb7619aeb556ceddf53a274fdb9069926e5bc1?s=96&r=g\",\"width\":96,\"height\":96,\"caption\":\"Michael Rowe\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/michaelrowe01.com\\\/index.php\\\/uncategorized\\\/wwdc-2022-day-five-smooth-landing\\\/#webpage\",\"url\":\"https:\\\/\\\/michaelrowe01.com\\\/index.php\\\/uncategorized\\\/wwdc-2022-day-five-smooth-landing\\\/\",\"name\":\"WWDC 2022 \\u2013 Day Five \\u2013 Smooth Landing | Random Thoughts\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/michaelrowe01.com\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/michaelrowe01.com\\\/index.php\\\/uncategorized\\\/wwdc-2022-day-five-smooth-landing\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/michaelrowe01.com\\\/index.php\\\/author\\\/michaelrowe\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/michaelrowe01.com\\\/index.php\\\/author\\\/michaelrowe\\\/#author\"},\"datePublished\":\"2022-06-10T17:36:33-04:00\",\"dateModified\":\"2022-12-15T06:45:54-05:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/michaelrowe01.com\\\/#website\",\"url\":\"https:\\\/\\\/michaelrowe01.com\\\/\",\"name\":\"Random Thoughts\",\"description\":\"A blog about things that interest me.\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/michaelrowe01.com\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"WWDC 2022 \u2013 Day Five \u2013 Smooth Landing | Random Thoughts","description":"","canonical_url":"https:\/\/michaelrowe01.com\/index.php\/uncategorized\/wwdc-2022-day-five-smooth-landing\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/michaelrowe01.com\/index.php\/uncategorized\/wwdc-2022-day-five-smooth-landing\/#article","name":"WWDC 2022 \u2013 Day Five \u2013 Smooth Landing | Random Thoughts","headline":"WWDC 2022 &#8211; Day Five &#8211; Smooth Landing","author":{"@id":"https:\/\/michaelrowe01.com\/index.php\/author\/michaelrowe\/#author"},"publisher":{"@id":"https:\/\/michaelrowe01.com\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/i0.wp.com\/michaelrowe01.com\/wp-content\/uploads\/2022\/06\/Screen-Shot-2022-06-10-at-14.51.52-2.png?fit=3840%2C2160&ssl=1","@id":"https:\/\/michaelrowe01.com\/index.php\/uncategorized\/wwdc-2022-day-five-smooth-landing\/#articleImage","width":3840,"height":2160},"datePublished":"2022-06-10T17:36:33-04:00","dateModified":"2022-12-15T06:45:54-05:00","inLanguage":"en-US","mainEntityOfPage":{"@id":"https:\/\/michaelrowe01.com\/index.php\/uncategorized\/wwdc-2022-day-five-smooth-landing\/#webpage"},"isPartOf":{"@id":"https:\/\/michaelrowe01.com\/index.php\/uncategorized\/wwdc-2022-day-five-smooth-landing\/#webpage"},"articleSection":"Personal - Software and IT, Uncategorized, Guided Access, screen time api, Server side swift, wwdc22"},{"@type":"BreadcrumbList","@id":"https:\/\/michaelrowe01.com\/index.php\/uncategorized\/wwdc-2022-day-five-smooth-landing\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/michaelrowe01.com#listItem","position":1,"name":"Home","item":"https:\/\/michaelrowe01.com","nextItem":{"@type":"ListItem","@id":"https:\/\/michaelrowe01.com\/index.php\/category\/uncategorized\/#listItem","name":"Uncategorized"}},{"@type":"ListItem","@id":"https:\/\/michaelrowe01.com\/index.php\/category\/uncategorized\/#listItem","position":2,"name":"Uncategorized","item":"https:\/\/michaelrowe01.com\/index.php\/category\/uncategorized\/","nextItem":{"@type":"ListItem","@id":"https:\/\/michaelrowe01.com\/index.php\/uncategorized\/wwdc-2022-day-five-smooth-landing\/#listItem","name":"WWDC 2022 &#8211; Day Five &#8211; Smooth Landing"},"previousItem":{"@type":"ListItem","@id":"https:\/\/michaelrowe01.com#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/michaelrowe01.com\/index.php\/uncategorized\/wwdc-2022-day-five-smooth-landing\/#listItem","position":3,"name":"WWDC 2022 &#8211; Day Five &#8211; Smooth Landing","previousItem":{"@type":"ListItem","@id":"https:\/\/michaelrowe01.com\/index.php\/category\/uncategorized\/#listItem","name":"Uncategorized"}}]},{"@type":"Organization","@id":"https:\/\/michaelrowe01.com\/#organization","name":"Michael Rowe","description":"A blog about things that interest me.","url":"https:\/\/michaelrowe01.com\/","logo":{"@type":"ImageObject","url":"https:\/\/i0.wp.com\/michaelrowe01.com\/wp-content\/uploads\/2024\/11\/IMG_0120.jpeg?fit=1024%2C1024&ssl=1","@id":"https:\/\/michaelrowe01.com\/index.php\/uncategorized\/wwdc-2022-day-five-smooth-landing\/#organizationLogo","width":1024,"height":1024},"image":{"@id":"https:\/\/michaelrowe01.com\/index.php\/uncategorized\/wwdc-2022-day-five-smooth-landing\/#organizationLogo"}},{"@type":"Person","@id":"https:\/\/michaelrowe01.com\/index.php\/author\/michaelrowe\/#author","url":"https:\/\/michaelrowe01.com\/index.php\/author\/michaelrowe\/","name":"Michael Rowe","image":{"@type":"ImageObject","@id":"https:\/\/michaelrowe01.com\/index.php\/uncategorized\/wwdc-2022-day-five-smooth-landing\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/23f6c08c7576fa07e47f582da2eb7619aeb556ceddf53a274fdb9069926e5bc1?s=96&r=g","width":96,"height":96,"caption":"Michael Rowe"}},{"@type":"WebPage","@id":"https:\/\/michaelrowe01.com\/index.php\/uncategorized\/wwdc-2022-day-five-smooth-landing\/#webpage","url":"https:\/\/michaelrowe01.com\/index.php\/uncategorized\/wwdc-2022-day-five-smooth-landing\/","name":"WWDC 2022 \u2013 Day Five \u2013 Smooth Landing | Random Thoughts","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/michaelrowe01.com\/#website"},"breadcrumb":{"@id":"https:\/\/michaelrowe01.com\/index.php\/uncategorized\/wwdc-2022-day-five-smooth-landing\/#breadcrumblist"},"author":{"@id":"https:\/\/michaelrowe01.com\/index.php\/author\/michaelrowe\/#author"},"creator":{"@id":"https:\/\/michaelrowe01.com\/index.php\/author\/michaelrowe\/#author"},"datePublished":"2022-06-10T17:36:33-04:00","dateModified":"2022-12-15T06:45:54-05:00"},{"@type":"WebSite","@id":"https:\/\/michaelrowe01.com\/#website","url":"https:\/\/michaelrowe01.com\/","name":"Random Thoughts","description":"A blog about things that interest me.","inLanguage":"en-US","publisher":{"@id":"https:\/\/michaelrowe01.com\/#organization"}}]},"og:locale":"en_US","og:site_name":"Random Thoughts | A blog about things that interest me.","og:type":"article","og:title":"WWDC 2022 \u2013 Day Five \u2013 Smooth Landing | Random Thoughts","og:url":"https:\/\/michaelrowe01.com\/index.php\/uncategorized\/wwdc-2022-day-five-smooth-landing\/","og:image":"https:\/\/michaelrowe01.com\/wp-content\/uploads\/2019\/04\/img_0391.jpg","og:image:secure_url":"https:\/\/michaelrowe01.com\/wp-content\/uploads\/2019\/04\/img_0391.jpg","og:image:width":3088,"og:image:height":2316,"article:published_time":"2022-06-10T21:36:33+00:00","article:modified_time":"2022-12-15T11:45:54+00:00","twitter:card":"summary","twitter:title":"WWDC 2022 \u2013 Day Five \u2013 Smooth Landing | Random Thoughts","twitter:image":"https:\/\/michaelrowe01.com\/wp-content\/uploads\/2019\/04\/img_0391.jpg"},"aioseo_meta_data":{"post_id":"2657","title":null,"description":null,"keywords":[],"keyphrases":{"focus":{"keyphrase":"","score":0,"analysis":{"keyphraseInTitle":{"score":0,"maxScore":9,"error":1}}},"additional":[]},"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":[],"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":"{\"article\":{\"articleType\":\"BlogPosting\"},\"course\":{\"name\":\"\",\"description\":\"\",\"provider\":\"\"},\"faq\":{\"pages\":[]},\"product\":{\"reviews\":[]},\"recipe\":{\"ingredients\":[],\"instructions\":[],\"keywords\":[]},\"software\":{\"reviews\":[],\"operatingSystems\":[]},\"webPage\":{\"webPageType\":\"WebPage\"}}","pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":"-1","robots_max_videopreview":"-1","robots_max_imagepreview":"large","priority":null,"frequency":"default","local_seo":null,"breadcrumb_settings":null,"limit_modified_date":false,"ai":null,"created":"2022-06-10 21:21:04","updated":"2025-06-04 00:24:20","seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/michaelrowe01.com\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/michaelrowe01.com\/index.php\/category\/uncategorized\/\" title=\"Uncategorized\">Uncategorized<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<strong>WWDC 2022 \u2013 Day Five \u2013 Smooth Landing<\/strong>\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/michaelrowe01.com"},{"label":"Uncategorized","link":"https:\/\/michaelrowe01.com\/index.php\/category\/uncategorized\/"},{"label":"<strong>WWDC 2022 &#8211; Day Five &#8211; Smooth Landing<\/strong>","link":"https:\/\/michaelrowe01.com\/index.php\/uncategorized\/wwdc-2022-day-five-smooth-landing\/"}],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_shortlink":"https:\/\/wp.me\/p2aMa8-GR","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/michaelrowe01.com\/index.php\/wp-json\/wp\/v2\/posts\/2657","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/michaelrowe01.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/michaelrowe01.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/michaelrowe01.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/michaelrowe01.com\/index.php\/wp-json\/wp\/v2\/comments?post=2657"}],"version-history":[{"count":1,"href":"https:\/\/michaelrowe01.com\/index.php\/wp-json\/wp\/v2\/posts\/2657\/revisions"}],"predecessor-version":[{"id":2676,"href":"https:\/\/michaelrowe01.com\/index.php\/wp-json\/wp\/v2\/posts\/2657\/revisions\/2676"}],"wp:attachment":[{"href":"https:\/\/michaelrowe01.com\/index.php\/wp-json\/wp\/v2\/media?parent=2657"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/michaelrowe01.com\/index.php\/wp-json\/wp\/v2\/categories?post=2657"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/michaelrowe01.com\/index.php\/wp-json\/wp\/v2\/tags?post=2657"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}