{"id":28435174,"url":"https://github.com/skiptools/skip-foundation","last_synced_at":"2026-03-13T00:02:52.067Z","repository":{"id":189264010,"uuid":"680365033","full_name":"skiptools/skip-foundation","owner":"skiptools","description":"Foundation module for Skip apps.","archived":false,"fork":false,"pushed_at":"2025-08-01T23:16:39.000Z","size":1810,"stargazers_count":15,"open_issues_count":9,"forks_count":10,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-08-01T23:38:41.512Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://skip.tools","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/skiptools.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.LGPL","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-08-19T02:38:00.000Z","updated_at":"2025-08-01T23:16:42.000Z","dependencies_parsed_at":"2023-12-21T04:35:46.609Z","dependency_job_id":"5ebee020-eca9-41bd-b6b3-b206adab4e76","html_url":"https://github.com/skiptools/skip-foundation","commit_stats":null,"previous_names":["skiptools/skip-foundation"],"tags_count":168,"template":false,"template_full_name":null,"purl":"pkg:github/skiptools/skip-foundation","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skiptools%2Fskip-foundation","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skiptools%2Fskip-foundation/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skiptools%2Fskip-foundation/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skiptools%2Fskip-foundation/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/skiptools","download_url":"https://codeload.github.com/skiptools/skip-foundation/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skiptools%2Fskip-foundation/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":270850051,"owners_count":24656443,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-17T02:00:09.016Z","response_time":129,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-06-05T20:06:51.004Z","updated_at":"2026-03-10T21:04:35.686Z","avatar_url":"https://github.com/skiptools.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# SkipFoundation\n\nFoundation support for [Skip Lite](https://skip.dev) transpiled Swift.\n\nSee what API is currently implemented [here](#foundation-support).\n\n## About \n\nSkipFoundation vends the `skip.foundation` Kotlin package. It is a reimplementation of Foundation for Kotlin on Android. Its goal is to mirror as much of Foundation as possible, allowing Skip developers to use Foundation API with confidence.\n\nSkipFoundation also implements portions of the CryptoKit API.\n\n## Dependencies\n\nSkipFoundation depends on the [skip](https://source.skip.dev/skip) transpiler plugin as well as the [SkipLib](https://github.com/skiptools/skip-lib) package.\n\nSkipFoundation is part of the *Skip Core Frameworks* and is not intended to be imported directly.\nThe module is transparently adopted through the translation of `import Foundation` into `import skip.foundation.*` by the Skip transpiler.\n\n### Android Libraries\n\n- SkipFoundation includes source code from the [UrlEncoderUtil](https://github.com/ethauvin/urlencoder) library to implement percent escaping.\n\n## Status\n\nSkipFoundation supports many of the Foundation framework's most common APIs, but there are many more that are not yet ported. See [Foundation Support](#foundation-support).\n\nWhen you want to use a Foundation API that has not been implemented, you have options. You can try to find a workaround using only supported API, embed Kotlin code directly as described in the [Skip docs](https://skip.dev/docs), or [add support to SkipFoundation](#contributing). If you choose to enhance SkipFoundation itself, please consider [contributing](#contributing) your code back for inclusion in the official release.\n\n## Contributing\n\nWe welcome contributions to SkipFoundation. The Skip product [documentation](https://skip.dev/docs/contributing/) includes helpful instructions and tips on local Skip library development. \n\nThe most pressing need is to implement more of the most-used Foundation APIs.\nTo help fill in unimplemented API in SkipFoundation:\n\n1. Find unimplemented API.\n1. Write an appropriate Kotlin implementation. See [Implementation Strategy](#implementation-strategy) below.\n1. Edit the corresponding tests to make sure they are no longer skipped, and that they pass. If there aren't existing tests, write some. See [Tests](#tests).\n1. [Submit a PR.](https://github.com/skiptools/skip-foundation/pulls)\n\nOther forms of contributions such as test cases, comments, and documentation are also welcome!\n\n## Implementation Strategy\n\nThe goal of SkipFoundation is to mirror the Foundation framework for Android. When possible, `SkipFoundation` types wrap corresponding Kotlin or Java foundation types. When a `SkipFoundation` type wraps a corresponding Kotlin or Java type, please conform to the `skip.lib.KotlinConverting\u003cT\u003e` protocol, which means adding a `.kotlin()` function:\n\n```swift\n#if SKIP\nextension Calendar: KotlinConverting\u003cjava.util.Calendar\u003e {\n    public override func kotlin(nocopy: Bool = false) -\u003e java.util.Calendar {\n        return nocopy ? platformValue : platformValue.clone() as java.util.Calendar\n    }\n}\n#endif\n```\n\nYou should also implement a constructor that accepts the equivalent Kotlin or Java object.\n\n## Tests\n\nSkipFoundation's `Tests/` folder contains the entire set of official Foundation framework test cases. Through the magic of [SkipUnit](https://github.com/skiptools/skip-unit), this allows us to validate our SkipFoundation API implementations on Android against the same test suite used by the Foundation team on iOS.\n\nIt is SkipFoundation's goal to include - and pass - as much of the official test suite as possible.\n\n## Foundation Support\n\nThe following table summarizes SkipFoundation's Foundation API support on Android. Anything not listed here is likely not supported. Note that in your iOS-only code - i.e. code within `#if !SKIP` blocks - you can use any Foundation API you want.\n\nSupport levels:\n\n  - ✅ – Full\n  - 🟢 – High\n  - 🟡 – Medium \n  - 🟠 – Low\n\n\u003ctable\u003e\n  \u003cthead\u003e\u003cth\u003eSupport\u003c/th\u003e\u003cth\u003eAPI\u003c/th\u003e\u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟠\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eAttributedString\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003einit()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(stringLiteral: String)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(markdown: String)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(localized keyAndValue: String.LocalizationValue, table: String? = nil, bundle: Bundle? = nil, locale: Locale? = nil, comment: String? = nil)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(localized key: String, table: String? = nil, bundle: Bundle? = nil, locale: Locale = Locale.current, comment: String? = nil)\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eBundle\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003estatic var main: Bundle\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic var module: Bundle\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit?(path: String)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit?(url: URL)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(for forClass: AnyClass)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar bundleURL: URL\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar resourceURL: URL?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar bundlePath: String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar resourcePath: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc url(forResource: String? = nil, withExtension: String? = nil, subdirectory: String? = nil, localization: String? = nil) -\u003e URL?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc path(forResource: String? = nil, ofType: String? = nil, inDirectory: String? = nil, forLocalization: String? = nil) -\u003e String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar developmentLocalization: String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar localizations: [String]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc localizedString(forKey key: String, value: String?, table tableName: String?) -\u003e String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar localizations: [String]\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eCalendar\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n            \u003cli\u003eOnly \u003ccode\u003e.gregorian\u003c/code\u003e and \u003ccode\u003e.iso8601\u003c/code\u003e identifiers are supported\u003c/li\u003e           \n\u003cli\u003e\u003ccode\u003einit(identifier: Calendar.Identifier)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic var current: Calendar\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar locale: Locale\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar timeZone: TimeZone\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar identifier: Calendar.Identifier\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar eraSymbols: [String]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar monthSymbols: [String]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar shortMonthSymbols: [String]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar weekdaySymbols: [String]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar shortWeekdaySymbols: [String]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar amSymbol: String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar pmSymbol: String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc component(_ component: Calendar.Component, from date: Date) -\u003e Int\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc minimumRange(of component: Calendar.Component) -\u003e Range\u0026lt;Int\u003e?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc maximumRange(of component: Calendar.Component) -\u003e Range\u0026lt;Int\u003e?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc range(of smaller: Calendar.Component, in larger: Calendar.Component, for date: Date) -\u003e Range\u0026lt;Int\u003e?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc dateInterval(of component: Calendar.Component, for date: Date) -\u003e DateInterval?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc dateInterval(of component: Calendar.Component, start: inout Date, interval: inout TimeInterval, for date: Date) -\u003e Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc ordinality(of smaller: Calendar.Component, in larger: Calendar.Component, for date: Date) -\u003e Int?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc date(from components: DateComponents) -\u003e Date?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc date(byAdding components: DateComponents, to date: Date, wrappingComponents: Bool = false) -\u003e Date?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc date(byAdding component: Calendar.Component, value: Int, to date: Date, wrappingComponents: Bool = false) -\u003e Date?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc date(bySetting component: Calendar.Component, value: Int, of date: Date) -\u003e Date?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc date(bySettingHour hour: Int, minute: Int, second: Int, of date: Date, matchingPolicy: Calendar.MatchingPolicy = .nextTime, repeatedTimePolicy: Calendar.RepeatedTimePolicy = .first, direction: Calendar.SearchDirection = .forward) -\u003e Date?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc date(_ date: Date, matchesComponents components: DateComponents) -\u003e Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc dateComponents(in zone: TimeZone? = nil, from date: Date) -\u003e DateComponents\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc dateComponents(_ components: Set\u0026lt;Calendar.Component\u003e, from start: Date, to end: Date) -\u003e DateComponents\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc dateComponents(_ components: Set\u0026lt;Calendar.Component\u003e, from date: Date) -\u003e DateComponents\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc startOfDay(for date: Date) -\u003e Date\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc compare(_ date1: Date, to date2: Date, toGranularity component: Calendar.Component) -\u003e ComparisonResult\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc isDate(_ date1: Date, equalTo date2: Date, toGranularity component: Calendar.Component) -\u003e Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc isDate(_ date1: Date, inSameDayAs date2: Date) -\u003e Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc isDateInToday(_ date: Date) -\u003e Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc isDateInWeekend(_ date: Date) -\u003e Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc enumerateDates(startingAfter start: Date, matching components: DateComponents, matchingPolicy: Calendar.MatchingPolicy, repeatedTimePolicy: Calendar.RepeatedTimePolicy = .first, direction: Calendar.SearchDirection = .forward, using block: (_ result: Date?, _ exactMatch: Bool, _ stop: inout Bool) -\u003e Void)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc nextDate(after date: Date, matching components: DateComponents, matchingPolicy: Calendar.MatchingPolicy, repeatedTimePolicy: Calendar.RepeatedTimePolicy = .first, direction: Calendar.SearchDirection = .forward) -\u003e Date?)\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e🟠\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eCharacterSet\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n            \u003cli\u003eVended character sets are not complete\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic var whitespaces: CharacterSet\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic var whitespacesAndNewlines: CharacterSet\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic var newlines: CharacterSet\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic var urlHostAllowed: CharacterSet\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic var urlFragmentAllowed: CharacterSet\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic var urlPathAllowed: CharacterSet\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic var urlQueryAllowed: CharacterSet\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(charactersIn: String)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc insert(_ character: Unicode.Scalar) -\u003e (inserted: Bool, memberAfterInsert: Unicode.Scalar)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emutating func insert(charactersIn: String)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc update(with character: Unicode.Scalar) -\u003e Unicode.Scalar?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc remove(_ character: Unicode.Scalar) -\u003e Unicode.Scalar?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emutating func remove(charactersIn: String)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc contains(_ member: Unicode.Scalar) -\u003e Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc union(_ other: CharacterSet) -\u003e CharacterSet\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emutating func formUnion(_ other: CharacterSet)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc intersection(_ other: CharacterSet) -\u003e CharacterSet\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emutating func formIntersection(_ other: CharacterSet)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc subtracting(_ other: CharacterSet)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emutating func subtract(_ other: CharacterSet)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc symmetricDifference(_ other: CharacterSet) -\u003e CharacterSet\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emutating func formSymmetricDifference(_ other: CharacterSet)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc isSuperset(of other: CharacterSet) -\u003e Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc isSubset(of other: CharacterSet) -\u003e Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc isDisjoint(with other: CharacterSet) -\u003e Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc isStrictSubset(of other: CharacterSet) -\u003e Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc isStrictSuperset(of other: CharacterSet) -\u003e Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar isEmpty: Bool\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eCocoaError\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eComparisonResult\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e🟠\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eCryptoKit\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n            \u003cli\u003eSee the \u003ca href=\"#cryptokit\"\u003eCryptoKit\u003c/a\u003e topic for details on supported API.\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eCustomNSError\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eData\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003eData\u003c/code\u003e does \u003cstrong\u003enot\u003c/strong\u003e conform to \u003ccode\u003eCollection\u003c/code\u003e protocols\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(count: Int)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(capacity: Int)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(_ data: Data)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(_ bytes: [UInt8], length: Int? = nil)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(_ checksum: Digest)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit?(base64Encoded: String, options: Data.Base64DecodingOptions = [])\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(contentsOfFile filePath: String) throws\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(contentsOf url: URL, options: Data.ReadingOptions = [])\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar count: Int\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar isEmpty: Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar bytes: [UInt8]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar utf8String: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc base64EncodedString() -\u003e String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc sha256() -\u003e Data\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc subdata(in range: Range\u003cInt\u003e) -\u003e Data\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc hex() -\u003e String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emutating func reserveCapacity(_ minimumCapacity: Int)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emutating func append(_ other: Data)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emutating func append(contentsOf bytes: [UInt8])\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emutating func append(contentsOf data: Data)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003esubscript(index: Int) -\u003e UInt8\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc write(to url: URL, options: Data.WritingOptions = []) throws\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eDate\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003eFormatting functions not supported with the exception of:\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc ISO8601Format(_ style: Date.ISO8601FormatStyle = .iso8601) -\u003e String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc formatted(date: Date.FormatStyle.DateStyle, time: Date.FormatStyle.TimeStyle) -\u003e String\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eDateComponents\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n            \u003cli\u003e\u003ccode\u003enanosecond\u003c/code\u003e, \u003ccode\u003eyearForWeekOfYear\u003c/code\u003e are not supported\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eDateFormatter\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003evar dateStyle: DateFormatter.Style\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar timeStyle: DateFormatter.Style\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar isLenient: Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar dateFormat: String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc setLocalizedDateFormatFromTemplate(dateFormatTemplate: String)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic func dateFormat(fromTemplate: String, options: Int, locale: Locale?) -\u003e String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic func localizedString(from date: Date, dateStyle: DateFormatter.Style, timeStyle: DateFormatter.Style) -\u003e String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar timeZone: TimeZone?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar locale: Locale?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar calendar: Calendar?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc date(from string: String) -\u003e Date?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc string(from date: Date) -\u003e String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc string(for obj: Any?) -\u003e String?\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eDateInterval\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e🟠\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eDecimal\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003eAliased to \u003ccode\u003ejava.math.BigDecimal\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟠\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eDispatchQueue\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003estatic let main: DispatchQueue\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc async(execute: () -\u003e Void)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc asyncAfter(deadline: DispatchTime, execute: () -\u003e Void)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc asyncAfter(wallDeadline: DispatchWallTime, execute: () -\u003e Void)\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eFileManager\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003estatic let `default`: FileManager\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elet temporaryDirectory: URL\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elet currentDirectoryPath: String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc createSymbolicLink(at url: URL, withDestinationURL destinationURL: URL) throws\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc createSymbolicLink(atPath path: String, withDestinationPath destinationPath: String) throws\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc createDirectory(at url: URL, withIntermediateDirectories: Bool, attributes: [FileAttributeKey : Any]? = nil) throws\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc createDirectory(atPath path: String, withIntermediateDirectories: Bool, attributes: [FileAttributeKey : Any]? = nil) throws\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc destinationOfSymbolicLink(atPath path: String) throws\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc attributesOfItem(atPath path: String) throws -\u003e [FileAttributeKey: Any]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc setAttributes(_ attributes: [FileAttributeKey : Any], ofItemAtPath path: String) throws\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc createFile(atPath path: String, contents: Data? = nil, attributes: [FileAttributeKey : Any]? = nil) -\u003e Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc copyItem(atPath path: String, toPath: String) throws\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc copyItem(at url: URL, to: URL) throws\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc moveItem(atPath path: String, toPath: String) throws\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc moveItem(at path: URL, to: URL) throws\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc subpathsOfDirectory(atPath path: String) throws -\u003e [String]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc subpaths(atPath path: String) -\u003e [String]?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc removeItem(atPath path: String) throws\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc removeItem(at url: URL) throws\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc fileExists(atPath path: String) -\u003e Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc isReadableFile(atPath path: String) -\u003e Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc isExecutableFile(atPath path: String) -\u003e Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc isDeletableFile(atPath path: String) -\u003e Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc isWritableFile(atPath path: String) -\u003e Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc contentsOfDirectory(at url: URL, includingPropertiesForKeys: [URLResourceKey]?) throws -\u003e [URL]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc contentsOfDirectory(atPath path: String) throws -\u003e [String]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc url(for directory: FileManager.SearchPathDirectory, in domain: FileManager.SearchPathDomainMask, appropriateFor url: URL?, create shouldCreate: Bool) throws -\u003e URL\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eHTTPURLResponse\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eIndexPath\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n            \u003cli\u003eCannot assign from an array literal\u003c/li\u003e\n            \u003cli\u003eCannot assign to a range subscript\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eIndexSet\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n            \u003cli\u003eThis is an \u003cb\u003einefficient\u003c/b\u003e implementation using an internal \u003ccode\u003eSet\u003c/code\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ccode\u003einit(integersIn range: any RangeExpression\u0026lt;Int\u003e)\u003c/code\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ccode\u003einit(integer: Int)\u003c/code\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ccode\u003einit()\u003c/code\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ccode\u003efunc integerGreaterThan(_ integer: Int) -\u003e Int?\u003c/code\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ccode\u003efunc integerLessThan(_ integer: Int) -\u003e Int?\u003c/code\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ccode\u003efunc integerGreaterThanOrEqualTo(_ integer: Int) -\u003e Int?\u003c/code\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ccode\u003efunc integerLessThanOrEqualTo(_ integer: Int) -\u003e Int?\u003c/code\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ccode\u003efunc count(in range: any RangeExpression\u0026lt;Int\u003e) -\u003e Int\u003c/code\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ccode\u003efunc contains(integersIn range: any RangeExpression\u0026lt;Int\u003e) -\u003e Bool\u003c/code\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ccode\u003efunc contains(integersIn indexSet: IntSet) -\u003e Bool\u003c/code\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ccode\u003efunc intersects(integersIn range: any RangeExpression\u0026lt;Int\u003e) -\u003e Bool\u003c/code\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ccode\u003emutating func insert(integersIn range: any RangeExpression\u0026lt;Int\u003e)\u003c/code\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ccode\u003emutating func remove(integersIn range: any RangeExpression\u0026lt;Int\u003e)\u003c/code\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ccode\u003efunc filteredIndexSet(in range: any RangeExpression\u0026lt;Int\u003e, includeInteger: (Int) throws -\u003e Bool) rethrows -\u003e IndexSet\u003c/code\u003e\u003c/li\u003e\n            \u003cli\u003e\u003ccode\u003efunc filteredIndexSet(includeInteger: (Int) throws -\u003e Bool) rethrows -\u003e IndexSet\u003c/code\u003e\u003c/li\u003e\n            \u003cli\u003eSupports the full \u003ccode\u003eSetAlgebra\u003c/code\u003e protocol\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eISO8601DateFormatter\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003estatic func string(from date: Date, timeZone: TimeZone) -\u003e String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar timeZone: TimeZone?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc date(from string: String) -\u003e Date?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc string(from date: Date) -\u003e String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc string(for obj: Any?) -\u003e String?\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eJSONDecoder\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eJSONEncoder\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eJSONSerialization\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eLocale\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eLocalizedError\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eLocalizedStringResource\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eOSLog.Logger\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003eLog messages on Android can be viewed with the adb logcat command, or in the Android Studio console\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eNotification\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eNotificationCenter\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003estatic let default: NotificationCenter\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc addObserver(forName name: Notification.Name?, object: Any?, queue: OperationQueue?, using block: (Notification) -\u003e Void) -\u003e Any\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc removeObserver(_ observer: Any)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc post(_ notification: Notification)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc post(name: Notification.Name, object: Any?, userInfo: [AnyHashable: Any]? = nil)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc notifications(named: Notification.Name, object: AnyObject? = nil) -\u003e Notifications\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAlso see support for \u003ccode\u003eNotificationCenter.publisher\u003c/code\u003e in the \u003ccode\u003eSkipModel\u003c/code\u003e module\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eNSError\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eNSLock\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eNSLocalizedString\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eNSRecursiveLock\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eNumber\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003einit(value: Int8)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(value: Int16)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(value: Int32)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(value: Int64)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(value: UInt8)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(value: UInt16)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(value: UInt32)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(value: UInt64)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(value: Float)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(value: Double)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(_ value: Int8)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(_ value: Int16)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(_ value: Int32)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(_ value: Int64)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(_ value: UInt8)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(_ value: UInt16)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(_ value: UInt32)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(_ value: UInt64)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(_ value: Float)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(_ value: Double)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar doubleValue: Double\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar intValue: Int\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar longValue: Int64\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar int64Value: Int64\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar int32Value: Int32\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar int16Value: Int16\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar int8Value: Int8\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eNumberFormatter\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003eThe following styles are supported: \u003ccode\u003e.none, .decimal, .currency, .percent\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar numberStyle: NumberFormatter.Style\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar locale: Locale?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar format: String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar groupingSize: Int\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar generatesDecimalNumbers: Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar alwaysShowsDecimalSeparator: Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar usesGroupingSeparator: Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar multiplier: NSNumber?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar groupingSeparator: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar percentSymbol: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar currencySymbol: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar zeroSymbol: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar minusSign: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar exponentSymbol: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar negativeInfinitySymbol: String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar positiveInfinitySymbol: String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar internationalCurrencySymbol: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar decimalSeparator: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar currencyCode: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar currencyDecimalSeparator: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar notANumberSymbol: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar positiveSuffix: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar negativeSuffix: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar positivePrefix: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar negativePrefix: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar maximumFractionDigits: Int\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar minimumFractionDigits: Int\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar maximumIntegerDigits: Int\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar minimumIntegerDigits: Int\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc string(from number: NSNumber) -\u003e String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc string(from number: Int) -\u003e String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc string(for object: Any?) -\u003e String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc number(from string: String) -\u003e NSNumber?\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟠\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eOperationQueue\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003estatic let main: OperationQueue \u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eOSAllocatedUnfairLock\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003einit()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(initialState: State)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(uncheckedState initialState: State)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc lock()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc unlock()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc lockIfAvailable() -\u003e Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc withLockUnchecked\u0026lt;R\u003e(_ body: (inout State) throws -\u003e R) rethrows -\u003e R\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc func withLockUnchecked\u0026lt;R\u003e(_ body: () throws -\u003e R) rethrows -\u003e R\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc withLock\u0026lt;R\u003e(_ body: (inout State) throws -\u003e R) rethrows -\u003e R\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc withLock\u0026lt;R\u003e(_ body: () throws -\u003e R) rethrows -\u003e R\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc withLockIfAvailableUnchecked\u0026lt;R\u003e(_ body: (inout State) throws -\u003e R) rethrows -\u003e R?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc withLockIfAvailableUnchecked\u0026lt;R\u003e(_ body: () throws -\u003e R) rethrows -\u003e R?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc withLockIfAvailable\u0026lt;R\u003e(_ body: @Sendable (inout State) throws -\u003e R) rethrows -\u003e R?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc withLockIfAvailable\u0026lt;R\u003e(_ body: () throws -\u003e R) rethrows -\u003e R?\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003ePOSIXError\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eProcessInfo\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003estatic let processInfo: ProcessInfo\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar globallyUniqueString: String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar systemProperties: [String: String]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar environment: [String : String]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar processIdentifier: Int32\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar arguments: [String]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar hostName: String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar processorCount: Int\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar operatingSystemVersionString: String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar isMacCatalystApp: Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar isiOSAppOnMac: Bool\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟠\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003ePropertyListSerialization\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003estatic func propertyList(from: Data, options: PropertyListSerialization.ReadOptions = [], format: Any?) throws -\u003e [String: String]?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eIgnores any given \u003ccode\u003eoptions\u003c/code\u003e and \u003ccode\u003eformat\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟠\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eRelativeDateTimeFormatter\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003elocalizedString(from dateComponents: DateComponents) -\u003e String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc localizedString(fromTimeInterval timeInterval: TimeInterval) -\u003e String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc localizedString(for date: Date, relativeTo referenceDate: Date) -\u003e String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc string(for obj: Any?) -\u003e String?\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟠\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eRunLoop\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003estatic let main: RunLoop\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eRecoverableError\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eString\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003eCore \u003ccode\u003eString\u003c/code\u003e API is defined in \u003ccode\u003eSkipLib\u003c/code\u003e. These extensions are defined in \u003ccode\u003eSkipFoundation\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(data: Data, encoding: StringEncoding)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(bytes: [UInt8], encoding: StringEncoding)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(contentsOf: URL)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar capitalized: String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar deletingLastPathComponent: String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc replacingOccurrences(of search: String, with replacement: String) -\u003e String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc components(separatedBy separator: String) -\u003e [String]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc trimmingCharacters(in set: CharacterSet) -\u003e String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc addingPercentEncoding(withAllowedCharacters: CharacterSet) -\u003e String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar removingPercentEncoding: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar utf8Data: Data\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar utf8: [UInt8]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar utf16: [UInt8]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar utf32: [UInt8]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar unicodeScalars: [UInt8]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc data(using: StringEncoding, allowLossyConversion: Bool = true) -\u003e Data?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc write(to url: URL, atomically useAuxiliaryFile: Bool, encoding enc: StringEncoding) throws\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc write(toFile path: String, atomically useAuxiliaryFile: Bool, encoding enc: StringEncoding) throws\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eStringLocalizationValue\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003efunc strlen(_ string: String) -\u003e Int\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003efunc strncmp(_ str1: String, _ str2: String) -\u003e Int\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eThread\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003ecurrent\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emain\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003eisMainThread\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003esleep(for: TimeInterval)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003esleep(until: Date)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ecallStackSymbols\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eStarting and stopping threads is not implemented, nor is constructing a Thread with a block\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eTimer\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003einit(timeInterval: TimeInterval, repeats: Bool, block: (Timer) -\u003e Void)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic func scheduledTimer(withTimeInterval interval: TimeInterval, repeats: Bool, block: (Timer) -\u003e Void) -\u003e Timer\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar timeInterval: TimeInterval\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc invalidate()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar isValid: Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar userInfo: Any?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eAlso see support for \u003ccode\u003eTimer.publish\u003c/code\u003e in the \u003ccode\u003eSkipModel\u003c/code\u003e module\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eTimeZone\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003estatic var current: TimeZone\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic var autoupdatingCurrent: TimeZone\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic var `default`: TimeZone\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic var system: TimeZone\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic var local: TimeZone\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic var gmt: TimeZone\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit?(identifier: String)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit?(abbreviation: String)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit?(secondsFromGMT seconds: Int)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar identifier: String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc abbreviation(for date: Date = Date()) -\u003e String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc secondsFromGMT(for date: Date = Date()) -\u003e Int\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc isDaylightSavingTime(for date: Date = Date()) -\u003e Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc daylightSavingTimeOffset(for date: Date = Date()) -\u003e TimeInterval\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar nextDaylightSavingTimeTransition: Date?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc nextDaylightSavingTimeTransition(after date: Date) -\u003e Date?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic var knownTimeZoneIdentifiers: [String]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic var knownTimeZoneNames: [String]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic var abbreviationDictionary: [String : String]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc localizedName(for style: NameStyle, locale: Locale?) -\u003e String?\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eUnknownNSError\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eURL\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003einit(_ url: URL)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit?(string: String, relativeTo baseURL: URL? = nil)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit?(string: String, encodingInvalidCharacters: Bool)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(fileURLWithPath path: String, isDirectory: Bool? = nil, relativeTo base: URL? = nil)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic func currentDirectory() -\u003e URL\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic var homeDirectory: URL\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic var temporaryDirectory: URL\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic var cachesDirectory: URL\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic var documentsDirectory: URL\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003elet baseURL: URL?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar scheme: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar host: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc host(percentEncoded: Bool = true) -\u003e String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar port: Int?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar path: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc path(percentEncoded: Bool = true) -\u003e String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar hasDirectoryPath: Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar query: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc query(percentEncoded: Bool = true) -\u003e String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar fragment: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc fragment(percentEncoded: Bool = true) -\u003e String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar standardized: URL\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar standardizedFileURL: URL\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emutating func standardize()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar absoluteURL: URL\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar absoluteString: String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar relativePath: String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar relativeString: String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar pathComponents: [String]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar lastPathComponent: String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar pathExtension: String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar isFileURL: Bool\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc appendingPathComponent(_ pathComponent: String) -\u003e URL\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emutating func appendPathComponent(_ pathComponent: String)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc appendingPathComponent(_ pathComponent: String, isDirectory: Bool) -\u003e URL\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emutating func appendPathComponent(_ pathComponent: String, isDirectory: Bool)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc appendingPathExtension(_ pathExtension: String) -\u003e URL\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emutating func appendPathExtension(_ pathExtension: String)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc deletingLastPathComponent() -\u003e URL\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emutating func deleteLastPathComponent() -\u003e URL\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc deletingPathExtension() -\u003e URL\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emutating func deletePathExtension()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc resolvingSymlinksInPath() -\u003e URL\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003emutating func resolveSymlinksInPath() -\u003e URL\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc checkResourceIsReachable() throws -\u003e Bool\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eURLComponents\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003einit()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit?(url: URL, resolvingAgainstBaseURL resolve: Bool)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit?(string: String)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit?(string: String, encodingInvalidCharacters: Bool)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar url: URL?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc url(relativeTo base: URL?) -\u003e URL?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar string: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar scheme: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar host: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar port: Int?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar path: String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar fragment: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar query: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar queryItems: [URLQueryItem]?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar percentEncodedHost: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar encodedHost: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar percentEncodedPath: String\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar percentEncodedQuery: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar percentEncodedFragment: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar percentEncodedQueryItems: [URLQueryItem]?\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eURLError\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eURLQueryItem\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eURLRequest\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003eMany properties are currently ignored by \u003ccode\u003eURLSession\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ehttpBodyStream\u003c/code\u003e is not supported\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e✅\u003c/td\u003e\n      \u003ctd\u003e\u003ccode\u003eURLResponse\u003c/code\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eURLSession\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003estatic let shared: URLSession\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(configuration: URLSessionConfiguration, delegate: URLSessionDelegate? = nil, delegateQueue: OperationQueue? = nil)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar configuration: URLSessionConfiguration\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar sessionDescription: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar delegate: URLSessionDelegate?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar delegateQueue: OperationQueue?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc data(for request: URLRequest, delegate: URLSessionTaskDelegate? = nil) async throws -\u003e (Data, URLResponse)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc data(from url: URL, delegate: URLSessionTaskDelegate? = nil) async throws -\u003e (Data, URLResponse)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc upload(for request: URLRequest, fromFile fileURL: URL, delegate: URLSessionTaskDelegate? = nil) async throws -\u003e (Data, URLResponse)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc upload(for request: URLRequest, from bodyData: Data, delegate: URLSessionTaskDelegate? = nil) async throws -\u003e (Data, URLResponse)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc bytes(for request: URLRequest, delegate: URLSessionTaskDelegate? = nil) async throws -\u003e (AsyncBytes, URLResponse)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc bytes(from url: URL, delegate: URLSessionTaskDelegate? = nil) async throws -\u003e (AsyncBytes, URLResponse)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc dataTask(with url: URL, completionHandler: ((Data?, URLResponse?, Error?) -\u003e Void)? = nil) -\u003e URLSessionDataTask\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc dataTask(with request: URLRequest, completionHandler: ((Data?, URLResponse?, Error?) -\u003e Void)? = nil) -\u003e URLSessionDataTask\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc uploadTask(with: URLRequest, from: Data?, completionHandler: ((Data?, URLResponse?, Error?) -\u003e Void)? = nil) -\u003e URLSessionUploadTask\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc uploadTask(with: URLRequest, fromFile: URL, completionHandler: ((Data?, URLResponse?, Error?) -\u003e Void)?) -\u003e URLSessionUploadTask\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc webSocketTask(with url: URL) -\u003e URLSessionWebSocketTask\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc webSocketTask(with request: URLRequest) -\u003e URLSessionWebSocketTask\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc webSocketTask(with url: URL, protocols: [String]) -\u003e URLSessionWebSocketTask\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc finishTasksAndInvalidate()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc getTasksWithCompletionHandler(_ handler: ([URLSessionDataTask], [URLSessionUploadTask], [URLSessionDownloadTask]) -\u003e Void)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar tasks: ([URLSessionDataTask], [URLSessionUploadTask], [URLSessionDownloadTask])\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc getAllTasks(handler: ([URLSessionTask]) -\u003e Void)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar allTasks: [URLSessionTask]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc invalidateAndCancel()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estruct AsyncBytes: AsyncSequence\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e🟡\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eURLSessionConfiguration\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003eMany properties are currently ignored by \u003ccode\u003eURLSession\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eURLSessionDataTask\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003estatic let defaultPriority: Float\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic let lowPriority: Float\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic let highPriority: Float\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar taskIdentifier: Int\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar taskDescription: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar originalRequest: URLRequest?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar delegate: URLSessionTaskDelegate?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar state: URLSessionTask.State\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar error: Error?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar priority: Float\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc suspend()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc resume()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc cancel()\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eURLSessionUploadTask\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003estatic let defaultPriority: Float\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic let lowPriority: Float\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic let highPriority: Float\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar taskIdentifier: Int\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar taskDescription: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar originalRequest: URLRequest?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar delegate: URLSessionTaskDelegate?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar state: URLSessionTask.State\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar error: Error?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar priority: Float\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc suspend()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc resume()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc cancel()\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eURLSessionWebSocketTask\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003estatic let defaultPriority: Float\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic let lowPriority: Float\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic let highPriority: Float\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar taskIdentifier: Int\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar taskDescription: String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar originalRequest: URLRequest?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar delegate: URLSessionTaskDelegate?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar state: URLSessionTask.State\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar error: Error?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar priority: Float\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc suspend()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc resume()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc cancel()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc cancel(with closeCode: CloseCode, reason: Data?)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar maximumMessageSize: Int\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar closeCode: CloseCode\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar closeReason: Data?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc send(_ message: Message) async throws -\u003e Void\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc receive() async throws -\u003e Message\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eUserDefaults\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003estatic var standard: UserDefaults\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit(suiteName: String?)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc register(defaults registrationDictionary: [String : Any])\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc set(_ value: Int, forKey defaultName: String)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc set(_ value: Boolean, forKey defaultName: String)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc set(_ value: Double, forKey defaultName: String)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc set(_ value: String, forKey defaultName: String)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc set(_ value: Any?, forKey defaultName: String)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc removeObject(forKey defaultName: String)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc object(forKey defaultName: String) -\u003e Any?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc string(forKey defaultName: String) -\u003e String?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc double(forKey defaultName: String) -\u003e Double?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc integer(forKey defaultName: String) -\u003e Int?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc bool(forKey defaultName: String) -\u003e Bool?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc url(forKey defaultName: String) -\u003e URL?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc data(forKey defaultName: String) -\u003e Data?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003efunc dictionaryRepresentation() -\u003e [String : Any]\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eArray and dictionary values are not supported\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n   \u003ctr\u003e\n      \u003ctd\u003e🟢\u003c/td\u003e\n      \u003ctd\u003e\n        \u003cdetails\u003e\n          \u003csummary\u003e\u003ccode\u003eUUID\u003c/code\u003e\u003c/summary\u003e\n          \u003cul\u003e\n\u003cli\u003e\u003ccode\u003einit()\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003einit?(uuidString: String)\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estatic func fromString(uuidString: String) -\u003e UUID?\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003evar uuidString: String\u003c/code\u003e\u003c/li\u003e\n          \u003c/ul\u003e\n        \u003c/details\u003e \n      \u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n## Topics\n\n### CryptoKit\n\nSkipFoundation vends portions of the CryptoKit framework by delegating to the built-in Java implementations:\n\n- `SHA256`\n- `SHA256Digest`\n- `SHA384`\n- `SHA384Digest`\n- `SHA512`\n- `SHA512Digest`\n- `Insecure.MD5`\n- `Insecure.MD5Digest`\n- `Insecure.SHA1`\n- `Insecure.SHA1Digest`\n- `HMACMD5`\n- `HMACSHA1`\n- `HMACSHA256`\n- `HMACSHA384`\n- `HMACSHA512`\n\nEach supported algorithm includes the following API:\n\n```\nassociatedtype Digest\n    \npublic static func hash(data: Data) -\u003e Digest\npublic func update(_ data: DataProtocol)\npublic func finalize() -\u003e Digest\n```\n\nThe returned `Digest` in turn acts as a sequence of `UInt8` bytes. \n\n### Files\n\nSkip implements much of `Foundation.FileManager`, which should be\nthe primary interface for interacting with the file system.\n\nThe app-specific folder can be accessed like:\n\n```swift\n// on Android, this is Context.getFilesDir()\nlet folder = URL.documentsDirectory\n\n// which is shorthand for the following:\nlet folder = try FileManager.default.url(for: FileManager.SearchPathDirectory.documentDirectory, in: FileManager.SearchPathDomainMask.userDomainMask, appropriateFor: nil, create: false)\n```\n\nAnd to read and write to the cache folders:\n\n```swift\n// on Android, this is Context.getCachesDir()\nlet caches = URL.cachesDirectory\n\n// which is shorthand for the following:\nlet caches = try FileManager.default.url(for: FileManager.SearchPathDirectory.cachesDirectory, in: FileManager.SearchPathDomainMask.userDomainMask, appropriateFor: nil, create: false)\n```\n\nAnd the system temporary folder can be accessed with:\n\n```swift\n// on Android, this will be the same as Context.getCachesDir()\nlet tmpdir = URL.temporaryDirectory\n\n// you can also use:\nlet tmpdir = NSTemporaryDirectory()\n```\n\nNone of the other `FileManager.SearchPathDirectory` enumerations are implemented in Skip.\n\nBoth `Data` and `String` have the ability to read and write to and from URLs and path strings.\n\n\n## License\n\nThis software is licensed under the\n[GNU Lesser General Public License v3.0](https://spdx.org/licenses/LGPL-3.0-only.html),\nwith a [linking exception](https://spdx.org/licenses/LGPL-3.0-linking-exception.html)\nto clarify that distribution to restricted environments (e.g., app stores) is permitted.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskiptools%2Fskip-foundation","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fskiptools%2Fskip-foundation","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskiptools%2Fskip-foundation/lists"}