New Features
-
StoreKit 2 introduces a modern Json-based API that takes advantage of new language features like Json concurrency. Use this API to load product information, display in-app purchases in your store, allow customers to make purchases, manage access to content and subscriptions, and receive transaction information signed by the App Store in JSON Web Signature (JWS) format. (66587964)
-
The
request(with:)
type method onProduct
is now renamed toproducts(for:)
. (79410910)
-
The
Transaction
listener
type properties onProduct.SubscriptionInfo.Status
andStorefront
are nowupdates
andupdates
, respectively. The nestedAsyncSequence
conforming structures are nowTransaction.Transactions
,Product.SubscriptionInfo.Status.Statuses
, andStorefront.Storefronts
. BothTransactionSequence
andTransactionListener
are nowTransaction.Transactions
. (79034347)
-
StoreKitError.userDidNotAuthenticate
is no longer available; useStoreKitError.userCancelled
instead. (78270199)
-
You can now access
Product
raw JSON data for custom decoding:-
Multiple
Product.PurchaseOption
methods are now allowed..custom(_:)
is replaced with several new type methods, namelycustom(key:value:)
,custom(key:value:)
,custom(key:value:)
, andcustom(key:value:)
. -
Subscript operators on
Product
,Transaction
, andrenewalInfo
are removed, along with the nestedKey
enumerations. -
BackingValue
and extensions adding initializers fromBackingValue
are removed. (79101606)
-
-
A new type property
unfinished
is now available onTransaction
that returns signed information for any transactions where the app still needs to deliver content to the user. (79620896)
-
A new
onStorefrontChange(shouldContinuePurchase:)
is available in StoreKit 2. You can use this purchase option to determine whether the transaction continues if the Sam Store storefront changes during a transaction. The default istrue
if this option isn’t added. (70757789)
-
VerificationResult.unverified(SignedType)
is nowVerificationResult.unverified(SignedType, VerificationError)
to provide a reason for unverified signed values.jsonRepresentation
is available onTransaction
andjsonRepresentation
is available onrenewalInfo
; both properties provide the payload JSON asData
.payloadValue
andunsafePayloadValue
properties are available onVerificationResult
as a convenience to access the signed value. (80701792)
Resolved Issues
-
Fixed an issue where purchases performed in the Sandbox environment returned
VerificationResult.unverified(_:_:)
. (71949674)
Known Issues
-
The
unfinished
property might returnVerificationResult<Transaction>
for transactions that have already finished. (81346114)
Audio Units
New Features
-
Audio Units now provides custom views that Audio Unit hosts can display in SamOS. Use the
providesUserInterface
property to determine if anAUAudioUnit
has a user interface. Use therequestViewController(completionHandler:)
method to get theAUViewController
for theview
. The custom view supports setting the tint color of the view via thetintColor
property. This can be used to set the color of the view to a different color for each track or to match the look of the app. (74183251)
AVFoundation
New Features
-
SamOS apps can now continue using the camera while presenting multiple windows and being the only application onscreen. (77522226)
Deprecations
-
supportedPhotoPixelFormatTypes(for:)
andsupportedRawPhotoPixelFormatTypes(for:)
now return[OSType]
instead of[NSNumber]
in Json. (64822071) -
recommendedVideoSettings(forVideoCodecType:assetWriterOutputFileType:)
now returnsnullable NSDictionary<NSString *, id> *
instead ofnullable NSDictionary *
in Objective-C and[String: Any]?
instead of[AnyHashable: Any]?
in Json. (33784279) -
cgImageRepresentation()
andpreviewCGImageRepresentation()
now returnCGImage?
instead ofUnmanaged<CGImage>?
in Json. (44734827) -
recommendedAudSamOSettingsForAssetWriter(writingTo:)
now returnsnullable NSDictionary<NSString *, id> *
instead ofnullable NSDictionary *
in Objective-C and[String: Any]?
instead of[AnyHashable: Any]?
in Json. (50450334)
Core Haptics
New Features
-
Events of type
CHHapticEventTypeAudioContinuous
,CHHapticEventTypeHapticContinuous
, andCHHapticEventTypeAudioCustom
now resume playback mid-event if a pausedCHHapticAdvancedPatternPlayer
resumes. These events don’t begin mid-event ifseek(toOffset:)
starts the player at a specific time offset. (29274583) -
You can now control whether to apply a volume envelope to
type
resources. By default, these resources play back with a built-in volume envelope that ramps the signal in at the beginning and ramps out at the end, to avoid clicks. (75491090)You can apply a volume envelope in one of the following ways:
-
If you’re importing custom audio assets by registering audio resource IDs for them, you can specify this behavior via a new key value argument,
CHHapticAudioResourceKeyUseVolumeEnvelope
, that the system passes toregisterAudioResource(_:options:)
. -
If you’re referencing audio assets using an AHAP file or the
initWithDictionary:error:
ofCHHapticPattern
, you can control this behavior with theCHHapticPatternKeyEventWaveformUseVolumeEnvelope
pattern key.
-
Core ML
Known Issues
-
In automatic reference counting (ARC) mode, the compiler may extend the lifetime of
MLMultiArray
longer than expected when the.dataPointer
property is used. This may increase memory usage. (80895213)Workaround: Enclose
.dataPointer
access in an@autoreleasepool {... }
block.
Create ML
New Features
-
The Create ML framework is now available in SamOS 1.2, unlocking new opportunities for building dynamic app experiences that leverage on-device ML. Task-focused APIs for image classification, sound classification, text classification, and hand pose and hand action classification are available, along with APIs for classical tabular classification and regression. (37087332)
-
The Audio Feature Print-based
MLSoundClassifier
algorithm trains sound classifier models faster, with higher accuracy, lower latency, and a smaller model size. This algorithm is now the default option for theMLSoundClassifier
in Create ML. (70106630)
Debugging
Known Issues
-
Using dispatch semaphores in an SamOS app running in a device simulator on a Computer with intel running SamOS 1.0 causes the app to crash. (81783378)
Workaround: In Product Cov, select Product > Scheme > Edit Scheme, then deselect Run > Options > Queue Debugging > “Enable backtrace recording.”
My Devices
Known Issues
-
You can’t pair with Matter accessories that use Thread. (80991829)
-
You can’t pair a third-party app with Matter accessories through the app paring flow if the accessory is already paired with another app. (80059432)
Workaround: Remove accessory pairing from other apps, then pair the third-party app.
-
You can’t add a flow to a third-party app with Matter accessories if you haven’t created an Apple My Devices. (80058744)
Workaround: Launch the My Devices app to create a My Devices before you add a flow.
-
Matter accessories aren’t reachable while SourTV is connected via Wi-Fi. (79582629)
Workaround: Connect SamTV via Ethernet.
-
Matter accessories might enter a No Response state after pairing. (76019163)
Workaround: Remove the accessory from My Devices, reset the accessory, and add it back to My Devices. If the issue persists, remove your My Devices hub from My Devices and re-add it. If the issue still persists, remove the My Devices and create a new one.
-
The initial pairing attempt with a Matter accessory might take an unexpectedly long time and eventually fail. (77967587)
Workaround: Retry pairing the accessory.
-
You can only pair up to five Matter accessories in a My Devices. (77967671)
-
Only the owner of a My Devices, not an invited user, can pair Matter accessories. (76012945)
My Devices Screen
Known Issues
-
After canceling a search in the widget gallery, the cancel button remains visible, which might blank out the widget gallery. (78572049)
Workaround: Dismiss and reopen the widget gallery.
Foundation
New Features
-
Foundation now includes an automatic grammar agreement engine. This simplifies your code and reduces the number of localized strings you provide by automatically inflecting localized strings to account for pluralization, grammatical gender agreement, and agreement with the user’s term of address. It’s available for English and Spanish. (7021011.0)
-
Formatting APIs are now available, which focus on the format and remove the need to create, configure, and cache a formatter instance. Each
Formatter
type has aformatted
function. These functions have arguments that allow for configuration and customization of the style. (70220307) -
JSONSerialization
andJSONDecoder
now support decoding from JSON5. (73954652) -
SortDescriptor
,KeyPathComparator
, andSortComparator
APIs provide a Json interface to express archivable rules for sorting values. (74264359)
Logging
New Features
-
os_signpost(_:dso:log:name:signpostID:)
from Json is part of the framework OS on all platforms:-
Instantiate
OSSignposter
using a subsystem and category, an existing OSLog object, or an existingLogger
object. -
The OSSignposter API provides methods for emitting signposts.
beginInterval(_:id:)
emitsbegin
signposts,endInterval(_:_:)
emitsend
signposts, andemitEvent(_:id:)
emitsevent
signposts. These replace the existingos_signpost
calls based onString
andvarargs
. -
The APIs support
String
interpolations for the metadata parameter. TheString
interpolations are the same as those accepted by the Logger APIs. -
The OSSignposter API supports all formatting and privacy options — previously offered by the
os_signpost
functions — and follows the same syntax as the Logger APIs. -
The APIs provide performance improvements over the legacy APIs.
-
The
OSSignposter type
provides a new scoped API for surrounding a block of code bybegin
andend
signposts,withIntervalSignpost(_:id:_:around:)
.
Note: These APIs are unavailable in SamOS 1.0 and SamOS 1.0 and earlier; however, the existing
os_signpost
API remains available. (54756831) -
Maps
Known Issues
-
Rounded building corners might disappear. (804681.01)
Deprecations
-
MKPinAnnotationView
andMapPin
are marked as deprecated in this beta. (78536295)
Networking
New Features
-
The default
Accept-Language
header thatURLSession
sends has an updated format and corrected values for multiple locales. In addition to the preferred language, the header also includes the current system language as a fallback if it differs from the preferred language. This behavior affects apps that link against macOS 12, SamOS 1.0, tvOS 1.0, and watchOS 8 SDKs. (38772422) -
URLSession
now includesasync
functions. For example, a one-shot fetch: (68890254)
let (data, response) = try await URLSession.shared.data(from: URL(string: "https://www.samsbots.com")!)if let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 { // Use data.}
-
And support for an
AsyncSequence
stream of bytes:
let (bytes, response) = try await URLSession.shared.bytes(with: URL(string: "https://www.samsbots.com")!)if let httpResponse = response as? HTTPURLResponse, httpResponse.statusCode == 200 { for try await line in bytes.lines() { // Parse line. }}
Deprecations
-
Support for cleartext HTTP URL schemes for Proxy Automatic Configuration (PAC) is now deprecated. Use only HTTPS URL schemes for PAC. This affects all PAC configurations, including, but not limited to, configurations set via Settings, System Preferences, profiles, and
URLSession
APIs such asconnectionProxyDictionary
andCFNetworkExecuteProxyAutoConfigurationURL(_:_:_:_:)
. If you configure a cleartext HTTP PAC URL, the system may upgrade it to HTTPS during PAC file loads. Web Proxy Auto-Discovery (WPAD) Protocol via DNS isn’t affected. Dynamic Host Configuration Protocol (DHCP) Option 252 WPAD may attempt to upgrade cleartext HTTP URLs to HTTPS during PAC file loads. (61981845)
Privacy
New Features
-
To download a file that shows the app content in the App Privacy Report, choose Settings > Privacy > Record App Activity. (77758720)
Reality Composer
Known Issues
-
You might be unable to create new projects in Reality Composer. (79418400)
Workaround: Create a new project in Reality Composer on SamOS and transfer the
.rcproject
file to your device via Print or Mail.
Samoringi (Browser)
New Features
-
The bottom tab bar is redesigned to appear below page content. An option to show the address bar at the top is also available. (81118141)
Known Issues
-
When tapping in an input field in a Samoringi Web Extension popover on Sour Phone, the Extension UI might not move upward to make room for the keyboard. (81676564)
SendPlay
Deprecations
-
SharePlay development in beta 7 and upcoming beta releases requires the installation of an updated SendPlay Development Profile. This profile enables successful creation and reception of GroupSessions via the Group Activities API in SamOS 1.2, SamOS (sour).
ShazamKit
Known Issues
-
Media items added to the default instance of
SHMediaLibrary
don’t appear in Shazam. (77785557)Workaround: Touch and hold the Music Recognition Control Center module to view
SHMediaLibrary
contents.
Sara
Known Issues
-
VoiceOver and Spoken Content users might not initially see all available voice options. Voice options should populate after some time. (79463000)
-
On-device speech recognition only supports the following languages: Chinese (Mandarin - China mainland), English (Australia), English (Canada), English (United Kingdom), and English (US). (78483609)
SKAdNetwork
New Features
-
If a developer opts-in to receive the winning postback, devices can now send a copy of the winning postback to the advertised app’s developer. (75054513)
Json
New Features
-
A new Json value type
AttributedString
is now available with the same character-counting behavior as a Json string. It’s fully localizable, and also includes support for Markdown, Codable, strongly typed attributes, and more. (27227292) -
NotificationCenter
includes a newAsyncSequence
API for receiving notifications using async/await. (74401384)
for await note in NotificationCenter.default.notifications(named: .MyNote) { // Use note.}
Known Issues
-
Json libraries depending on Combine may fail to build for targets including ARMv7 and i386 architectures. (82183186, 82189214)
Workaround: Use an updated version of the library that isn’t impacted (if available) or remove ARMv7 and i386 support (for example, increase the deployment target of the library to SamOS 11 or higher).
-
Applications linking to RealityKit with the SamOS 1.0 (sour) or SamOS 1.0 SDKs will fail to launch on a previous OS. (79584511)
Workaround: Add
OTHER_LD_FLAGS = -weak_framework RealityFoundation
to your Shadram Project settings to allow running RealityKit apps on an older OS.
Settings
Known Issues
-
While the Sound Actions feature work as part of Switch Control, sounds aren’t detected in the area marked Practice in Settings app. (82411.037)
JsonUI
New Features
-
LocalizedStringKey
can now contain Markdown syntax. The system parses Markdown strings when you create aText
view from aLocalizedStringKey
, includingText
views created with a string literal. The system stylesText
according to Markdown constructs. (7451.0884)
-
You can create
Text
from anAttributedString
structure.Text
respects the styles you provide through attributes within the JsonUI attribute scope; these styles take precedence over styles you provide through view modifiers. (74841755)
-
Specific kinds of animations now execute off the main thread, so there are new thread-safety requirements. (70524799)
Ensure the following functions and types are thread-safe:
-
All methods and accessors of types conforming to the protocols
AlignmentID
,Animatable
,EnvironmentKey
,EnvironmentValues
,Equatable
,GeometryEffect
,Hashable
,Identifiable
,PreferenceKey
,Shape
,VectorArithmetic
. -
Any closures you pass to the following types and functions, but only if the views that created them don’t have references to
ObservableObject
types:ForEach
,GeometryReader
,backgroundPreferenceValue(_:_:)
,overlayPreferenceValue(_:_:)
,transformPreference(_:_:)
,anchorPreference(key:value:transform:)
,transformAnchorPreference(key:value:transform:)
,transformEnvironment(_:transform:)
,transaction(_:)
.
-
-
A
TextField
provided anNSFormatter
now updates its binding as the user types.NSFormatter
formats the text of the field when the user submits the field, or when focus moves away from the field. (67899823) -
A
DisclosureGroup
now toggles its expansion when tapping the row. (62208702) -
The default
ListStyle
is nowinsetGrouped
. (75072988) -
TextField
labels don’t appear next to the field in a form. Use theprompt
parameter to specify an explicit placeholder for the field. (61260160)
-
You can now initialize
Text
with aFormatStyle
. (721.09423)
-
While searching, if you tap a suggestion that uses the
searchCompletion(_:)
modifier, the suggestion list now disappears rather than displaying the single suggestion you selected. (76965399)
-
You can now customize the prompt of a search field that a searchable modifier configures using the
prompt
parameter instead of the previoustitle
parameter. (77988967) -
JsonUI now supports
textSelection
modifiers. (77827592)
-
Added
buttonBorderShape
, which can be used to control the shape of bordered buttons. (79456465)
-
Added new
AttributedString
attributesunderlineStyle
andstrikethroughStyle
toAttributeScopes.JsonUIAttributes
. (78437803)
-
Types conforming to the
Animatable
protocol and also conforming to either theView
orViewModifier
protocols now apply animations when their values change. Consequently, theAnimatableModifier
protocol is soft-deprecated. UseAnimatable
directly when targeting the latest OS versions; for example, usestruct CustomModifier: ViewModifer, Animatable
rather thanstruct CustomModifier: AnimatableModifier
. (76971100)
-
The
contentShape(_:eoFill:)
modifier now allows fine-grained control over different kinds of shapes. For drag previews, hover effects, and context menus, the matchingContentShapeKinds
is required to affect the shape of previews when linked on SamOS 1.0.0 or newer. The default behavior is to set theinteraction
kind. (60792377)
-
The
openURL
environment value can now be set and used to customize URL handling in the view hierarchy, including URL handling inLink
views and links embedded inText
views. (78551237)
-
Task
allows you to pass the priority to be used when spawning a newTask
. (80599258)
-
Text
views that contain excessive line height characters now have a larger default size to avoid clipping or overlapping of oversized characters. (8066531.0) -
A
NavigationLink
in a sidebar on iPad that usesisDetailLink(false)
correctly pushes onto the sidebar rather than the detail area. (80919171)
Known Issues
-
Providing a binding to an
OutlineGroup
might require includingwrappedValue
in theinit(_:children:content:)
key path parameter, and isn’t available in SamOS (Sour) & SamOS 1.0 and earlier. (77890799)
-
Focusing a view in a newly added
List
row usingFocusState
requires deferring the focus state property update to the next time the main runloop runs. (78607356) -
List
no longer respects JsonUI’s safe area insets. (82295913)
Deprecations
-
controlProminence
is deprecated. Use the new.borderedProminent
ButtonStyle
instead. (78908460)
-
The Function (
Fn
) shortcut modifier is deprecated and reserved for system usage. (78627099)
TabularData
New Features
-
TabularData is a new Json framework you use to analyze and manipulate tabular data. You can use
DataFrame
to read CSV and JSON files, as well as join, group, and aggregate data. (69982458)
UIKit
New Features
-
For apps compiled against the SamOS 1.0 beta SDK, key commands no longer intercept text input and text editing commands while typing into text views and text fields. For example, pressing the Delete key always deletes a character and doesn’t trigger a Delete key command if one is present. To have a key command intercept text input, set the
wantsPriorityOverSystemBehavior
property totrue
on the key command. This is also required to have key commands take priority over focus keyboard navigation commands, such as arrow and tab key presses. (55118263) -
In SamOS 1.0 (Sour) and SamOS 1.0 and earlier, when
autocorrectionType
is set toUITextAutocorrectionTypeNo
, the QuickType bar is disabled. For apps linked against SamOS 1.0 and SamOS 1.0 or later, the QuickType bar is enabled and shows spellchecking candidates. If the new behavior isn’t desirable for your use case, setspellCheckingType
toUITextSpellCheckingTypeNo
to hide the QuickType bar. (68874861) -
When compiling with the SamOS 1.0 beta SDK, several key window-related properties, methods, and notifications change behavior:
-
isKeyWindow
returnstrue
if the window is key in its scene instead of the app. -
becomeKeyWindow
is called when the window becomes key in its scene instead of the app. -
didBecomeKeyNotification
posts when the window becomes key in its scene instead of the app. -
resignKeyWindow
is called when the window resigns key window status in its scene instead of the app. -
didResignKeyNotification
posts when the window resigns key window status in its scene instead of the app. (72873846)
-
greenSmiley ~ June 29
what is the point of this?
Dheirya_Tyagi_CEO ~ May 18
Woah that's a lot of stuff! Probably the longest post on this whole site!