[{"data":1,"prerenderedAt":2262},["ShallowReactive",2],{"navigation_docs":3,"-sdks-openfeature-swift":181,"-sdks-openfeature-swift-surround":1589,"sdks\u002Fopenfeature-swift\u002Finstall":1596,"sdks\u002Fopenfeature-swift\u002Fconfigure":1861,"sdks\u002Fopenfeature-swift\u002Fsimple-usage":1985,"sdks\u002Fopenfeature-swift\u002Fuser-context":2086},[4,36,165],{"title":5,"icon":6,"modifiedAt":7,"path":8,"stem":9,"children":10,"page":6},"Getting Started",false,"2026-04-30T19:15:33.000Z","\u002Fgetting-started","1.getting-started",[11,16,21,26,31],{"title":12,"path":13,"stem":14,"icon":15},"Quickstart","\u002Fgetting-started\u002Fquickstart","1.getting-started\u002F1.quickstart","i-lucide-fast-forward",{"title":17,"path":18,"stem":19,"icon":20},"Core Concepts","\u002Fgetting-started\u002Fcore-concepts","1.getting-started\u002F2.core-concepts","i-lucide-workflow",{"title":22,"path":23,"stem":24,"icon":25},"Configs Anatomy","\u002Fgetting-started\u002Fconfigs","1.getting-started\u002F3.configs","i-lucide-file-cog",{"title":27,"path":28,"stem":29,"icon":30},"Architecture","\u002Fgetting-started\u002Farchitecture","1.getting-started\u002F4.architecture","i-lucide-layers",{"title":32,"path":33,"stem":34,"icon":35},"JSON Schema Validation","\u002Fgetting-started\u002Fjson-schema-validation","1.getting-started\u002F5.json-schema-validation","i-lucide-braces",{"title":37,"modifiedAt":38,"defaultOpen":39,"path":40,"stem":41,"children":42,"page":6},"SDKs","2026-05-02T18:15:50.000Z",true,"\u002Fsdks","2.sdks",[43,48,69,94,111,137],{"title":44,"path":45,"stem":46,"icon":47},"Available SDKs","\u002Fsdks\u002Favailable-sdks","2.sdks\u002F1.available-sdks","i-lucide-list",{"title":49,"modifiedAt":38,"icon":50,"defaultOpen":39,"path":51,"stem":52,"children":53,"page":6},"Browser SDKs","i-lucide-monitor","\u002Fsdks\u002Fbrowser","2.sdks\u002F2.browser",[54,59,64],{"title":55,"path":56,"stem":57,"icon":58},"Javascript","\u002Fsdks\u002Fbrowser\u002Fjavascript","2.sdks\u002F2.browser\u002F1.javascript","cd-logos-javascript",{"title":60,"path":61,"stem":62,"icon":63},"React","\u002Fsdks\u002Fbrowser\u002Freact","2.sdks\u002F2.browser\u002F2.react","cd-logos-react-light",{"title":65,"path":66,"stem":67,"icon":68},"Vue","\u002Fsdks\u002Fbrowser\u002Fvue","2.sdks\u002F2.browser\u002F3.vue","cd-logos-vue",{"title":70,"modifiedAt":38,"icon":71,"defaultOpen":39,"path":72,"stem":73,"children":74,"page":6},"Mobile SDKs","i-lucide-smartphone","\u002Fsdks\u002Fmobile","2.sdks\u002F3.mobile",[75,79,84,89],{"title":76,"path":77,"stem":78,"icon":63},"React Native","\u002Fsdks\u002Fmobile\u002Freact-native","2.sdks\u002F3.mobile\u002F1.react-native",{"title":80,"path":81,"stem":82,"icon":83},"Flutter","\u002Fsdks\u002Fmobile\u002Fflutter","2.sdks\u002F3.mobile\u002F2.flutter","cd-logos-flutter",{"title":85,"path":86,"stem":87,"icon":88},"Swift","\u002Fsdks\u002Fmobile\u002Fswift","2.sdks\u002F3.mobile\u002F3.swift","cd-logos-swift",{"title":90,"path":91,"stem":92,"icon":93},"Android","\u002Fsdks\u002Fmobile\u002Fandroid","2.sdks\u002F3.mobile\u002F4.android","cd-logos-android",{"title":95,"modifiedAt":96,"icon":97,"defaultOpen":39,"path":98,"stem":99,"children":100,"page":6},"Meta-framework SDKs","2026-05-02T18:29:14.000Z","i-lucide-monitor-smartphone","\u002Fsdks\u002Fmeta","2.sdks\u002F4.meta",[101,106],{"title":102,"path":103,"stem":104,"icon":105},"Next.js","\u002Fsdks\u002Fmeta\u002Fnextjs","2.sdks\u002F4.meta\u002F1.nextjs","cd-logos-nextjs",{"title":107,"path":108,"stem":109,"icon":110},"Nuxt","\u002Fsdks\u002Fmeta\u002Fnuxt","2.sdks\u002F4.meta\u002F2.nuxt","cd-logos-nuxt",{"title":112,"modifiedAt":96,"icon":113,"defaultOpen":39,"path":114,"stem":115,"children":116,"page":6},"Server SDKs","i-lucide-server","\u002Fsdks\u002Fserver","2.sdks\u002F5.server",[117,122,127,132],{"title":118,"path":119,"stem":120,"icon":121},"Node.js","\u002Fsdks\u002Fserver\u002Fnode-js","2.sdks\u002F5.server\u002F1.node-js","cd-logos-nodejs",{"title":123,"path":124,"stem":125,"icon":126},"Python","\u002Fsdks\u002Fserver\u002Fpython","2.sdks\u002F5.server\u002F2.python","cd-logos-python",{"title":128,"path":129,"stem":130,"icon":131},"Java","\u002Fsdks\u002Fserver\u002Fjava","2.sdks\u002F5.server\u002F3.java","cd-logos-java",{"title":133,"path":134,"stem":135,"icon":136},".NET","\u002Fsdks\u002Fserver\u002Fdotnet","2.sdks\u002F5.server\u002F4.dotnet","cd-logos-dotnet",{"title":138,"modifiedAt":139,"icon":140,"defaultOpen":39,"path":141,"stem":142,"children":143,"page":6},"OpenFeature Providers","2026-09-21T01:40:45.000Z","cd-logos-openfeature","\u002Fsdks\u002Fopenfeature","2.sdks\u002F6.openfeature",[144,149,153,157,161],{"title":145,"path":146,"stem":147,"icon":140,"icons":148},"Web","\u002Fsdks\u002Fopenfeature\u002Fweb","2.sdks\u002F6.openfeature\u002F1.web",[140,58],{"title":85,"path":150,"stem":151,"icon":140,"icons":152},"\u002Fsdks\u002Fopenfeature\u002Fswift","2.sdks\u002F6.openfeature\u002F2.swift",[140,88],{"title":118,"path":154,"stem":155,"icon":140,"icons":156},"\u002Fsdks\u002Fopenfeature\u002Fnode-js","2.sdks\u002F6.openfeature\u002F3.node-js",[140,121],{"title":128,"path":158,"stem":159,"icon":140,"icons":160},"\u002Fsdks\u002Fopenfeature\u002Fjava","2.sdks\u002F6.openfeature\u002F4.java",[140,131],{"title":123,"path":162,"stem":163,"icon":140,"icons":164},"\u002Fsdks\u002Fopenfeature\u002Fpython","2.sdks\u002F6.openfeature\u002F5.python",[140,126],{"title":166,"modifiedAt":167,"defaultOpen":39,"path":168,"stem":169,"children":170,"page":6},"Integrations","2026-07-31T18:08:51.000Z","\u002Fintegrations","3.integrations",[171,176],{"title":172,"path":173,"stem":174,"icon":175},"Terraform","\u002Fintegrations\u002Fterraform","3.integrations\u002F1.terraform","cd-logos-terraform",{"title":177,"path":178,"stem":179,"icon":180},"MCP","\u002Fintegrations\u002Fmcp","3.integrations\u002F2.mcp","cd-logos-mcp",{"id":182,"title":183,"body":184,"description":1580,"extension":1581,"links":1582,"meta":1583,"navigation":1585,"path":150,"seo":1587,"stem":151,"__hash__":1588},"docs\u002F2.sdks\u002F6.openfeature\u002F2.swift.md","OpenFeature Swift Provider",{"type":185,"value":186,"toc":1567},"minimark",[187,191,195,200,217,268,276,283,287,294,297,301,305,322,325,340,354,361,625,637,642,649,656,772,789,793,804,808,811,814,817,874,898,998,1005,1009,1015,1022,1223,1227,1230,1233,1296,1301,1312,1317,1321,1331,1543,1563],[188,189],"div",{"hidden":39,"dataTitleIcon":190},"openfeature-swift",[192,193],"external-badges",{"repo":194},"configdirector-swift-openfeature-provider",[196,197,199],"h2",{"id":198},"introduction","Introduction",[201,202,203,204,212,213,216],"p",{},"The OpenFeature Swift Provider is intended to be used in combination with the ",[205,206,211],"a",{"href":207,"rel":208,"target":210},"https:\u002F\u002Fopenfeature.dev\u002Fdocs\u002Freference\u002Fsdks\u002Fclient\u002Fswift\u002F",[209],"noopener","_blank","OpenFeature Swift SDK"," in Apple platform applications. The provider wraps the ConfigDirector ",[205,214,215],{"href":86},"Swift SDK",".",[218,219,220,233],"table",{},[221,222,223],"thead",{},[224,225,226,230],"tr",{},[227,228,229],"th",{},"Platform",[227,231,232],{},"Minimum",[234,235,236,245,253,260],"tbody",{},[224,237,238,242],{},[239,240,241],"td",{},"iOS \u002F iPadOS",[239,243,244],{},"15.0",[224,246,247,250],{},[239,248,249],{},"macOS",[239,251,252],{},"12.0",[224,254,255,258],{},[239,256,257],{},"tvOS",[239,259,244],{},[224,261,262,265],{},[239,263,264],{},"watchOS",[239,266,267],{},"8.0",[201,269,270,271,275],{},"Building it requires Swift 6.0 or newer and version 0.6.0 or newer of the OpenFeature Swift SDK. The provider is ",[272,273,274],"code",{},"Sendable",", so it can be registered from any task or actor.",[201,277,278,279,282],{},"Config evaluation is synchronous and reads config state the provider already holds in memory, which is what makes it safe to call from a SwiftUI ",[272,280,281],{},"body",". Telemetry about those evaluations is aggregated and reported on its own task, so evaluating a config never waits on the network.",[196,284,286],{"id":285},"installation","Installation",[201,288,289,290],{},"The provider is distributed through Swift Package Manager from its repository: ",[205,291,292],{"href":292,"rel":293,"target":210},"https:\u002F\u002Fgithub.com\u002FConfigDirector\u002Fconfigdirector-swift-openfeature-provider",[209],[201,295,296],{},"The ConfigDirector Swift SDK is included as a transitive dependency. The OpenFeature Swift SDK has to be added alongside the provider, since your application imports it to evaluate flags.",[298,299],"content-partial",{"name":300},"sdks\u002Fopenfeature-swift\u002Finstall",[196,302,304],{"id":303},"configure-and-initialize-the-client","Configure and initialize the client",[306,307,308,316,319],"ol",{},[309,310,311,312,315],"li",{},"Create an instance of the provider using your client SDK key. You can retrieve a client SDK key for each environment under ",[272,313,314],{},"SDK Keys"," in the dashboard's navigation panel.",[309,317,318],{},"Set the OpenFeature provider, along with the initial evaluation context.",[309,320,321],{},"Get a client instance from OpenFeature.",[298,323],{"name":324},"sdks\u002Fopenfeature-swift\u002Fconfigure",[201,326,327,328,331,332,335,336,339],{},"The initializer throws a ",[272,329,330],{},"ConfigDirectorError"," in only two cases, both of which are programming errors rather than runtime conditions: ",[272,333,334],{},"missingClientSDKKey"," when the key is blank, and ",[272,337,338],{},"invalidBaseURL"," when a custom base URL is not absolute. Connection failures are not thrown.",[201,341,342,345,346,349,350,353],{},[272,343,344],{},"setProviderAndWait"," returns once the initial config state arrives or the configured timeout elapses. When it times out, the provider reports the ",[272,347,348],{},"error"," status and keeps connecting in the background, then reports ",[272,351,352],{},"ready"," as soon as config state arrives. Until then, flags resolve to their default values.",[201,355,356,357,360],{},"Most applications register the provider once during startup and let it live for the lifetime of the app. In a SwiftUI app that usually means doing so from the ",[272,358,359],{},"App",":",[362,363,369],"pre",{"className":364,"code":365,"filename":366,"language":367,"meta":368,"style":368},"language-swift shiki shiki-themes material-theme-lighter github-light github-dark","import ConfigDirectorOpenFeatureProvider\nimport OpenFeature\nimport SwiftUI\n\n@main\nstruct MyApp: App {\n    var body: some Scene {\n        WindowGroup {\n            ContentView()\n                .task {\n                    guard let provider = try? ConfigDirectorProvider(clientSDKKey: \"YOUR-CLIENT-SDK-KEY\") else { return }\n                    await OpenFeatureAPI.shared.setProviderAndWait(\n                        provider: provider,\n                        initialContext: ImmutableContext(targetingKey: \"user-123\")\n                    )\n                }\n        }\n    }\n}\n","MyApp.swift","swift","",[272,370,371,384,392,400,406,417,435,454,464,473,484,542,556,567,595,601,607,613,619],{"__ignoreMap":368},[372,373,376,380],"span",{"class":374,"line":375},"line",1,[372,377,379],{"class":378},"sVHd0","import",[372,381,383],{"class":382},"sbgvK"," ConfigDirectorOpenFeatureProvider\n",[372,385,387,389],{"class":374,"line":386},2,[372,388,379],{"class":378},[372,390,391],{"class":382}," OpenFeature\n",[372,393,395,397],{"class":374,"line":394},3,[372,396,379],{"class":378},[372,398,399],{"class":382}," SwiftUI\n",[372,401,403],{"class":374,"line":402},4,[372,404,405],{"emptyLinePlaceholder":39},"\n",[372,407,409,413],{"class":374,"line":408},5,[372,410,412],{"class":411},"smGrS","@",[372,414,416],{"class":415},"sbsja","main\n",[372,418,420,423,426,429,432],{"class":374,"line":419},6,[372,421,422],{"class":415},"struct",[372,424,425],{"class":382}," MyApp",[372,427,360],{"class":428},"sP7_E",[372,430,431],{"class":382}," App ",[372,433,434],{"class":428},"{\n",[372,436,438,442,446,449,452],{"class":374,"line":437},7,[372,439,441],{"class":440},"sw1J6","    var",[372,443,445],{"class":444},"su5hD"," body: ",[372,447,448],{"class":440},"some",[372,450,451],{"class":444}," Scene ",[372,453,434],{"class":428},[372,455,457,461],{"class":374,"line":456},8,[372,458,460],{"class":459},"sptTA","        WindowGroup",[372,462,463],{"class":428}," {\n",[372,465,467,470],{"class":374,"line":466},9,[372,468,469],{"class":459},"            ContentView",[372,471,472],{"class":428},"()\n",[372,474,476,479,482],{"class":374,"line":475},10,[372,477,478],{"class":444},"                .",[372,480,481],{"class":459},"task",[372,483,463],{"class":428},[372,485,487,490,493,496,499,502,505,508,511,514,516,520,524,527,530,533,536,539],{"class":374,"line":486},11,[372,488,489],{"class":378},"                    guard",[372,491,492],{"class":440}," let",[372,494,495],{"class":444}," provider ",[372,497,498],{"class":411},"=",[372,500,501],{"class":378}," try",[372,503,504],{"class":411},"?",[372,506,507],{"class":459}," ConfigDirectorProvider",[372,509,510],{"class":428},"(",[372,512,513],{"class":459},"clientSDKKey",[372,515,360],{"class":428},[372,517,519],{"class":518},"sjJ54"," \"",[372,521,523],{"class":522},"s_sjI","YOUR-CLIENT-SDK-KEY",[372,525,526],{"class":518},"\"",[372,528,529],{"class":428},")",[372,531,532],{"class":378}," else",[372,534,535],{"class":428}," {",[372,537,538],{"class":378}," return",[372,540,541],{"class":428}," }\n",[372,543,545,548,551,553],{"class":374,"line":544},12,[372,546,547],{"class":378},"                    await",[372,549,550],{"class":444}," OpenFeatureAPI.shared.",[372,552,344],{"class":459},[372,554,555],{"class":428},"(\n",[372,557,559,562,564],{"class":374,"line":558},13,[372,560,561],{"class":459},"                        provider",[372,563,360],{"class":428},[372,565,566],{"class":444}," provider,\n",[372,568,570,573,575,578,580,583,585,587,590,592],{"class":374,"line":569},14,[372,571,572],{"class":459},"                        initialContext",[372,574,360],{"class":428},[372,576,577],{"class":459}," ImmutableContext",[372,579,510],{"class":428},[372,581,582],{"class":459},"targetingKey",[372,584,360],{"class":428},[372,586,519],{"class":518},[372,588,589],{"class":522},"user-123",[372,591,526],{"class":518},[372,593,594],{"class":428},")\n",[372,596,598],{"class":374,"line":597},15,[372,599,600],{"class":428},"                    )\n",[372,602,604],{"class":374,"line":603},16,[372,605,606],{"class":428},"                }\n",[372,608,610],{"class":374,"line":609},17,[372,611,612],{"class":428},"        }\n",[372,614,616],{"class":374,"line":615},18,[372,617,618],{"class":428},"    }\n",[372,620,622],{"class":374,"line":621},19,[372,623,624],{"class":428},"}\n",[626,627,628,629,636],"note",{},"The underlying SDK follows the app lifecycle so it can release its network connection while the app is backgrounded. See the ",[205,630,632,635],{"href":631},"\u002Fsdks\u002Fmobile\u002Fswift#connection",[272,633,634],{},"connection"," options of the Swift SDK"," to manage that yourself instead.",[638,639,641],"h3",{"id":640},"additional-configuration-options","Additional configuration options",[201,643,644,645,648],{},"Additional configuration options can be passed into the provider as ",[272,646,647],{},"ConfigDirectorClientOptions"," in the optional second argument of the initializer. The types that configure the underlying client are exported from the provider's module, so configuring it needs no second import.",[201,650,651,652,655],{},"For example, the ",[272,653,654],{},"metadata"," can be provided like this:",[362,657,660],{"className":364,"code":658,"filename":659,"language":367,"meta":368,"style":368},"import ConfigDirectorOpenFeatureProvider\n\nlet provider = try ConfigDirectorProvider(\n    clientSDKKey: \"YOUR-CLIENT-SDK-KEY\",\n    options: ConfigDirectorClientOptions(\n        metadata: ConfigDirectorMetaContext(\n            appName: \"YOUR-APP-NAME\",\n            appVersion: \"1.0.2\"\n        )\n    )\n)\n","ConfigDirectorSetup.swift",[272,661,662,668,672,687,703,715,727,743,758,763,768],{"__ignoreMap":368},[372,663,664,666],{"class":374,"line":375},[372,665,379],{"class":378},[372,667,383],{"class":382},[372,669,670],{"class":374,"line":386},[372,671,405],{"emptyLinePlaceholder":39},[372,673,674,677,679,681,683,685],{"class":374,"line":394},[372,675,676],{"class":440},"let",[372,678,495],{"class":444},[372,680,498],{"class":411},[372,682,501],{"class":378},[372,684,507],{"class":459},[372,686,555],{"class":428},[372,688,689,692,694,696,698,700],{"class":374,"line":402},[372,690,691],{"class":459},"    clientSDKKey",[372,693,360],{"class":428},[372,695,519],{"class":518},[372,697,523],{"class":522},[372,699,526],{"class":518},[372,701,702],{"class":444},",\n",[372,704,705,708,710,713],{"class":374,"line":408},[372,706,707],{"class":459},"    options",[372,709,360],{"class":428},[372,711,712],{"class":459}," ConfigDirectorClientOptions",[372,714,555],{"class":428},[372,716,717,720,722,725],{"class":374,"line":419},[372,718,719],{"class":459},"        metadata",[372,721,360],{"class":428},[372,723,724],{"class":459}," ConfigDirectorMetaContext",[372,726,555],{"class":428},[372,728,729,732,734,736,739,741],{"class":374,"line":437},[372,730,731],{"class":459},"            appName",[372,733,360],{"class":428},[372,735,519],{"class":518},[372,737,738],{"class":522},"YOUR-APP-NAME",[372,740,526],{"class":518},[372,742,702],{"class":444},[372,744,745,748,750,752,755],{"class":374,"line":456},[372,746,747],{"class":459},"            appVersion",[372,749,360],{"class":428},[372,751,519],{"class":518},[372,753,754],{"class":522},"1.0.2",[372,756,757],{"class":518},"\"\n",[372,759,760],{"class":374,"line":466},[372,761,762],{"class":428},"        )\n",[372,764,765],{"class":374,"line":475},[372,766,767],{"class":428},"    )\n",[372,769,770],{"class":374,"line":486},[372,771,594],{"class":428},[201,773,774,775,777,778,780,781,784,785,216],{},"The provider accepts the same ",[272,776,654],{},", ",[272,779,634],{}," and ",[272,782,783],{},"logger"," options as the Swift SDK client, ",[205,786,788],{"href":787},"\u002Fsdks\u002Fmobile\u002Fswift#additional-configuration-options","refer to the additional configuration options section of the Swift SDK for a full list",[638,790,792],{"id":791},"shut-down","Shut down",[201,794,795,796,799,800,803],{},"The OpenFeature Swift SDK does not shut providers down. The provider closes its connection, and reports whatever telemetry is left, when it is released, which happens after ",[272,797,798],{},"OpenFeatureAPI.shared.clearProvider()"," as long as you hold no other reference to it. To close it while you still hold one, call ",[272,801,802],{},"provider.close()",". The provider cannot be used afterwards.",[196,805,807],{"id":806},"retrieve-config-values","Retrieve config values",[201,809,810],{},"To retrieve config values, use the OpenFeature client:",[298,812],{"name":813},"sdks\u002Fopenfeature-swift\u002Fsimple-usage",[201,815,816],{},"Each OpenFeature getter maps to a ConfigDirector config type:",[218,818,819,829],{},[221,820,821],{},[224,822,823,826],{},[227,824,825],{},"OpenFeature getter",[227,827,828],{},"ConfigDirector config value",[234,830,831,841,851,864],{},[224,832,833,838],{},[239,834,835],{},[272,836,837],{},"getBooleanValue",[239,839,840],{},"Boolean",[224,842,843,848],{},[239,844,845],{},[272,846,847],{},"getStringValue",[239,849,850],{},"String or enum",[224,852,853,861],{},[239,854,855,777,858],{},[272,856,857],{},"getIntegerValue",[272,859,860],{},"getDoubleValue",[239,862,863],{},"Number",[224,865,866,871],{},[239,867,868],{},[272,869,870],{},"getObjectValue",[239,872,873],{},"JSON object or JSON array",[201,875,876,878,879,882,883,885,886,889,890,893,894,897],{},[272,877,857],{}," takes and returns an ",[272,880,881],{},"Int64",", as the OpenFeature Swift SDK defines it. ",[272,884,870],{}," returns the parsed JSON as an OpenFeature ",[272,887,888],{},"Value",", a ",[272,891,892],{},".structure"," for a JSON object or a ",[272,895,896],{},".list"," for a JSON array:",[362,899,902],{"className":364,"code":900,"filename":901,"language":367,"meta":368,"style":368},"let settings = client.getObjectValue(key: \"my-json-config-key\", defaultValue: .structure([:]))\nlet theme = settings.asStructure()?[\"theme\"]?.asString()\n","ContentView.swift",[272,903,904,958],{"__ignoreMap":368},[372,905,906,908,911,913,916,918,920,923,925,927,930,932,934,937,939,942,945,947,950,952,955],{"class":374,"line":375},[372,907,676],{"class":440},[372,909,910],{"class":444}," settings ",[372,912,498],{"class":411},[372,914,915],{"class":444}," client.",[372,917,870],{"class":459},[372,919,510],{"class":428},[372,921,922],{"class":459},"key",[372,924,360],{"class":428},[372,926,519],{"class":518},[372,928,929],{"class":522},"my-json-config-key",[372,931,526],{"class":518},[372,933,777],{"class":444},[372,935,936],{"class":459},"defaultValue",[372,938,360],{"class":428},[372,940,941],{"class":444}," .",[372,943,944],{"class":459},"structure",[372,946,510],{"class":428},[372,948,949],{"class":444},"[",[372,951,360],{"class":411},[372,953,954],{"class":444},"]",[372,956,957],{"class":428},"))\n",[372,959,960,962,965,967,970,973,976,978,980,982,985,987,989,991,993,996],{"class":374,"line":386},[372,961,676],{"class":440},[372,963,964],{"class":444}," theme ",[372,966,498],{"class":411},[372,968,969],{"class":444}," settings.",[372,971,972],{"class":459},"asStructure",[372,974,975],{"class":428},"()",[372,977,504],{"class":411},[372,979,949],{"class":444},[372,981,526],{"class":518},[372,983,984],{"class":522},"theme",[372,986,526],{"class":518},[372,988,954],{"class":444},[372,990,504],{"class":411},[372,992,216],{"class":444},[372,994,995],{"class":459},"asString",[372,997,472],{"class":428},[201,999,1000,1001,216],{},"For additional information regarding the OpenFeature client ",[205,1002,1004],{"href":207,"rel":1003,"target":210},[209],"refer to the OpenFeature Swift SDK documentation",[638,1006,1008],{"id":1007},"reading-configs-in-swiftui","Reading configs in SwiftUI",[201,1010,1011,1012,1014],{},"The getters are synchronous and make no network calls, so they are safe to call directly from a ",[272,1013,281],{},". That gives you the current value, but the view will not re-render on its own when the value changes.",[201,1016,1017,1018,1021],{},"To have the view follow a config, re-read it whenever the provider publishes an event. ",[272,1019,1020],{},"OpenFeatureAPI.shared.observe()"," is a Combine publisher of provider events that replays the provider's current status to a new subscriber, so the view reads the current value as soon as it appears, and again after every change:",[362,1023,1026],{"className":364,"code":1024,"filename":1025,"language":367,"meta":368,"style":368},"import OpenFeature\nimport SwiftUI\n\nstruct DarkModeToggle: View {\n    @State private var isOn = false\n\n    var body: some View {\n        Toggle(\"Dark mode\", isOn: $isOn)\n            .onReceive(OpenFeatureAPI.shared.observe().receive(on: DispatchQueue.main)) { _ in\n                isOn = OpenFeatureAPI.shared.getClient().getBooleanValue(key: \"dark-mode\", defaultValue: false)\n            }\n    }\n}\n","DarkModeToggle.swift",[272,1027,1028,1034,1040,1044,1058,1081,1085,1097,1123,1168,1210,1215,1219],{"__ignoreMap":368},[372,1029,1030,1032],{"class":374,"line":375},[372,1031,379],{"class":378},[372,1033,391],{"class":382},[372,1035,1036,1038],{"class":374,"line":386},[372,1037,379],{"class":378},[372,1039,399],{"class":382},[372,1041,1042],{"class":374,"line":394},[372,1043,405],{"emptyLinePlaceholder":39},[372,1045,1046,1048,1051,1053,1056],{"class":374,"line":402},[372,1047,422],{"class":415},[372,1049,1050],{"class":382}," DarkModeToggle",[372,1052,360],{"class":428},[372,1054,1055],{"class":382}," View ",[372,1057,434],{"class":428},[372,1059,1060,1063,1066,1069,1072,1075,1077],{"class":374,"line":408},[372,1061,1062],{"class":411},"    @",[372,1064,1065],{"class":415},"State",[372,1067,1068],{"class":440}," private",[372,1070,1071],{"class":440}," var",[372,1073,1074],{"class":444}," isOn ",[372,1076,498],{"class":411},[372,1078,1080],{"class":1079},"syTEX"," false\n",[372,1082,1083],{"class":374,"line":419},[372,1084,405],{"emptyLinePlaceholder":39},[372,1086,1087,1089,1091,1093,1095],{"class":374,"line":437},[372,1088,441],{"class":440},[372,1090,445],{"class":444},[372,1092,448],{"class":440},[372,1094,1055],{"class":444},[372,1096,434],{"class":428},[372,1098,1099,1102,1104,1106,1109,1111,1113,1116,1118,1121],{"class":374,"line":456},[372,1100,1101],{"class":459},"        Toggle",[372,1103,510],{"class":428},[372,1105,526],{"class":518},[372,1107,1108],{"class":522},"Dark mode",[372,1110,526],{"class":518},[372,1112,777],{"class":444},[372,1114,1115],{"class":459},"isOn",[372,1117,360],{"class":428},[372,1119,1120],{"class":444}," $isOn",[372,1122,594],{"class":428},[372,1124,1125,1128,1131,1133,1136,1139,1141,1143,1146,1148,1151,1153,1156,1159,1161,1165],{"class":374,"line":466},[372,1126,1127],{"class":444},"            .",[372,1129,1130],{"class":459},"onReceive",[372,1132,510],{"class":428},[372,1134,1135],{"class":444},"OpenFeatureAPI.shared.",[372,1137,1138],{"class":459},"observe",[372,1140,975],{"class":428},[372,1142,216],{"class":444},[372,1144,1145],{"class":459},"receive",[372,1147,510],{"class":428},[372,1149,1150],{"class":459},"on",[372,1152,360],{"class":428},[372,1154,1155],{"class":444}," DispatchQueue.main",[372,1157,1158],{"class":428},"))",[372,1160,535],{"class":428},[372,1162,1164],{"class":1163},"s_hVV"," _",[372,1166,1167],{"class":378}," in\n",[372,1169,1170,1173,1175,1177,1180,1182,1184,1186,1188,1190,1192,1194,1197,1199,1201,1203,1205,1208],{"class":374,"line":475},[372,1171,1172],{"class":444},"                isOn ",[372,1174,498],{"class":411},[372,1176,550],{"class":444},[372,1178,1179],{"class":459},"getClient",[372,1181,975],{"class":428},[372,1183,216],{"class":444},[372,1185,837],{"class":459},[372,1187,510],{"class":428},[372,1189,922],{"class":459},[372,1191,360],{"class":428},[372,1193,519],{"class":518},[372,1195,1196],{"class":522},"dark-mode",[372,1198,526],{"class":518},[372,1200,777],{"class":444},[372,1202,936],{"class":459},[372,1204,360],{"class":428},[372,1206,1207],{"class":1079}," false",[372,1209,594],{"class":428},[372,1211,1212],{"class":374,"line":486},[372,1213,1214],{"class":428},"            }\n",[372,1216,1217],{"class":374,"line":544},[372,1218,618],{"class":428},[372,1220,1221],{"class":374,"line":558},[372,1222,624],{"class":428},[196,1224,1226],{"id":1225},"update-the-user-context","Update the user context",[298,1228],{"name":1229},"sdks\u002Fopenfeature-swift\u002Fuser-context",[201,1231,1232],{},"The evaluation context maps onto the ConfigDirector user context as follows:",[218,1234,1235,1245],{},[221,1236,1237],{},[224,1238,1239,1242],{},[227,1240,1241],{},"OpenFeature evaluation context",[227,1243,1244],{},"ConfigDirector user context",[234,1246,1247,1260,1272,1284],{},[224,1248,1249,1256],{},[239,1250,1251,1252,1255],{},"The targeting key, or otherwise an ",[272,1253,1254],{},"id"," attribute",[239,1257,1258],{},[272,1259,1254],{},[224,1261,1262,1268],{},[239,1263,1264,1265,1255],{},"The ",[272,1266,1267],{},"name",[239,1269,1270],{},[272,1271,1267],{},[224,1273,1274,1280],{},[239,1275,1264,1276,1279],{},[272,1277,1278],{},"traits"," structure attribute",[239,1281,1282],{},[272,1283,1278],{},[224,1285,1286,1292],{},[239,1287,1288,1289,1255],{},"The boolean ",[272,1290,1291],{},"anonymous",[239,1293,1294],{},[272,1295,1291],{},[201,1297,1298,1299,216],{},"Any other attribute is ignored. Put the values your targeting rules depend on inside ",[272,1300,1278],{},[626,1302,1303,1304,1307,1308,1311],{},"In client SDKs (browser and mobile), updating the user context re-establishes a new connection to ConfigDirector servers with the new context. While the new connection is in flight, config values will continue to evaluate to the currently cached values from the prior user context.",[1305,1306],"br",{},"\nAwaiting ",[272,1309,1310],{},"setEvaluationContextAndWait"," will wait until the new config values are downloaded or the connection times out. In the case of a timeout, the provider will continue to attempt to connect with the new context in the background.",[201,1313,1000,1314,216],{},[205,1315,1004],{"href":207,"rel":1316,"target":210},[209],[196,1318,1320],{"id":1319},"events","Events",[201,1322,1323,1324,1326,1327,1330],{},"The provider publishes its events through ",[272,1325,1020],{},". It emits ",[272,1328,1329],{},"configurationChanged"," whenever configs are updated on the dashboard or via the admin API, carrying the keys of the configs in the update:",[362,1332,1334],{"className":364,"code":1333,"filename":659,"language":367,"meta":368,"style":368},"import Combine\nimport OpenFeature\n\nlet subscription = OpenFeatureAPI.shared.observe().sink { event in\n    switch event {\n    case let .configurationChanged(details):\n        print(\"Configs updated: \\(details?.flagsChanged ?? [])\")\n    case .ready:\n        print(\"Config state is available\")\n    case let .error(details):\n        print(\"ConfigDirector could not be reached: \\(details?.message ?? \"\")\")\n    default:\n        break\n    }\n}\n",[272,1335,1336,1343,1349,1353,1381,1390,1411,1448,1457,1472,1490,1523,1530,1535,1539],{"__ignoreMap":368},[372,1337,1338,1340],{"class":374,"line":375},[372,1339,379],{"class":378},[372,1341,1342],{"class":382}," Combine\n",[372,1344,1345,1347],{"class":374,"line":386},[372,1346,379],{"class":378},[372,1348,391],{"class":382},[372,1350,1351],{"class":374,"line":394},[372,1352,405],{"emptyLinePlaceholder":39},[372,1354,1355,1357,1360,1362,1364,1366,1368,1370,1373,1375,1378],{"class":374,"line":402},[372,1356,676],{"class":440},[372,1358,1359],{"class":444}," subscription ",[372,1361,498],{"class":411},[372,1363,550],{"class":444},[372,1365,1138],{"class":459},[372,1367,975],{"class":428},[372,1369,216],{"class":444},[372,1371,1372],{"class":459},"sink",[372,1374,535],{"class":428},[372,1376,1377],{"class":444}," event ",[372,1379,1380],{"class":378},"in\n",[372,1382,1383,1386,1388],{"class":374,"line":408},[372,1384,1385],{"class":378},"    switch",[372,1387,1377],{"class":444},[372,1389,434],{"class":428},[372,1391,1392,1395,1397,1399,1401,1403,1406,1408],{"class":374,"line":419},[372,1393,1394],{"class":378},"    case",[372,1396,492],{"class":440},[372,1398,941],{"class":444},[372,1400,1329],{"class":459},[372,1402,510],{"class":428},[372,1404,1405],{"class":444},"details",[372,1407,529],{"class":428},[372,1409,1410],{"class":411},":\n",[372,1412,1413,1416,1418,1420,1423,1426,1429,1431,1433,1436,1439,1442,1444,1446],{"class":374,"line":437},[372,1414,1415],{"class":459},"        print",[372,1417,510],{"class":428},[372,1419,526],{"class":518},[372,1421,1422],{"class":522},"Configs updated: ",[372,1424,1425],{"class":518},"\\(",[372,1427,1405],{"class":1428},"sfo-9",[372,1430,504],{"class":411},[372,1432,216],{"class":1428},[372,1434,1435],{"class":444},"flagsChanged",[372,1437,1438],{"class":411}," ??",[372,1440,1441],{"class":1428}," []",[372,1443,529],{"class":518},[372,1445,526],{"class":518},[372,1447,594],{"class":428},[372,1449,1450,1452,1455],{"class":374,"line":456},[372,1451,1394],{"class":378},[372,1453,1454],{"class":444}," .ready",[372,1456,1410],{"class":411},[372,1458,1459,1461,1463,1465,1468,1470],{"class":374,"line":466},[372,1460,1415],{"class":459},[372,1462,510],{"class":428},[372,1464,526],{"class":518},[372,1466,1467],{"class":522},"Config state is available",[372,1469,526],{"class":518},[372,1471,594],{"class":428},[372,1473,1474,1476,1478,1480,1482,1484,1486,1488],{"class":374,"line":475},[372,1475,1394],{"class":378},[372,1477,492],{"class":440},[372,1479,941],{"class":444},[372,1481,348],{"class":1163},[372,1483,510],{"class":428},[372,1485,1405],{"class":444},[372,1487,529],{"class":428},[372,1489,1410],{"class":411},[372,1491,1492,1494,1496,1498,1501,1503,1505,1507,1509,1512,1514,1517,1519,1521],{"class":374,"line":486},[372,1493,1415],{"class":459},[372,1495,510],{"class":428},[372,1497,526],{"class":518},[372,1499,1500],{"class":522},"ConfigDirector could not be reached: ",[372,1502,1425],{"class":518},[372,1504,1405],{"class":1428},[372,1506,504],{"class":411},[372,1508,216],{"class":1428},[372,1510,1511],{"class":444},"message",[372,1513,1438],{"class":411},[372,1515,1516],{"class":518}," \"\"",[372,1518,529],{"class":518},[372,1520,526],{"class":518},[372,1522,594],{"class":428},[372,1524,1525,1528],{"class":374,"line":544},[372,1526,1527],{"class":378},"    default",[372,1529,1410],{"class":411},[372,1531,1532],{"class":374,"line":558},[372,1533,1534],{"class":378},"        break\n",[372,1536,1537],{"class":374,"line":569},[372,1538,618],{"class":428},[372,1540,1541],{"class":374,"line":597},[372,1542,624],{"class":428},[201,1544,1545,1546,1548,1549,1551,1552,1554,1555,1558,1559,1562],{},"It emits ",[272,1547,352],{}," when the initial config state arrives after ",[272,1550,344],{}," has already returned, ",[272,1553,348],{}," when the initial connection times out, and ",[272,1556,1557],{},"reconciling"," followed by ",[272,1560,1561],{},"contextChanged"," around a context update.",[1564,1565,1566],"style",{},"html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sw1J6, html code.shiki .sw1J6{--shiki-light:#F76D47;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .syTEX, html code.shiki .syTEX{--shiki-light:#FF5370;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sfo-9, html code.shiki .sfo-9{--shiki-light:#90A4AE;--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":368,"searchDepth":386,"depth":386,"links":1568},[1569,1570,1571,1575,1578,1579],{"id":198,"depth":386,"text":199},{"id":285,"depth":386,"text":286},{"id":303,"depth":386,"text":304,"children":1572},[1573,1574],{"id":640,"depth":394,"text":641},{"id":791,"depth":394,"text":792},{"id":806,"depth":386,"text":807,"children":1576},[1577],{"id":1007,"depth":394,"text":1008},{"id":1225,"depth":386,"text":1226},{"id":1319,"depth":386,"text":1320},"ConfigDirector Provider for the OpenFeature Swift SDK","md",null,{"modifiedAt":1584},"2026-09-22T00:57:51.000Z",{"title":85,"icon":140,"icons":1586},[140,88],{"title":183,"description":1580},"4rJNE51SLAORA5C_VHR_kCE3hbzLdMOU3c1xWBGvE7A",[1590,1593],{"title":145,"path":146,"stem":147,"description":1591,"icon":140,"icons":1592,"children":-1},"ConfigDirector Provider for the OpenFeature Web SDK",[140,58],{"title":118,"path":154,"stem":155,"description":1594,"icon":140,"icons":1595,"children":-1},"ConfigDirector Provider for the OpenFeature Node.js SDK",[140,121],{"id":1597,"title":1598,"body":1599,"description":368,"extension":1581,"meta":1856,"navigation":6,"path":1857,"seo":1858,"stem":1859,"__hash__":1860},"partials\u002F_partials\u002Fsdks\u002Fopenfeature-swift\u002Finstall.md","Install",{"type":185,"value":1600,"toc":1854},[1601,1851],[1602,1603,1604,1623],"code-group",{},[362,1605,1610],{"className":1606,"code":1607,"filename":1608,"language":1609,"meta":368,"style":368},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","# In Xcode, go to File -> Add Package Dependencies... and enter the package URL:\nhttps:\u002F\u002Fgithub.com\u002FConfigDirector\u002Fconfigdirector-swift-openfeature-provider\n","Xcode","bash",[272,1611,1612,1618],{"__ignoreMap":368},[372,1613,1614],{"class":374,"line":375},[372,1615,1617],{"class":1616},"sutJx","# In Xcode, go to File -> Add Package Dependencies... and enter the package URL:\n",[372,1619,1620],{"class":374,"line":386},[372,1621,1622],{"class":382},"https:\u002F\u002Fgithub.com\u002FConfigDirector\u002Fconfigdirector-swift-openfeature-provider\n",[362,1624,1627],{"className":364,"code":1625,"filename":1626,"language":367,"meta":368,"style":368},"dependencies: [\n    .package(url: \"https:\u002F\u002Fgithub.com\u002FConfigDirector\u002Fconfigdirector-swift-openfeature-provider\", from: \"0.1.0\"),\n    .package(url: \"https:\u002F\u002Fgithub.com\u002Fopen-feature\u002Fswift-sdk\", from: \"0.6.0\"),\n],\ntargets: [\n    .target(\n        name: \"YourTarget\",\n        dependencies: [\n            .product(name: \"ConfigDirectorOpenFeatureProvider\", package: \"configdirector-swift-openfeature-provider\"),\n            .product(name: \"OpenFeature\", package: \"swift-sdk\"),\n        ]\n    ),\n]\n","Package.swift",[272,1628,1629,1639,1678,1714,1719,1728,1737,1753,1762,1798,1834,1839,1846],{"__ignoreMap":368},[372,1630,1631,1634,1636],{"class":374,"line":375},[372,1632,1633],{"class":444},"dependencies",[372,1635,360],{"class":411},[372,1637,1638],{"class":444}," [\n",[372,1640,1641,1644,1647,1649,1652,1654,1656,1658,1660,1662,1665,1667,1669,1672,1674,1676],{"class":374,"line":386},[372,1642,1643],{"class":444},"    .",[372,1645,1646],{"class":459},"package",[372,1648,510],{"class":428},[372,1650,1651],{"class":459},"url",[372,1653,360],{"class":428},[372,1655,519],{"class":518},[372,1657,292],{"class":522},[372,1659,526],{"class":518},[372,1661,777],{"class":444},[372,1663,1664],{"class":459},"from",[372,1666,360],{"class":428},[372,1668,519],{"class":518},[372,1670,1671],{"class":522},"0.1.0",[372,1673,526],{"class":518},[372,1675,529],{"class":428},[372,1677,702],{"class":444},[372,1679,1680,1682,1684,1686,1688,1690,1692,1695,1697,1699,1701,1703,1705,1708,1710,1712],{"class":374,"line":394},[372,1681,1643],{"class":444},[372,1683,1646],{"class":459},[372,1685,510],{"class":428},[372,1687,1651],{"class":459},[372,1689,360],{"class":428},[372,1691,519],{"class":518},[372,1693,1694],{"class":522},"https:\u002F\u002Fgithub.com\u002Fopen-feature\u002Fswift-sdk",[372,1696,526],{"class":518},[372,1698,777],{"class":444},[372,1700,1664],{"class":459},[372,1702,360],{"class":428},[372,1704,519],{"class":518},[372,1706,1707],{"class":522},"0.6.0",[372,1709,526],{"class":518},[372,1711,529],{"class":428},[372,1713,702],{"class":444},[372,1715,1716],{"class":374,"line":402},[372,1717,1718],{"class":444},"],\n",[372,1720,1721,1724,1726],{"class":374,"line":408},[372,1722,1723],{"class":444},"targets",[372,1725,360],{"class":411},[372,1727,1638],{"class":444},[372,1729,1730,1732,1735],{"class":374,"line":419},[372,1731,1643],{"class":444},[372,1733,1734],{"class":459},"target",[372,1736,555],{"class":428},[372,1738,1739,1742,1744,1746,1749,1751],{"class":374,"line":437},[372,1740,1741],{"class":459},"        name",[372,1743,360],{"class":428},[372,1745,519],{"class":518},[372,1747,1748],{"class":522},"YourTarget",[372,1750,526],{"class":518},[372,1752,702],{"class":444},[372,1754,1755,1758,1760],{"class":374,"line":456},[372,1756,1757],{"class":459},"        dependencies",[372,1759,360],{"class":428},[372,1761,1638],{"class":444},[372,1763,1764,1766,1769,1771,1773,1775,1777,1780,1782,1784,1786,1788,1790,1792,1794,1796],{"class":374,"line":466},[372,1765,1127],{"class":444},[372,1767,1768],{"class":459},"product",[372,1770,510],{"class":428},[372,1772,1267],{"class":459},[372,1774,360],{"class":428},[372,1776,519],{"class":518},[372,1778,1779],{"class":522},"ConfigDirectorOpenFeatureProvider",[372,1781,526],{"class":518},[372,1783,777],{"class":444},[372,1785,1646],{"class":459},[372,1787,360],{"class":428},[372,1789,519],{"class":518},[372,1791,194],{"class":522},[372,1793,526],{"class":518},[372,1795,529],{"class":428},[372,1797,702],{"class":444},[372,1799,1800,1802,1804,1806,1808,1810,1812,1815,1817,1819,1821,1823,1825,1828,1830,1832],{"class":374,"line":475},[372,1801,1127],{"class":444},[372,1803,1768],{"class":459},[372,1805,510],{"class":428},[372,1807,1267],{"class":459},[372,1809,360],{"class":428},[372,1811,519],{"class":518},[372,1813,1814],{"class":522},"OpenFeature",[372,1816,526],{"class":518},[372,1818,777],{"class":444},[372,1820,1646],{"class":459},[372,1822,360],{"class":428},[372,1824,519],{"class":518},[372,1826,1827],{"class":522},"swift-sdk",[372,1829,526],{"class":518},[372,1831,529],{"class":428},[372,1833,702],{"class":444},[372,1835,1836],{"class":374,"line":486},[372,1837,1838],{"class":444},"        ]\n",[372,1840,1841,1844],{"class":374,"line":544},[372,1842,1843],{"class":428},"    )",[372,1845,702],{"class":444},[372,1847,1848],{"class":374,"line":558},[372,1849,1850],{"class":444},"]\n",[1564,1852,1853],{},"html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}",{"title":368,"searchDepth":386,"depth":386,"links":1855},[],{},"\u002F_partials\u002Fsdks\u002Fopenfeature-swift\u002Finstall",{"description":368},"_partials\u002Fsdks\u002Fopenfeature-swift\u002Finstall","jKPrqf1Uz5jYp4bHu20uft80IrDDppZ9Zm8qfWMPXTE",{"id":1862,"title":1863,"body":1864,"description":368,"extension":1581,"meta":1980,"navigation":6,"path":1981,"seo":1982,"stem":1983,"__hash__":1984},"partials\u002F_partials\u002Fsdks\u002Fopenfeature-swift\u002Fconfigure.md","Configure",{"type":185,"value":1865,"toc":1978},[1866,1975],[362,1867,1869],{"className":364,"code":1868,"filename":659,"language":367,"meta":368,"style":368},"import ConfigDirectorOpenFeatureProvider\nimport OpenFeature\n\nlet provider = try ConfigDirectorProvider(clientSDKKey: \"YOUR-CLIENT-SDK-KEY\")\nawait OpenFeatureAPI.shared.setProviderAndWait(\n    provider: provider,\n    initialContext: ImmutableContext(targetingKey: \"user-123\")\n)\nlet client = OpenFeatureAPI.shared.getClient()\n",[272,1870,1871,1877,1883,1887,1913,1924,1933,1956,1960],{"__ignoreMap":368},[372,1872,1873,1875],{"class":374,"line":375},[372,1874,379],{"class":378},[372,1876,383],{"class":382},[372,1878,1879,1881],{"class":374,"line":386},[372,1880,379],{"class":378},[372,1882,391],{"class":382},[372,1884,1885],{"class":374,"line":394},[372,1886,405],{"emptyLinePlaceholder":39},[372,1888,1889,1891,1893,1895,1897,1899,1901,1903,1905,1907,1909,1911],{"class":374,"line":402},[372,1890,676],{"class":440},[372,1892,495],{"class":444},[372,1894,498],{"class":411},[372,1896,501],{"class":378},[372,1898,507],{"class":459},[372,1900,510],{"class":428},[372,1902,513],{"class":459},[372,1904,360],{"class":428},[372,1906,519],{"class":518},[372,1908,523],{"class":522},[372,1910,526],{"class":518},[372,1912,594],{"class":428},[372,1914,1915,1918,1920,1922],{"class":374,"line":408},[372,1916,1917],{"class":378},"await",[372,1919,550],{"class":444},[372,1921,344],{"class":459},[372,1923,555],{"class":428},[372,1925,1926,1929,1931],{"class":374,"line":419},[372,1927,1928],{"class":459},"    provider",[372,1930,360],{"class":428},[372,1932,566],{"class":444},[372,1934,1935,1938,1940,1942,1944,1946,1948,1950,1952,1954],{"class":374,"line":437},[372,1936,1937],{"class":459},"    initialContext",[372,1939,360],{"class":428},[372,1941,577],{"class":459},[372,1943,510],{"class":428},[372,1945,582],{"class":459},[372,1947,360],{"class":428},[372,1949,519],{"class":518},[372,1951,589],{"class":522},[372,1953,526],{"class":518},[372,1955,594],{"class":428},[372,1957,1958],{"class":374,"line":456},[372,1959,594],{"class":428},[372,1961,1962,1964,1967,1969,1971,1973],{"class":374,"line":466},[372,1963,676],{"class":440},[372,1965,1966],{"class":444}," client ",[372,1968,498],{"class":411},[372,1970,550],{"class":444},[372,1972,1179],{"class":459},[372,1974,472],{"class":428},[1564,1976,1977],{},"html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sw1J6, html code.shiki .sw1J6{--shiki-light:#F76D47;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":368,"searchDepth":386,"depth":386,"links":1979},[],{},"\u002F_partials\u002Fsdks\u002Fopenfeature-swift\u002Fconfigure",{"description":368},"_partials\u002Fsdks\u002Fopenfeature-swift\u002Fconfigure","dorZlVmVcKV2CBaDN-10Vh5R4wgxVycYCPHLN-xxpbE",{"id":1986,"title":1987,"body":1988,"description":368,"extension":1581,"meta":2081,"navigation":6,"path":2082,"seo":2083,"stem":2084,"__hash__":2085},"partials\u002F_partials\u002Fsdks\u002Fopenfeature-swift\u002Fsimple-usage.md","Simple Usage",{"type":185,"value":1989,"toc":2079},[1990,2076],[362,1991,1993],{"className":364,"code":1992,"filename":901,"language":367,"meta":368,"style":368},"let booleanValue = client.getBooleanValue(key: \"my-config-key\", defaultValue: false)\n\nlet stringValue = client.getStringValue(key: \"my-string-config-key\", defaultValue: \"Default\")\n",[272,1994,1995,2031,2035],{"__ignoreMap":368},[372,1996,1997,1999,2002,2004,2006,2008,2010,2012,2014,2016,2019,2021,2023,2025,2027,2029],{"class":374,"line":375},[372,1998,676],{"class":440},[372,2000,2001],{"class":444}," booleanValue ",[372,2003,498],{"class":411},[372,2005,915],{"class":444},[372,2007,837],{"class":459},[372,2009,510],{"class":428},[372,2011,922],{"class":459},[372,2013,360],{"class":428},[372,2015,519],{"class":518},[372,2017,2018],{"class":522},"my-config-key",[372,2020,526],{"class":518},[372,2022,777],{"class":444},[372,2024,936],{"class":459},[372,2026,360],{"class":428},[372,2028,1207],{"class":1079},[372,2030,594],{"class":428},[372,2032,2033],{"class":374,"line":386},[372,2034,405],{"emptyLinePlaceholder":39},[372,2036,2037,2039,2042,2044,2046,2048,2050,2052,2054,2056,2059,2061,2063,2065,2067,2069,2072,2074],{"class":374,"line":394},[372,2038,676],{"class":440},[372,2040,2041],{"class":444}," stringValue ",[372,2043,498],{"class":411},[372,2045,915],{"class":444},[372,2047,847],{"class":459},[372,2049,510],{"class":428},[372,2051,922],{"class":459},[372,2053,360],{"class":428},[372,2055,519],{"class":518},[372,2057,2058],{"class":522},"my-string-config-key",[372,2060,526],{"class":518},[372,2062,777],{"class":444},[372,2064,936],{"class":459},[372,2066,360],{"class":428},[372,2068,519],{"class":518},[372,2070,2071],{"class":522},"Default",[372,2073,526],{"class":518},[372,2075,594],{"class":428},[1564,2077,2078],{},"html pre.shiki code .sw1J6, html code.shiki .sw1J6{--shiki-light:#F76D47;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .syTEX, html code.shiki .syTEX{--shiki-light:#FF5370;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":368,"searchDepth":386,"depth":386,"links":2080},[],{},"\u002F_partials\u002Fsdks\u002Fopenfeature-swift\u002Fsimple-usage",{"description":368},"_partials\u002Fsdks\u002Fopenfeature-swift\u002Fsimple-usage","nUt7AFbrmxK64swwYPglAf4nnrzBBZjlS9dSSAYRybA",{"id":2087,"title":2088,"body":2089,"description":368,"extension":1581,"meta":2257,"navigation":6,"path":2258,"seo":2259,"stem":2260,"__hash__":2261},"partials\u002F_partials\u002Fsdks\u002Fopenfeature-swift\u002Fuser-context.md","User Context",{"type":185,"value":2090,"toc":2255},[2091,2252],[362,2092,2094],{"className":364,"code":2093,"filename":901,"language":367,"meta":368,"style":368},"await OpenFeatureAPI.shared.setEvaluationContextAndWait(\n    evaluationContext: ImmutableContext(\n        targetingKey: \"12345\", \u002F\u002F In OpenFeature, the targeting key represents the context's user ID\n        structure: ImmutableStructure(attributes: [\n            \"name\": .string(\"Example User\"),\n            \u002F\u002F Any arbitrary traits which can be referenced in targeting rules\n            \"traits\": .structure([\"region\": .string(\"North America\")]),\n        ])\n    )\n)\n",[272,2095,2096,2106,2117,2136,2155,2184,2189,2237,2244,2248],{"__ignoreMap":368},[372,2097,2098,2100,2102,2104],{"class":374,"line":375},[372,2099,1917],{"class":378},[372,2101,550],{"class":444},[372,2103,1310],{"class":459},[372,2105,555],{"class":428},[372,2107,2108,2111,2113,2115],{"class":374,"line":386},[372,2109,2110],{"class":459},"    evaluationContext",[372,2112,360],{"class":428},[372,2114,577],{"class":459},[372,2116,555],{"class":428},[372,2118,2119,2122,2124,2126,2129,2131,2133],{"class":374,"line":394},[372,2120,2121],{"class":459},"        targetingKey",[372,2123,360],{"class":428},[372,2125,519],{"class":518},[372,2127,2128],{"class":522},"12345",[372,2130,526],{"class":518},[372,2132,777],{"class":444},[372,2134,2135],{"class":1616},"\u002F\u002F In OpenFeature, the targeting key represents the context's user ID\n",[372,2137,2138,2141,2143,2146,2148,2151,2153],{"class":374,"line":402},[372,2139,2140],{"class":459},"        structure",[372,2142,360],{"class":428},[372,2144,2145],{"class":459}," ImmutableStructure",[372,2147,510],{"class":428},[372,2149,2150],{"class":459},"attributes",[372,2152,360],{"class":428},[372,2154,1638],{"class":444},[372,2156,2157,2160,2162,2164,2166,2168,2171,2173,2175,2178,2180,2182],{"class":374,"line":408},[372,2158,2159],{"class":518},"            \"",[372,2161,1267],{"class":522},[372,2163,526],{"class":518},[372,2165,360],{"class":411},[372,2167,941],{"class":444},[372,2169,2170],{"class":459},"string",[372,2172,510],{"class":428},[372,2174,526],{"class":518},[372,2176,2177],{"class":522},"Example User",[372,2179,526],{"class":518},[372,2181,529],{"class":428},[372,2183,702],{"class":444},[372,2185,2186],{"class":374,"line":419},[372,2187,2188],{"class":1616},"            \u002F\u002F Any arbitrary traits which can be referenced in targeting rules\n",[372,2190,2191,2193,2195,2197,2199,2201,2203,2205,2207,2209,2212,2214,2216,2218,2220,2222,2224,2227,2229,2231,2233,2235],{"class":374,"line":437},[372,2192,2159],{"class":518},[372,2194,1278],{"class":522},[372,2196,526],{"class":518},[372,2198,360],{"class":411},[372,2200,941],{"class":444},[372,2202,944],{"class":459},[372,2204,510],{"class":428},[372,2206,949],{"class":444},[372,2208,526],{"class":518},[372,2210,2211],{"class":522},"region",[372,2213,526],{"class":518},[372,2215,360],{"class":411},[372,2217,941],{"class":444},[372,2219,2170],{"class":459},[372,2221,510],{"class":428},[372,2223,526],{"class":518},[372,2225,2226],{"class":522},"North America",[372,2228,526],{"class":518},[372,2230,529],{"class":428},[372,2232,954],{"class":444},[372,2234,529],{"class":428},[372,2236,702],{"class":444},[372,2238,2239,2242],{"class":374,"line":456},[372,2240,2241],{"class":444},"        ]",[372,2243,594],{"class":428},[372,2245,2246],{"class":374,"line":466},[372,2247,767],{"class":428},[372,2249,2250],{"class":374,"line":475},[372,2251,594],{"class":428},[1564,2253,2254],{},"html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":368,"searchDepth":386,"depth":386,"links":2256},[],{},"\u002F_partials\u002Fsdks\u002Fopenfeature-swift\u002Fuser-context",{"description":368},"_partials\u002Fsdks\u002Fopenfeature-swift\u002Fuser-context","7r3NZLDrCWFSc4d2kpxCRuAFoZX5qnORByYy4Wj8C8I",1790039054328]