[{"data":1,"prerenderedAt":3319},["ShallowReactive",2],{"navigation_docs_en":3,"-en-how-to-use-ios-swift":173,"-en-how-to-use-ios-swift-surround":3314},[4,30,109,153],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Getting Started","\u002Fen\u002Fgetting-started","en\u002F01.getting-started",[9,14,19,24],{"title":10,"path":11,"stem":12,"icon":13},"Introduction","\u002Fen\u002Fgetting-started\u002Fintroduction","en\u002F01.getting-started\u002F1.introduction","i-ph-rocket",{"title":15,"path":16,"stem":17,"icon":18},"Installation","\u002Fen\u002Fgetting-started\u002Finstallation","en\u002F01.getting-started\u002F2.installation","i-ph-download",{"title":20,"path":21,"stem":22,"icon":23},"Quick Start","\u002Fen\u002Fgetting-started\u002Fquick-start","en\u002F01.getting-started\u002F3.quick-start","i-ph-play",{"title":25,"path":26,"stem":27,"icon":28},"Live Demo","\u002Fen\u002Fgetting-started\u002Flive-demo","en\u002F01.getting-started\u002F4.live-demo","i-ph-sparkle",false,{"title":31,"path":32,"stem":33,"children":34,"page":29},"How To","\u002Fen\u002Fhow-to","en\u002F02.how-to",[35,40,45,50,55,60,65,70,75,79,84,89,94,99,104],{"title":36,"path":37,"stem":38,"icon":39},"Use Rust","\u002Fen\u002Fhow-to\u002Fuse-rust","en\u002F02.how-to\u002F00.use-rust","simple-icons-rust",{"title":41,"path":42,"stem":43,"icon":44},"Use .NET \u002F C#","\u002Fen\u002Fhow-to\u002Fuse-csharp","en\u002F02.how-to\u002F01.use-csharp","simple-icons-dotnet",{"title":46,"path":47,"stem":48,"icon":49},"Use React Native","\u002Fen\u002Fhow-to\u002Fuse-react-native","en\u002F02.how-to\u002F02.use-react-native","simple-icons-react",{"title":51,"path":52,"stem":53,"icon":54},"Use iOS (Swift)","\u002Fen\u002Fhow-to\u002Fuse-ios-swift","en\u002F02.how-to\u002F03.use-ios-swift","simple-icons-apple",{"title":56,"path":57,"stem":58,"icon":59},"Use Android (Kotlin)","\u002Fen\u002Fhow-to\u002Fuse-android-kotlin","en\u002F02.how-to\u002F04.use-android-kotlin","simple-icons-android",{"title":61,"path":62,"stem":63,"icon":64},"Use C FFI","\u002Fen\u002Fhow-to\u002Fuse-c-ffi","en\u002F02.how-to\u002F05.use-c-ffi","simple-icons-c",{"title":66,"path":67,"stem":68,"icon":69},"Use CLI","\u002Fen\u002Fhow-to\u002Fuse-cli","en\u002F02.how-to\u002F06.use-cli","simple-icons-gnubash",{"title":71,"path":72,"stem":73,"icon":74},"Use Web","\u002Fen\u002Fhow-to\u002Fuse-web","en\u002F02.how-to\u002F07.use-web","simple-icons-javascript",{"title":76,"path":77,"stem":78,"icon":49},"Use React","\u002Fen\u002Fhow-to\u002Fuse-react","en\u002F02.how-to\u002F08.use-react",{"title":80,"path":81,"stem":82,"icon":83},"Use Node.js","\u002Fen\u002Fhow-to\u002Fuse-node","en\u002F02.how-to\u002F09.use-node","simple-icons-nodedotjs",{"title":85,"path":86,"stem":87,"icon":88},"Use Python","\u002Fen\u002Fhow-to\u002Fuse-python","en\u002F02.how-to\u002F10.use-python","simple-icons-python",{"title":90,"path":91,"stem":92,"icon":93},"Use Golang","\u002Fen\u002Fhow-to\u002Fuse-golang","en\u002F02.how-to\u002F11.use-golang","simple-icons-go",{"title":95,"path":96,"stem":97,"icon":98},"Use Java & JVM","\u002Fen\u002Fhow-to\u002Fuse-java","en\u002F02.how-to\u002F12.use-java","simple-icons-openjdk",{"title":100,"path":101,"stem":102,"icon":103},"Use Flutter & Dart","\u002Fen\u002Fhow-to\u002Fuse-flutter","en\u002F02.how-to\u002F13.use-flutter","simple-icons-flutter",{"title":105,"path":106,"stem":107,"icon":108},"Use Decoded RGB Input","\u002Fen\u002Fhow-to\u002Fuse-decoded-rgb","en\u002F02.how-to\u002F14.use-decoded-rgb","lucide-image",{"title":110,"path":111,"stem":112,"children":113,"page":29},"Advance Guide","\u002Fen\u002Fadvance-guide","en\u002F03.advance-guide",[114,119,124,129,134,139,144,149],{"title":115,"path":116,"stem":117,"icon":118},"Models & Tiers","\u002Fen\u002Fadvance-guide\u002Fmodels-and-tiers","en\u002F03.advance-guide\u002F01.models-and-tiers","i-ph-cube",{"title":120,"path":121,"stem":122,"icon":123},"Multilingual OCR","\u002Fen\u002Fadvance-guide\u002Fmultilingual-ocr","en\u002F03.advance-guide\u002F02.multilingual-ocr","i-ph-translate",{"title":125,"path":126,"stem":127,"icon":128},"Spatial Layout Reconstruction","\u002Fen\u002Fadvance-guide\u002Fspatial-layout-reconstruction","en\u002F03.advance-guide\u002F03.spatial-layout-reconstruction","i-ph-layout",{"title":130,"path":131,"stem":132,"icon":133},"Image Preprocessing & Tuning","\u002Fen\u002Fadvance-guide\u002Fimage-preprocessing-and-tuning","en\u002F03.advance-guide\u002F04.image-preprocessing-and-tuning","i-ph-sliders",{"title":135,"path":136,"stem":137,"icon":138},"Classification & Orientation","\u002Fen\u002Fadvance-guide\u002Fclassification-and-orientation","en\u002F03.advance-guide\u002F05.classification-and-orientation","i-ph-arrows-clockwise",{"title":140,"path":141,"stem":142,"icon":143},"Performance & Benchmarks","\u002Fen\u002Fadvance-guide\u002Fperformance-and-benchmarks","en\u002F03.advance-guide\u002F06.performance-and-benchmarks","i-ph-chart-line-up",{"title":145,"path":146,"stem":147,"icon":148},"Troubleshooting","\u002Fen\u002Fadvance-guide\u002Ftroubleshooting","en\u002F03.advance-guide\u002F07.troubleshooting","i-ph-wrench",{"title":150,"path":151,"stem":152,"icon":138},"v0.2 to v0.3","\u002Fen\u002Fadvance-guide\u002Fmigration-guide","en\u002F03.advance-guide\u002F08.migration-guide",{"title":154,"path":155,"stem":156,"children":157,"page":29},"Api Reference","\u002Fen\u002Fapi-reference","en\u002F04.api-reference",[158,163,168],{"title":159,"path":160,"stem":161,"icon":162},"InitializeConfig","\u002Fen\u002Fapi-reference\u002Finitialize-config","en\u002F04.api-reference\u002F01.initialize-config","i-ph-code-block",{"title":164,"path":165,"stem":166,"icon":167},"OcrRunOptions","\u002Fen\u002Fapi-reference\u002Focr-run-options","en\u002F04.api-reference\u002F02.ocr-run-options","i-ph-faders",{"title":169,"path":170,"stem":171,"icon":172},"TextResult & Output Modes","\u002Fen\u002Fapi-reference\u002Ftext-result-and-output","en\u002F04.api-reference\u002F03.text-result-and-output","i-ph-textbox",{"id":174,"title":51,"body":175,"description":3306,"extension":3307,"links":3308,"meta":3309,"navigation":3310,"path":52,"seo":3311,"stem":53,"__hash__":3313},"docs_en\u002Fen\u002F02.how-to\u002F03.use-ios-swift.md",{"type":176,"value":177,"toc":3286},"minimark",[178,191,194,198,210,215,220,257,264,267,559,568,570,574,580,688,691,707,709,716,721,803,805,809,813,819,912,916,922,1300,1302,1306,1312,1471,1473,1479,1482,1673,1675,1679,1683,1686,1951,1955,1958,2058,2060,2064,2071,3282],[179,180,181,182,186,187,190],"p",{},"RustO! provides first-class iOS and macOS support via a universal XCFramework and idiomatic Swift wrapper. It supports Apple Silicon (",[183,184,185],"code",{},"arm64","), Intel (",[183,188,189],{},"x86_64","), and iOS Simulators with zero C++ toolchain requirements.",[192,193],"hr",{},[195,196,15],"h2",{"id":197},"installation",[179,199,200,201,205,206,209],{},"You can integrate RustO! into your iOS project using either ",[202,203,204],"strong",{},"Swift Package Manager (SPM)"," or ",[202,207,208],{},"CocoaPods",".",[211,212,214],"h3",{"id":213},"method-a-swift-package-manager-recommended","Method A: Swift Package Manager (Recommended)",[216,217,219],"h4",{"id":218},"in-xcode","In Xcode",[221,222,223,227,233,246],"ol",{},[224,225,226],"li",{},"Open your project in Xcode.",[224,228,229,230],{},"Navigate to ",[202,231,232],{},"File > Add Package Dependencies...",[224,234,235,236],{},"Enter the repository URL:\n",[237,238,244],"pre",{"className":239,"code":241,"language":242,"meta":243},[240],"language-text","https:\u002F\u002Fgithub.com\u002Fbyrizki\u002Frusto-rs.git\n","text","",[183,245,241],{"__ignoreMap":243},[224,247,248,249,252,253,256],{},"Select ",[183,250,251],{},"RustO"," and set the dependency rule to your preferred version (e.g., ",[183,254,255],{},"0.3.2",").",[216,258,260,261],{"id":259},"in-packageswift","In ",[183,262,263],{},"Package.swift",[179,265,266],{},"If authoring a Swift package or modular application:",[237,268,272],{"className":269,"code":270,"language":271,"meta":243,"style":243},"language-swift shiki shiki-themes material-theme-lighter github-light github-dark monokai","\u002F\u002F swift-tools-version: 5.9\nimport PackageDescription\n\nlet package = Package(\n    name: \"MyScannerApp\",\n    platforms: [\n        .iOS(.v13),\n        .macOS(.v11)\n    ],\n    dependencies: [\n        .package(url: \"https:\u002F\u002Fgithub.com\u002Fbyrizki\u002Frusto-rs.git\", from: \"0.3.2\")\n    ],\n    targets: [\n        .target(\n            name: \"MyScannerApp\",\n            dependencies: [\n                .product(name: \"RustO\", package: \"rusto-rs\")\n            ]\n        )\n    ]\n)\n","swift",[183,273,274,283,294,301,323,347,358,378,394,400,410,448,453,463,473,489,499,536,542,548,554],{"__ignoreMap":243},[275,276,279],"span",{"class":277,"line":278},"line",1,[275,280,282],{"class":281},"ss7Ak","\u002F\u002F swift-tools-version: 5.9\n",[275,284,286,290],{"class":277,"line":285},2,[275,287,289],{"class":288},"sRxSC","import",[275,291,293],{"class":292},"sKvfc"," PackageDescription\n",[275,295,297],{"class":277,"line":296},3,[275,298,300],{"emptyLinePlaceholder":299},true,"\n",[275,302,304,308,311,315,319],{"class":277,"line":303},4,[275,305,307],{"class":306},"shWJe","let",[275,309,310],{"class":306}," package",[275,312,314],{"class":313},"sGXK2"," =",[275,316,318],{"class":317},"sMLJd"," Package",[275,320,322],{"class":321},"swvn1","(\n",[275,324,326,329,332,336,340,343],{"class":277,"line":325},5,[275,327,328],{"class":317},"    name",[275,330,331],{"class":321},":",[275,333,335],{"class":334},"siCPE"," \"",[275,337,339],{"class":338},"sLACW","MyScannerApp",[275,341,342],{"class":334},"\"",[275,344,346],{"class":345},"ss--_",",\n",[275,348,350,353,355],{"class":277,"line":349},6,[275,351,352],{"class":317},"    platforms",[275,354,331],{"class":321},[275,356,357],{"class":345}," [\n",[275,359,361,364,367,370,373,376],{"class":277,"line":360},7,[275,362,363],{"class":345},"        .",[275,365,366],{"class":317},"iOS",[275,368,369],{"class":321},"(",[275,371,372],{"class":345},".v13",[275,374,375],{"class":321},")",[275,377,346],{"class":345},[275,379,381,383,386,388,391],{"class":277,"line":380},8,[275,382,363],{"class":345},[275,384,385],{"class":317},"macOS",[275,387,369],{"class":321},[275,389,390],{"class":345},".v11",[275,392,393],{"class":321},")\n",[275,395,397],{"class":277,"line":396},9,[275,398,399],{"class":345},"    ],\n",[275,401,403,406,408],{"class":277,"line":402},10,[275,404,405],{"class":317},"    dependencies",[275,407,331],{"class":321},[275,409,357],{"class":345},[275,411,413,415,418,420,423,425,427,430,432,435,438,440,442,444,446],{"class":277,"line":412},11,[275,414,363],{"class":345},[275,416,417],{"class":317},"package",[275,419,369],{"class":321},[275,421,422],{"class":317},"url",[275,424,331],{"class":321},[275,426,335],{"class":334},[275,428,429],{"class":338},"https:\u002F\u002Fgithub.com\u002Fbyrizki\u002Frusto-rs.git",[275,431,342],{"class":334},[275,433,434],{"class":345},", ",[275,436,437],{"class":317},"from",[275,439,331],{"class":321},[275,441,335],{"class":334},[275,443,255],{"class":338},[275,445,342],{"class":334},[275,447,393],{"class":321},[275,449,451],{"class":277,"line":450},12,[275,452,399],{"class":345},[275,454,456,459,461],{"class":277,"line":455},13,[275,457,458],{"class":317},"    targets",[275,460,331],{"class":321},[275,462,357],{"class":345},[275,464,466,468,471],{"class":277,"line":465},14,[275,467,363],{"class":345},[275,469,470],{"class":317},"target",[275,472,322],{"class":321},[275,474,476,479,481,483,485,487],{"class":277,"line":475},15,[275,477,478],{"class":317},"            name",[275,480,331],{"class":321},[275,482,335],{"class":334},[275,484,339],{"class":338},[275,486,342],{"class":334},[275,488,346],{"class":345},[275,490,492,495,497],{"class":277,"line":491},16,[275,493,494],{"class":317},"            dependencies",[275,496,331],{"class":321},[275,498,357],{"class":345},[275,500,502,505,508,510,513,515,517,519,521,523,525,527,529,532,534],{"class":277,"line":501},17,[275,503,504],{"class":345},"                .",[275,506,507],{"class":317},"product",[275,509,369],{"class":321},[275,511,512],{"class":317},"name",[275,514,331],{"class":321},[275,516,335],{"class":334},[275,518,251],{"class":338},[275,520,342],{"class":334},[275,522,434],{"class":345},[275,524,417],{"class":317},[275,526,331],{"class":321},[275,528,335],{"class":334},[275,530,531],{"class":338},"rusto-rs",[275,533,342],{"class":334},[275,535,393],{"class":321},[275,537,539],{"class":277,"line":538},18,[275,540,541],{"class":345},"            ]\n",[275,543,545],{"class":277,"line":544},19,[275,546,547],{"class":321},"        )\n",[275,549,551],{"class":277,"line":550},20,[275,552,553],{"class":345},"    ]\n",[275,555,557],{"class":277,"line":556},21,[275,558,393],{"class":321},[179,560,561,562,565,566,256],{},"The package automatically exposes both the low-level C FFI module (",[183,563,564],{},"RustOFFI",") and high-level Swift API (",[183,567,251],{},[192,569],{},[211,571,573],{"id":572},"method-b-cocoapods","Method B: CocoaPods",[179,575,576,577,331],{},"In your project's ",[183,578,579],{},"Podfile",[237,581,585],{"className":582,"code":583,"language":584,"meta":243,"style":243},"language-ruby shiki shiki-themes material-theme-lighter github-light github-dark monokai","target 'YourApp' do\n  use_frameworks!\n\n  # Core OCR engine runtime XCFramework\n  pod 'RustO', '~> 0.3.2'\n\n  # Decoupled pre-packaged model bundle (~6 MB total)\n  pod 'RustO-Models-PPOCRv6-Tiny', '~> 0.3.2'\n  # Or larger model tiers:\n  # pod 'RustO-Models-PPOCRv6-Small'\n  # pod 'RustO-Models-PPOCRv5-Mobile'\nend\n","ruby",[183,586,587,603,608,612,617,640,644,649,668,673,678,683],{"__ignoreMap":243},[275,588,589,592,595,598,600],{"class":277,"line":278},[275,590,591],{"class":345},"target ",[275,593,594],{"class":334},"'",[275,596,597],{"class":338},"YourApp",[275,599,594],{"class":334},[275,601,602],{"class":288}," do\n",[275,604,605],{"class":277,"line":285},[275,606,607],{"class":345},"  use_frameworks!\n",[275,609,610],{"class":277,"line":296},[275,611,300],{"emptyLinePlaceholder":299},[275,613,614],{"class":277,"line":303},[275,615,616],{"class":281},"  # Core OCR engine runtime XCFramework\n",[275,618,619,622,624,626,628,631,634,637],{"class":277,"line":325},[275,620,621],{"class":345},"  pod ",[275,623,594],{"class":334},[275,625,251],{"class":338},[275,627,594],{"class":334},[275,629,630],{"class":321},",",[275,632,633],{"class":334}," '",[275,635,636],{"class":338},"~> 0.3.2",[275,638,639],{"class":334},"'\n",[275,641,642],{"class":277,"line":349},[275,643,300],{"emptyLinePlaceholder":299},[275,645,646],{"class":277,"line":360},[275,647,648],{"class":281},"  # Decoupled pre-packaged model bundle (~6 MB total)\n",[275,650,651,653,655,658,660,662,664,666],{"class":277,"line":380},[275,652,621],{"class":345},[275,654,594],{"class":334},[275,656,657],{"class":338},"RustO-Models-PPOCRv6-Tiny",[275,659,594],{"class":334},[275,661,630],{"class":321},[275,663,633],{"class":334},[275,665,636],{"class":338},[275,667,639],{"class":334},[275,669,670],{"class":277,"line":396},[275,671,672],{"class":281},"  # Or larger model tiers:\n",[275,674,675],{"class":277,"line":402},[275,676,677],{"class":281},"  # pod 'RustO-Models-PPOCRv6-Small'\n",[275,679,680],{"class":277,"line":412},[275,681,682],{"class":281},"  # pod 'RustO-Models-PPOCRv5-Mobile'\n",[275,684,685],{"class":277,"line":450},[275,686,687],{"class":288},"end\n",[179,689,690],{},"Then install the dependencies:",[237,692,696],{"className":693,"code":694,"language":695,"meta":243,"style":243},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark monokai","pod install\n","bash",[183,697,698],{"__ignoreMap":243},[275,699,700,704],{"class":277,"line":278},[275,701,703],{"class":702},"sR7ES","pod",[275,705,706],{"class":338}," install\n",[192,708],{},[195,710,712,713,375],{"id":711},"_1-permissions-configuration-infoplist","1. Permissions Configuration (",[183,714,715],{},"Info.plist",[179,717,718,719,331],{},"If capturing images from the camera or photo library, declare the appropriate usage descriptions in your app's ",[183,720,715],{},[237,722,726],{"className":723,"code":724,"language":725,"meta":243,"style":243},"language-xml shiki shiki-themes material-theme-lighter github-light github-dark monokai","\u003Ckey>NSCameraUsageDescription\u003C\u002Fkey>\n\u003Cstring>Allow access to the camera to scan documents and extract text.\u003C\u002Fstring>\n\u003Ckey>NSPhotoLibraryUsageDescription\u003C\u002Fkey>\n\u003Cstring>Allow access to photo library to select document images for OCR.\u003C\u002Fstring>\n","xml",[183,727,728,751,769,786],{"__ignoreMap":243},[275,729,730,733,737,740,743,746,748],{"class":277,"line":278},[275,731,732],{"class":321},"\u003C",[275,734,736],{"class":735},"sHsBP","key",[275,738,739],{"class":321},">",[275,741,742],{"class":345},"NSCameraUsageDescription",[275,744,745],{"class":321},"\u003C\u002F",[275,747,736],{"class":735},[275,749,750],{"class":321},">\n",[275,752,753,755,758,760,763,765,767],{"class":277,"line":285},[275,754,732],{"class":321},[275,756,757],{"class":735},"string",[275,759,739],{"class":321},[275,761,762],{"class":345},"Allow access to the camera to scan documents and extract text.",[275,764,745],{"class":321},[275,766,757],{"class":735},[275,768,750],{"class":321},[275,770,771,773,775,777,780,782,784],{"class":277,"line":296},[275,772,732],{"class":321},[275,774,736],{"class":735},[275,776,739],{"class":321},[275,778,779],{"class":345},"NSPhotoLibraryUsageDescription",[275,781,745],{"class":321},[275,783,736],{"class":735},[275,785,750],{"class":321},[275,787,788,790,792,794,797,799,801],{"class":277,"line":303},[275,789,732],{"class":321},[275,791,757],{"class":735},[275,793,739],{"class":321},[275,795,796],{"class":345},"Allow access to photo library to select document images for OCR.",[275,798,745],{"class":321},[275,800,757],{"class":735},[275,802,750],{"class":321},[192,804],{},[195,806,808],{"id":807},"_2-engine-initialization-model-resolution","2. Engine Initialization & Model Resolution",[211,810,812],{"id":811},"option-1-automatic-bundled-model-resolution","Option 1: Automatic Bundled Model Resolution",[179,814,815,816,818],{},"When using official model pods (e.g. ",[183,817,657],{},"), RustO! locates model weights inside the bundle automatically:",[237,820,822],{"className":269,"code":821,"language":271,"meta":243,"style":243},"import RustO\n\ndo {\n    \u002F\u002F Automatically locates bundled PP-OCRv6 det.rten, rec.rten, and dict.txt\n    let ocr = try RustO.initialize()\n} catch {\n    print(\"OCR initialization failed: \\(error)\")\n}\n",[183,823,824,831,835,843,848,871,881,907],{"__ignoreMap":243},[275,825,826,828],{"class":277,"line":278},[275,827,289],{"class":288},[275,829,830],{"class":292}," RustO\n",[275,832,833],{"class":277,"line":285},[275,834,300],{"emptyLinePlaceholder":299},[275,836,837,840],{"class":277,"line":296},[275,838,839],{"class":288},"do",[275,841,842],{"class":321}," {\n",[275,844,845],{"class":277,"line":303},[275,846,847],{"class":281},"    \u002F\u002F Automatically locates bundled PP-OCRv6 det.rten, rec.rten, and dict.txt\n",[275,849,850,853,856,859,862,865,868],{"class":277,"line":325},[275,851,852],{"class":306},"    let",[275,854,855],{"class":345}," ocr ",[275,857,858],{"class":313},"=",[275,860,861],{"class":288}," try",[275,863,864],{"class":345}," RustO.",[275,866,867],{"class":317},"initialize",[275,869,870],{"class":321},"()\n",[275,872,873,876,879],{"class":277,"line":349},[275,874,875],{"class":321},"}",[275,877,878],{"class":288}," catch",[275,880,842],{"class":321},[275,882,883,886,888,890,893,897,901,903,905],{"class":277,"line":360},[275,884,885],{"class":317},"    print",[275,887,369],{"class":321},[275,889,342],{"class":334},[275,891,892],{"class":338},"OCR initialization failed: ",[275,894,896],{"class":895},"slF1C","\\(",[275,898,900],{"class":899},"s-euU","error",[275,902,375],{"class":895},[275,904,342],{"class":334},[275,906,393],{"class":321},[275,908,909],{"class":277,"line":380},[275,910,911],{"class":321},"}\n",[211,913,915],{"id":914},"option-2-custom-model-bundle-or-filesystem-path","Option 2: Custom Model Bundle or Filesystem Path",[179,917,918,919,331],{},"To supply custom models bundled in your app's main bundle or downloaded into ",[183,920,921],{},"Application Support",[237,923,925],{"className":269,"code":924,"language":271,"meta":243,"style":243},"import Foundation\nimport RustO\n\nfunc createCustomEngine() throws -> RustO {\n    guard let detPath = Bundle.main.path(forResource: \"custom_det\", ofType: \"rten\"),\n          let recPath = Bundle.main.path(forResource: \"custom_rec\", ofType: \"rten\"),\n          let dictPath = Bundle.main.path(forResource: \"custom_dict\", ofType: \"txt\") else {\n        throw NSError(domain: \"RustO\", code: -1, userInfo: [NSLocalizedDescriptionKey: \"Model files missing from bundle\"])\n    }\n\n    let config = InitializeConfig(\n        template: \"ppv6\",\n        detection: DetectionConfig(modelPath: detPath),\n        recognition: RecognitionConfig(\n            modelPath: recPath,\n            dictPath: dictPath\n        )\n    )\n\n    return try RustO.initialize(config: config)\n}\n",[183,926,927,934,940,944,970,1021,1064,1110,1165,1170,1174,1188,1204,1228,1240,1250,1260,1264,1269,1273,1296],{"__ignoreMap":243},[275,928,929,931],{"class":277,"line":278},[275,930,289],{"class":288},[275,932,933],{"class":292}," Foundation\n",[275,935,936,938],{"class":277,"line":285},[275,937,289],{"class":288},[275,939,830],{"class":292},[275,941,942],{"class":277,"line":296},[275,943,300],{"emptyLinePlaceholder":299},[275,945,946,950,954,957,961,964,967],{"class":277,"line":303},[275,947,949],{"class":948},"srJo8","func",[275,951,953],{"class":952},"sD0ED"," createCustomEngine",[275,955,956],{"class":321},"()",[275,958,960],{"class":959},"sTNss"," throws",[275,962,963],{"class":313}," ->",[275,965,966],{"class":345}," RustO ",[275,968,969],{"class":321},"{\n",[275,971,972,975,978,981,983,986,989,991,994,996,998,1001,1003,1005,1008,1010,1012,1015,1017,1019],{"class":277,"line":325},[275,973,974],{"class":288},"    guard",[275,976,977],{"class":306}," let",[275,979,980],{"class":345}," detPath ",[275,982,858],{"class":313},[275,984,985],{"class":345}," Bundle.main.",[275,987,988],{"class":317},"path",[275,990,369],{"class":321},[275,992,993],{"class":317},"forResource",[275,995,331],{"class":321},[275,997,335],{"class":334},[275,999,1000],{"class":338},"custom_det",[275,1002,342],{"class":334},[275,1004,434],{"class":345},[275,1006,1007],{"class":317},"ofType",[275,1009,331],{"class":321},[275,1011,335],{"class":334},[275,1013,1014],{"class":338},"rten",[275,1016,342],{"class":334},[275,1018,375],{"class":321},[275,1020,346],{"class":345},[275,1022,1023,1026,1029,1031,1033,1035,1037,1039,1041,1043,1046,1048,1050,1052,1054,1056,1058,1060,1062],{"class":277,"line":349},[275,1024,1025],{"class":306},"          let",[275,1027,1028],{"class":345}," recPath ",[275,1030,858],{"class":313},[275,1032,985],{"class":345},[275,1034,988],{"class":317},[275,1036,369],{"class":321},[275,1038,993],{"class":317},[275,1040,331],{"class":321},[275,1042,335],{"class":334},[275,1044,1045],{"class":338},"custom_rec",[275,1047,342],{"class":334},[275,1049,434],{"class":345},[275,1051,1007],{"class":317},[275,1053,331],{"class":321},[275,1055,335],{"class":334},[275,1057,1014],{"class":338},[275,1059,342],{"class":334},[275,1061,375],{"class":321},[275,1063,346],{"class":345},[275,1065,1066,1068,1071,1073,1075,1077,1079,1081,1083,1085,1088,1090,1092,1094,1096,1098,1101,1103,1105,1108],{"class":277,"line":360},[275,1067,1025],{"class":306},[275,1069,1070],{"class":345}," dictPath ",[275,1072,858],{"class":313},[275,1074,985],{"class":345},[275,1076,988],{"class":317},[275,1078,369],{"class":321},[275,1080,993],{"class":317},[275,1082,331],{"class":321},[275,1084,335],{"class":334},[275,1086,1087],{"class":338},"custom_dict",[275,1089,342],{"class":334},[275,1091,434],{"class":345},[275,1093,1007],{"class":317},[275,1095,331],{"class":321},[275,1097,335],{"class":334},[275,1099,1100],{"class":338},"txt",[275,1102,342],{"class":334},[275,1104,375],{"class":321},[275,1106,1107],{"class":288}," else",[275,1109,842],{"class":321},[275,1111,1112,1115,1118,1120,1123,1125,1127,1129,1131,1133,1135,1137,1141,1143,1146,1148,1151,1153,1155,1158,1160,1163],{"class":277,"line":380},[275,1113,1114],{"class":288},"        throw",[275,1116,1117],{"class":317}," NSError",[275,1119,369],{"class":321},[275,1121,1122],{"class":317},"domain",[275,1124,331],{"class":321},[275,1126,335],{"class":334},[275,1128,251],{"class":338},[275,1130,342],{"class":334},[275,1132,434],{"class":345},[275,1134,183],{"class":317},[275,1136,331],{"class":321},[275,1138,1140],{"class":1139},"sYThS"," -1",[275,1142,434],{"class":345},[275,1144,1145],{"class":317},"userInfo",[275,1147,331],{"class":321},[275,1149,1150],{"class":345}," [NSLocalizedDescriptionKey",[275,1152,331],{"class":313},[275,1154,335],{"class":334},[275,1156,1157],{"class":338},"Model files missing from bundle",[275,1159,342],{"class":334},[275,1161,1162],{"class":345},"]",[275,1164,393],{"class":321},[275,1166,1167],{"class":277,"line":396},[275,1168,1169],{"class":321},"    }\n",[275,1171,1172],{"class":277,"line":402},[275,1173,300],{"emptyLinePlaceholder":299},[275,1175,1176,1178,1181,1183,1186],{"class":277,"line":412},[275,1177,852],{"class":306},[275,1179,1180],{"class":345}," config ",[275,1182,858],{"class":313},[275,1184,1185],{"class":317}," InitializeConfig",[275,1187,322],{"class":321},[275,1189,1190,1193,1195,1197,1200,1202],{"class":277,"line":450},[275,1191,1192],{"class":317},"        template",[275,1194,331],{"class":321},[275,1196,335],{"class":334},[275,1198,1199],{"class":338},"ppv6",[275,1201,342],{"class":334},[275,1203,346],{"class":345},[275,1205,1206,1209,1211,1214,1216,1219,1221,1224,1226],{"class":277,"line":455},[275,1207,1208],{"class":317},"        detection",[275,1210,331],{"class":321},[275,1212,1213],{"class":317}," DetectionConfig",[275,1215,369],{"class":321},[275,1217,1218],{"class":317},"modelPath",[275,1220,331],{"class":321},[275,1222,1223],{"class":345}," detPath",[275,1225,375],{"class":321},[275,1227,346],{"class":345},[275,1229,1230,1233,1235,1238],{"class":277,"line":465},[275,1231,1232],{"class":317},"        recognition",[275,1234,331],{"class":321},[275,1236,1237],{"class":317}," RecognitionConfig",[275,1239,322],{"class":321},[275,1241,1242,1245,1247],{"class":277,"line":475},[275,1243,1244],{"class":317},"            modelPath",[275,1246,331],{"class":321},[275,1248,1249],{"class":345}," recPath,\n",[275,1251,1252,1255,1257],{"class":277,"line":491},[275,1253,1254],{"class":317},"            dictPath",[275,1256,331],{"class":321},[275,1258,1259],{"class":345}," dictPath\n",[275,1261,1262],{"class":277,"line":501},[275,1263,547],{"class":321},[275,1265,1266],{"class":277,"line":538},[275,1267,1268],{"class":321},"    )\n",[275,1270,1271],{"class":277,"line":544},[275,1272,300],{"emptyLinePlaceholder":299},[275,1274,1275,1278,1280,1282,1284,1286,1289,1291,1294],{"class":277,"line":550},[275,1276,1277],{"class":288},"    return",[275,1279,861],{"class":288},[275,1281,864],{"class":345},[275,1283,867],{"class":317},[275,1285,369],{"class":321},[275,1287,1288],{"class":317},"config",[275,1290,331],{"class":321},[275,1292,1293],{"class":345}," config",[275,1295,393],{"class":321},[275,1297,1298],{"class":277,"line":556},[275,1299,911],{"class":321},[192,1301],{},[195,1303,1305],{"id":1304},"_3-input-sources","3. Input Sources",[179,1307,1308,1311],{},[183,1309,1310],{},"ImageSource"," supports local files, URLs, or in-memory image byte buffers:",[237,1313,1315],{"className":269,"code":1314,"language":271,"meta":243,"style":243},"import UIKit\nimport RustO\n\n\u002F\u002F 1. Local filesystem path or file URL\nlet fileSource = ImageSource.uri(\"\u002Fpath\u002Fto\u002Finvoice.png\")\n\n\u002F\u002F 2. UIImage converted to JPEG or PNG data\nguard let image = UIImage(named: \"receipt\"),\n      let imageData = image.jpegData(compressionQuality: 0.95) else { return }\n\nlet memorySource = ImageSource.bytes(imageData)\n",[183,1316,1317,1324,1330,1334,1339,1365,1369,1374,1407,1446,1450],{"__ignoreMap":243},[275,1318,1319,1321],{"class":277,"line":278},[275,1320,289],{"class":288},[275,1322,1323],{"class":292}," UIKit\n",[275,1325,1326,1328],{"class":277,"line":285},[275,1327,289],{"class":288},[275,1329,830],{"class":292},[275,1331,1332],{"class":277,"line":296},[275,1333,300],{"emptyLinePlaceholder":299},[275,1335,1336],{"class":277,"line":303},[275,1337,1338],{"class":281},"\u002F\u002F 1. Local filesystem path or file URL\n",[275,1340,1341,1343,1346,1348,1351,1354,1356,1358,1361,1363],{"class":277,"line":325},[275,1342,307],{"class":306},[275,1344,1345],{"class":345}," fileSource ",[275,1347,858],{"class":313},[275,1349,1350],{"class":345}," ImageSource.",[275,1352,1353],{"class":317},"uri",[275,1355,369],{"class":321},[275,1357,342],{"class":334},[275,1359,1360],{"class":338},"\u002Fpath\u002Fto\u002Finvoice.png",[275,1362,342],{"class":334},[275,1364,393],{"class":321},[275,1366,1367],{"class":277,"line":349},[275,1368,300],{"emptyLinePlaceholder":299},[275,1370,1371],{"class":277,"line":360},[275,1372,1373],{"class":281},"\u002F\u002F 2. UIImage converted to JPEG or PNG data\n",[275,1375,1376,1379,1381,1384,1386,1389,1391,1394,1396,1398,1401,1403,1405],{"class":277,"line":380},[275,1377,1378],{"class":288},"guard",[275,1380,977],{"class":306},[275,1382,1383],{"class":345}," image ",[275,1385,858],{"class":313},[275,1387,1388],{"class":317}," UIImage",[275,1390,369],{"class":321},[275,1392,1393],{"class":317},"named",[275,1395,331],{"class":321},[275,1397,335],{"class":334},[275,1399,1400],{"class":338},"receipt",[275,1402,342],{"class":334},[275,1404,375],{"class":321},[275,1406,346],{"class":345},[275,1408,1409,1412,1415,1417,1420,1423,1425,1428,1430,1433,1435,1437,1440,1443],{"class":277,"line":396},[275,1410,1411],{"class":306},"      let",[275,1413,1414],{"class":345}," imageData ",[275,1416,858],{"class":313},[275,1418,1419],{"class":345}," image.",[275,1421,1422],{"class":317},"jpegData",[275,1424,369],{"class":321},[275,1426,1427],{"class":317},"compressionQuality",[275,1429,331],{"class":321},[275,1431,1432],{"class":1139}," 0.95",[275,1434,375],{"class":321},[275,1436,1107],{"class":288},[275,1438,1439],{"class":321}," {",[275,1441,1442],{"class":288}," return",[275,1444,1445],{"class":321}," }\n",[275,1447,1448],{"class":277,"line":402},[275,1449,300],{"emptyLinePlaceholder":299},[275,1451,1452,1454,1457,1459,1461,1464,1466,1469],{"class":277,"line":412},[275,1453,307],{"class":306},[275,1455,1456],{"class":345}," memorySource ",[275,1458,858],{"class":313},[275,1460,1350],{"class":345},[275,1462,1463],{"class":317},"bytes",[275,1465,369],{"class":321},[275,1467,1468],{"class":345},"imageData",[275,1470,393],{"class":321},[192,1472],{},[195,1474,1476,1477,375],{"id":1475},"_4-request-local-options-ocrrunoptions","4. Request-Local Options (",[183,1478,164],{},[179,1480,1481],{},"Fine-tune recognition parameters per request:",[237,1483,1485],{"className":269,"code":1484,"language":271,"meta":243,"style":243},"let options = OcrRunOptions(\n    output: .lines,            \u002F\u002F .lines, .words, or .spatial\n    lineYThreshold: 0.5,       \u002F\u002F Line clustering threshold (0.0 - 1.0)\n    wordXThreshold: 0.4,       \u002F\u002F Word separation threshold (0.0 - 1.0)\n    textScore: 0.50,           \u002F\u002F Recognition confidence cutoff\n    maxSideLen: 1600,          \u002F\u002F Downscale bound for ultra-high-res images\n    detection: DetectionRunOptions(\n        limitSideLen: 960,\n        limitType: \"max\"\n    ),\n    postprocess: PostprocessRunOptions(\n        useDilation: true,     \u002F\u002F Morphological dilation for faint text receipts\n        unclipRatio: 1.8       \u002F\u002F Bounding box expansion ratio\n    )\n)\n",[183,1486,1487,1501,1514,1530,1545,1561,1577,1589,1601,1616,1623,1635,1652,1665,1669],{"__ignoreMap":243},[275,1488,1489,1491,1494,1496,1499],{"class":277,"line":278},[275,1490,307],{"class":306},[275,1492,1493],{"class":345}," options ",[275,1495,858],{"class":313},[275,1497,1498],{"class":317}," OcrRunOptions",[275,1500,322],{"class":321},[275,1502,1503,1506,1508,1511],{"class":277,"line":285},[275,1504,1505],{"class":317},"    output",[275,1507,331],{"class":321},[275,1509,1510],{"class":345}," .lines,            ",[275,1512,1513],{"class":281},"\u002F\u002F .lines, .words, or .spatial\n",[275,1515,1516,1519,1521,1524,1527],{"class":277,"line":296},[275,1517,1518],{"class":317},"    lineYThreshold",[275,1520,331],{"class":321},[275,1522,1523],{"class":1139}," 0.5",[275,1525,1526],{"class":345},",       ",[275,1528,1529],{"class":281},"\u002F\u002F Line clustering threshold (0.0 - 1.0)\n",[275,1531,1532,1535,1537,1540,1542],{"class":277,"line":303},[275,1533,1534],{"class":317},"    wordXThreshold",[275,1536,331],{"class":321},[275,1538,1539],{"class":1139}," 0.4",[275,1541,1526],{"class":345},[275,1543,1544],{"class":281},"\u002F\u002F Word separation threshold (0.0 - 1.0)\n",[275,1546,1547,1550,1552,1555,1558],{"class":277,"line":325},[275,1548,1549],{"class":317},"    textScore",[275,1551,331],{"class":321},[275,1553,1554],{"class":1139}," 0.50",[275,1556,1557],{"class":345},",           ",[275,1559,1560],{"class":281},"\u002F\u002F Recognition confidence cutoff\n",[275,1562,1563,1566,1568,1571,1574],{"class":277,"line":349},[275,1564,1565],{"class":317},"    maxSideLen",[275,1567,331],{"class":321},[275,1569,1570],{"class":1139}," 1600",[275,1572,1573],{"class":345},",          ",[275,1575,1576],{"class":281},"\u002F\u002F Downscale bound for ultra-high-res images\n",[275,1578,1579,1582,1584,1587],{"class":277,"line":360},[275,1580,1581],{"class":317},"    detection",[275,1583,331],{"class":321},[275,1585,1586],{"class":317}," DetectionRunOptions",[275,1588,322],{"class":321},[275,1590,1591,1594,1596,1599],{"class":277,"line":380},[275,1592,1593],{"class":317},"        limitSideLen",[275,1595,331],{"class":321},[275,1597,1598],{"class":1139}," 960",[275,1600,346],{"class":345},[275,1602,1603,1606,1608,1610,1613],{"class":277,"line":396},[275,1604,1605],{"class":317},"        limitType",[275,1607,331],{"class":321},[275,1609,335],{"class":334},[275,1611,1612],{"class":338},"max",[275,1614,1615],{"class":334},"\"\n",[275,1617,1618,1621],{"class":277,"line":402},[275,1619,1620],{"class":321},"    )",[275,1622,346],{"class":345},[275,1624,1625,1628,1630,1633],{"class":277,"line":412},[275,1626,1627],{"class":317},"    postprocess",[275,1629,331],{"class":321},[275,1631,1632],{"class":317}," PostprocessRunOptions",[275,1634,322],{"class":321},[275,1636,1637,1640,1642,1646,1649],{"class":277,"line":450},[275,1638,1639],{"class":317},"        useDilation",[275,1641,331],{"class":321},[275,1643,1645],{"class":1644},"s8HiA"," true",[275,1647,1648],{"class":345},",     ",[275,1650,1651],{"class":281},"\u002F\u002F Morphological dilation for faint text receipts\n",[275,1653,1654,1657,1659,1662],{"class":277,"line":455},[275,1655,1656],{"class":317},"        unclipRatio",[275,1658,331],{"class":321},[275,1660,1661],{"class":1139}," 1.8",[275,1663,1664],{"class":281},"       \u002F\u002F Bounding box expansion ratio\n",[275,1666,1667],{"class":277,"line":465},[275,1668,1268],{"class":321},[275,1670,1671],{"class":277,"line":475},[275,1672,393],{"class":321},[192,1674],{},[195,1676,1678],{"id":1677},"_5-structured-vs-spatial-recognition","5. Structured vs Spatial Recognition",[211,1680,1682],{"id":1681},"structured-line-detection","Structured Line Detection",[179,1684,1685],{},"Returns coordinates, polygon vertices, and recognition score for each line:",[237,1687,1689],{"className":269,"code":1688,"language":271,"meta":243,"style":243},"let result = try ocr.detectText(memorySource, options: OcrRunOptions(output: .lines))\n\nif case .structured(let items) = result {\n    for line in items {\n        print(\"[\\(String(format: \"%.2f\", line.score))] \\(line.text)\")\n        print(\"  Frame: X=\\(line.frame.left), Y=\\(line.frame.top), W=\\(line.frame.width), H=\\(line.frame.height)\")\n        print(\"  Polygon Quads: \\(line.boxPoints)\")\n    }\n}\n",[183,1690,1691,1733,1737,1766,1782,1842,1919,1943,1947],{"__ignoreMap":243},[275,1692,1693,1695,1698,1700,1702,1705,1708,1710,1713,1716,1718,1720,1722,1725,1727,1730],{"class":277,"line":278},[275,1694,307],{"class":306},[275,1696,1697],{"class":345}," result ",[275,1699,858],{"class":313},[275,1701,861],{"class":288},[275,1703,1704],{"class":345}," ocr.",[275,1706,1707],{"class":317},"detectText",[275,1709,369],{"class":321},[275,1711,1712],{"class":345},"memorySource, ",[275,1714,1715],{"class":317},"options",[275,1717,331],{"class":321},[275,1719,1498],{"class":317},[275,1721,369],{"class":321},[275,1723,1724],{"class":317},"output",[275,1726,331],{"class":321},[275,1728,1729],{"class":345}," .lines",[275,1731,1732],{"class":321},"))\n",[275,1734,1735],{"class":277,"line":285},[275,1736,300],{"emptyLinePlaceholder":299},[275,1738,1739,1742,1745,1748,1751,1753,1755,1758,1760,1762,1764],{"class":277,"line":296},[275,1740,1741],{"class":288},"if",[275,1743,1744],{"class":288}," case",[275,1746,1747],{"class":345}," .",[275,1749,1750],{"class":317},"structured",[275,1752,369],{"class":321},[275,1754,307],{"class":306},[275,1756,1757],{"class":345}," items",[275,1759,375],{"class":321},[275,1761,314],{"class":313},[275,1763,1697],{"class":345},[275,1765,969],{"class":321},[275,1767,1768,1771,1774,1777,1780],{"class":277,"line":303},[275,1769,1770],{"class":288},"    for",[275,1772,1773],{"class":345}," line ",[275,1775,1776],{"class":288},"in",[275,1778,1779],{"class":345}," items ",[275,1781,969],{"class":321},[275,1783,1784,1787,1789,1791,1794,1796,1800,1803,1806,1808,1810,1813,1815,1818,1821,1823,1825,1828,1830,1833,1836,1838,1840],{"class":277,"line":325},[275,1785,1786],{"class":317},"        print",[275,1788,369],{"class":321},[275,1790,342],{"class":334},[275,1792,1793],{"class":338},"[",[275,1795,896],{"class":895},[275,1797,1799],{"class":1798},"s_MOj","String",[275,1801,369],{"class":1802},"s00De",[275,1804,1805],{"class":317},"format",[275,1807,331],{"class":1802},[275,1809,335],{"class":334},[275,1811,1812],{"class":338},"%.2f",[275,1814,342],{"class":334},[275,1816,1817],{"class":899},", line.",[275,1819,1820],{"class":345},"score",[275,1822,375],{"class":1802},[275,1824,375],{"class":895},[275,1826,1827],{"class":338},"] ",[275,1829,896],{"class":895},[275,1831,1832],{"class":899},"line.",[275,1834,242],{"class":1835},"s91G_",[275,1837,375],{"class":895},[275,1839,342],{"class":334},[275,1841,393],{"class":321},[275,1843,1844,1846,1848,1850,1853,1855,1857,1860,1862,1865,1867,1870,1872,1874,1876,1878,1881,1883,1886,1888,1890,1892,1894,1897,1899,1902,1904,1906,1908,1910,1913,1915,1917],{"class":277,"line":349},[275,1845,1786],{"class":317},[275,1847,369],{"class":321},[275,1849,342],{"class":334},[275,1851,1852],{"class":338},"  Frame: X=",[275,1854,896],{"class":895},[275,1856,1832],{"class":899},[275,1858,1859],{"class":345},"frame",[275,1861,209],{"class":899},[275,1863,1864],{"class":345},"left",[275,1866,375],{"class":895},[275,1868,1869],{"class":338},", Y=",[275,1871,896],{"class":895},[275,1873,1832],{"class":899},[275,1875,1859],{"class":345},[275,1877,209],{"class":899},[275,1879,1880],{"class":345},"top",[275,1882,375],{"class":895},[275,1884,1885],{"class":338},", W=",[275,1887,896],{"class":895},[275,1889,1832],{"class":899},[275,1891,1859],{"class":345},[275,1893,209],{"class":899},[275,1895,1896],{"class":345},"width",[275,1898,375],{"class":895},[275,1900,1901],{"class":338},", H=",[275,1903,896],{"class":895},[275,1905,1832],{"class":899},[275,1907,1859],{"class":345},[275,1909,209],{"class":899},[275,1911,1912],{"class":345},"height",[275,1914,375],{"class":895},[275,1916,342],{"class":334},[275,1918,393],{"class":321},[275,1920,1921,1923,1925,1927,1930,1932,1934,1937,1939,1941],{"class":277,"line":360},[275,1922,1786],{"class":317},[275,1924,369],{"class":321},[275,1926,342],{"class":334},[275,1928,1929],{"class":338},"  Polygon Quads: ",[275,1931,896],{"class":895},[275,1933,1832],{"class":899},[275,1935,1936],{"class":345},"boxPoints",[275,1938,375],{"class":895},[275,1940,342],{"class":334},[275,1942,393],{"class":321},[275,1944,1945],{"class":277,"line":380},[275,1946,1169],{"class":321},[275,1948,1949],{"class":277,"line":396},[275,1950,911],{"class":321},[211,1952,1954],{"id":1953},"spatial-document-reconstruction","Spatial Document Reconstruction",[179,1956,1957],{},"Reconstructs original multi-column document geometry into aligned plain text:",[237,1959,1961],{"className":269,"code":1960,"language":271,"meta":243,"style":243},"let result = try ocr.detectText(memorySource, options: OcrRunOptions(output: .spatial))\n\nif case .spatial(let layoutText) = result {\n    print(\"--- Spatial Layout ---\\n\\(layoutText)\")\n}\n",[183,1962,1963,1998,2002,2028,2054],{"__ignoreMap":243},[275,1964,1965,1967,1969,1971,1973,1975,1977,1979,1981,1983,1985,1987,1989,1991,1993,1996],{"class":277,"line":278},[275,1966,307],{"class":306},[275,1968,1697],{"class":345},[275,1970,858],{"class":313},[275,1972,861],{"class":288},[275,1974,1704],{"class":345},[275,1976,1707],{"class":317},[275,1978,369],{"class":321},[275,1980,1712],{"class":345},[275,1982,1715],{"class":317},[275,1984,331],{"class":321},[275,1986,1498],{"class":317},[275,1988,369],{"class":321},[275,1990,1724],{"class":317},[275,1992,331],{"class":321},[275,1994,1995],{"class":345}," .spatial",[275,1997,1732],{"class":321},[275,1999,2000],{"class":277,"line":285},[275,2001,300],{"emptyLinePlaceholder":299},[275,2003,2004,2006,2008,2010,2013,2015,2017,2020,2022,2024,2026],{"class":277,"line":296},[275,2005,1741],{"class":288},[275,2007,1744],{"class":288},[275,2009,1747],{"class":345},[275,2011,2012],{"class":317},"spatial",[275,2014,369],{"class":321},[275,2016,307],{"class":306},[275,2018,2019],{"class":345}," layoutText",[275,2021,375],{"class":321},[275,2023,314],{"class":313},[275,2025,1697],{"class":345},[275,2027,969],{"class":321},[275,2029,2030,2032,2034,2036,2039,2043,2045,2048,2050,2052],{"class":277,"line":303},[275,2031,885],{"class":317},[275,2033,369],{"class":321},[275,2035,342],{"class":334},[275,2037,2038],{"class":338},"--- Spatial Layout ---",[275,2040,2042],{"class":2041},"sQeA1","\\n",[275,2044,896],{"class":895},[275,2046,2047],{"class":899},"layoutText",[275,2049,375],{"class":895},[275,2051,342],{"class":334},[275,2053,393],{"class":321},[275,2055,2056],{"class":277,"line":325},[275,2057,911],{"class":321},[192,2059],{},[195,2061,2063],{"id":2062},"_6-complete-swiftui-scanner-implementation","6. Complete SwiftUI Scanner Implementation",[179,2065,2066,2067,2070],{},"Always offload OCR execution to background threads or Swift Concurrency (",[183,2068,2069],{},"Task.detached",") to avoid blocking the main UI thread:",[237,2072,2074],{"className":269,"code":2073,"language":271,"meta":243,"style":243},"import SwiftUI\nimport PhotosUI\nimport RustO\n\nstruct DocumentScannerView: View {\n    @State private var selectedItem: PhotosPickerItem?\n    @State private var previewImage: UIImage?\n    @State private var recognizedText: String = \"\"\n    @State private var isProcessing: Bool = false\n    @State private var ocrEngine: RustO?\n\n    var body: some View {\n        NavigationStack {\n            VStack(spacing: 16) {\n                if let previewImage {\n                    Image(uiImage: previewImage)\n                        .resizable()\n                        .scaledToFit()\n                        .frame(maxHeight: 240)\n                        .cornerRadius(12)\n                }\n\n                PhotosPicker(selection: $selectedItem, matching: .images) {\n                    Label(\"Choose Document\", systemImage: \"doc.text.viewfinder\")\n                        .font(.headline)\n                        .frame(maxWidth: .infinity)\n                        .padding()\n                        .background(Color.orange)\n                        .foregroundColor(.white)\n                        .cornerRadius(10)\n                }\n                .onChange(of: selectedItem) { _, newItem in\n                    Task {\n                        guard let data = try? await newItem?.loadTransferable(type: Data.self),\n                              let uiImage = UIImage(data: data) else { return }\n                        previewImage = uiImage\n                        await runOcr(data: data)\n                    }\n                }\n\n                if isProcessing {\n                    ProgressView(\"Extracting text with RustO!...\")\n                        .padding()\n                }\n\n                ScrollView {\n                    Text(recognizedText.isEmpty ? \"No text recognized yet.\" : recognizedText)\n                        .font(.system(.body, design: .monospaced))\n                        .frame(maxWidth: .infinity, alignment: .leading)\n                        .padding()\n                        .background(Color(UIColor.secondarySystemBackground))\n                        .cornerRadius(8)\n                }\n            }\n            .padding()\n            .navigationTitle(\"RustO! iOS Scanner\")\n            .task {\n                \u002F\u002F Initialize engine in background\n                ocrEngine = try? RustO.initialize()\n            }\n        }\n    }\n\n    private func runOcr(data: Data) async {\n        guard let engine = ocrEngine else { return }\n        isProcessing = true\n        recognizedText = \"\"\n\n        \u002F\u002F Run inference detached from MainActor\n        let resultText: String = await Task.detached(priority: .userInitiated) {\n            do {\n                let options = OcrRunOptions(output: .spatial, lineYThreshold: 0.5, wordXThreshold: 0.4)\n                let result = try engine.detectText(.bytes(data), options: options)\n                if case .spatial(let text) = result {\n                    return text\n                }\n                return \"No text extracted.\"\n            } catch {\n                return \"OCR Error: \\(error.localizedDescription)\"\n            }\n        }.value\n\n        recognizedText = resultText\n        isProcessing = false\n    }\n}\n",[183,2075,2076,2083,2090,2096,2100,2116,2136,2151,2171,2192,2207,2211,2226,2233,2252,2264,2281,2291,2300,2318,2332,2337,2342,2370,2401,2416,2437,2447,2462,2477,2491,2496,2527,2535,2583,2616,2627,2646,2652,2657,2662,2672,2689,2698,2703,2708,2716,2748,2777,2806,2815,2834,2848,2853,2859,2869,2888,2898,2904,2922,2927,2933,2938,2943,2969,2994,3005,3015,3020,3026,3061,3069,3108,3147,3173,3182,3187,3200,3210,3232,3237,3248,3253,3263,3272,3277],{"__ignoreMap":243},[275,2077,2078,2080],{"class":277,"line":278},[275,2079,289],{"class":288},[275,2081,2082],{"class":292}," SwiftUI\n",[275,2084,2085,2087],{"class":277,"line":285},[275,2086,289],{"class":288},[275,2088,2089],{"class":292}," PhotosUI\n",[275,2091,2092,2094],{"class":277,"line":296},[275,2093,289],{"class":288},[275,2095,830],{"class":292},[275,2097,2098],{"class":277,"line":303},[275,2099,300],{"emptyLinePlaceholder":299},[275,2101,2102,2105,2108,2110,2114],{"class":277,"line":325},[275,2103,2104],{"class":948},"struct",[275,2106,2107],{"class":292}," DocumentScannerView",[275,2109,331],{"class":321},[275,2111,2113],{"class":2112},"sW3Pz"," View ",[275,2115,969],{"class":321},[275,2117,2118,2121,2124,2127,2130,2133],{"class":277,"line":349},[275,2119,2120],{"class":313},"    @",[275,2122,2123],{"class":959},"State",[275,2125,2126],{"class":306}," private",[275,2128,2129],{"class":306}," var",[275,2131,2132],{"class":345}," selectedItem: PhotosPickerItem",[275,2134,2135],{"class":313},"?\n",[275,2137,2138,2140,2142,2144,2146,2149],{"class":277,"line":360},[275,2139,2120],{"class":313},[275,2141,2123],{"class":959},[275,2143,2126],{"class":306},[275,2145,2129],{"class":306},[275,2147,2148],{"class":345}," previewImage: UIImage",[275,2150,2135],{"class":313},[275,2152,2153,2155,2157,2159,2161,2164,2166,2168],{"class":277,"line":380},[275,2154,2120],{"class":313},[275,2156,2123],{"class":959},[275,2158,2126],{"class":306},[275,2160,2129],{"class":306},[275,2162,2163],{"class":345}," recognizedText: ",[275,2165,1799],{"class":1798},[275,2167,314],{"class":313},[275,2169,2170],{"class":334}," \"\"\n",[275,2172,2173,2175,2177,2179,2181,2184,2187,2189],{"class":277,"line":396},[275,2174,2120],{"class":313},[275,2176,2123],{"class":959},[275,2178,2126],{"class":306},[275,2180,2129],{"class":306},[275,2182,2183],{"class":345}," isProcessing: ",[275,2185,2186],{"class":1798},"Bool",[275,2188,314],{"class":313},[275,2190,2191],{"class":1644}," false\n",[275,2193,2194,2196,2198,2200,2202,2205],{"class":277,"line":402},[275,2195,2120],{"class":313},[275,2197,2123],{"class":959},[275,2199,2126],{"class":306},[275,2201,2129],{"class":306},[275,2203,2204],{"class":345}," ocrEngine: RustO",[275,2206,2135],{"class":313},[275,2208,2209],{"class":277,"line":412},[275,2210,300],{"emptyLinePlaceholder":299},[275,2212,2213,2216,2219,2222,2224],{"class":277,"line":450},[275,2214,2215],{"class":306},"    var",[275,2217,2218],{"class":345}," body: ",[275,2220,2221],{"class":306},"some",[275,2223,2113],{"class":345},[275,2225,969],{"class":321},[275,2227,2228,2231],{"class":277,"line":455},[275,2229,2230],{"class":317},"        NavigationStack",[275,2232,842],{"class":321},[275,2234,2235,2238,2240,2243,2245,2248,2250],{"class":277,"line":465},[275,2236,2237],{"class":317},"            VStack",[275,2239,369],{"class":321},[275,2241,2242],{"class":317},"spacing",[275,2244,331],{"class":321},[275,2246,2247],{"class":1139}," 16",[275,2249,375],{"class":321},[275,2251,842],{"class":321},[275,2253,2254,2257,2259,2262],{"class":277,"line":475},[275,2255,2256],{"class":288},"                if",[275,2258,977],{"class":306},[275,2260,2261],{"class":345}," previewImage ",[275,2263,969],{"class":321},[275,2265,2266,2269,2271,2274,2276,2279],{"class":277,"line":491},[275,2267,2268],{"class":317},"                    Image",[275,2270,369],{"class":321},[275,2272,2273],{"class":317},"uiImage",[275,2275,331],{"class":321},[275,2277,2278],{"class":345}," previewImage",[275,2280,393],{"class":321},[275,2282,2283,2286,2289],{"class":277,"line":501},[275,2284,2285],{"class":345},"                        .",[275,2287,2288],{"class":317},"resizable",[275,2290,870],{"class":321},[275,2292,2293,2295,2298],{"class":277,"line":538},[275,2294,2285],{"class":345},[275,2296,2297],{"class":317},"scaledToFit",[275,2299,870],{"class":321},[275,2301,2302,2304,2306,2308,2311,2313,2316],{"class":277,"line":544},[275,2303,2285],{"class":345},[275,2305,1859],{"class":317},[275,2307,369],{"class":321},[275,2309,2310],{"class":317},"maxHeight",[275,2312,331],{"class":321},[275,2314,2315],{"class":1139}," 240",[275,2317,393],{"class":321},[275,2319,2320,2322,2325,2327,2330],{"class":277,"line":550},[275,2321,2285],{"class":345},[275,2323,2324],{"class":317},"cornerRadius",[275,2326,369],{"class":321},[275,2328,2329],{"class":1139},"12",[275,2331,393],{"class":321},[275,2333,2334],{"class":277,"line":556},[275,2335,2336],{"class":321},"                }\n",[275,2338,2340],{"class":277,"line":2339},22,[275,2341,300],{"emptyLinePlaceholder":299},[275,2343,2345,2348,2350,2353,2355,2358,2361,2363,2366,2368],{"class":277,"line":2344},23,[275,2346,2347],{"class":317},"                PhotosPicker",[275,2349,369],{"class":321},[275,2351,2352],{"class":317},"selection",[275,2354,331],{"class":321},[275,2356,2357],{"class":345}," $selectedItem, ",[275,2359,2360],{"class":317},"matching",[275,2362,331],{"class":321},[275,2364,2365],{"class":345}," .images",[275,2367,375],{"class":321},[275,2369,842],{"class":321},[275,2371,2373,2376,2378,2380,2383,2385,2387,2390,2392,2394,2397,2399],{"class":277,"line":2372},24,[275,2374,2375],{"class":317},"                    Label",[275,2377,369],{"class":321},[275,2379,342],{"class":334},[275,2381,2382],{"class":338},"Choose Document",[275,2384,342],{"class":334},[275,2386,434],{"class":345},[275,2388,2389],{"class":317},"systemImage",[275,2391,331],{"class":321},[275,2393,335],{"class":334},[275,2395,2396],{"class":338},"doc.text.viewfinder",[275,2398,342],{"class":334},[275,2400,393],{"class":321},[275,2402,2404,2406,2409,2411,2414],{"class":277,"line":2403},25,[275,2405,2285],{"class":345},[275,2407,2408],{"class":317},"font",[275,2410,369],{"class":321},[275,2412,2413],{"class":345},".headline",[275,2415,393],{"class":321},[275,2417,2419,2421,2423,2425,2428,2430,2432,2435],{"class":277,"line":2418},26,[275,2420,2285],{"class":345},[275,2422,1859],{"class":317},[275,2424,369],{"class":321},[275,2426,2427],{"class":317},"maxWidth",[275,2429,331],{"class":321},[275,2431,1747],{"class":345},[275,2433,2434],{"class":1835},"infinity",[275,2436,393],{"class":321},[275,2438,2440,2442,2445],{"class":277,"line":2439},27,[275,2441,2285],{"class":345},[275,2443,2444],{"class":317},"padding",[275,2446,870],{"class":321},[275,2448,2450,2452,2455,2457,2460],{"class":277,"line":2449},28,[275,2451,2285],{"class":345},[275,2453,2454],{"class":317},"background",[275,2456,369],{"class":321},[275,2458,2459],{"class":345},"Color.orange",[275,2461,393],{"class":321},[275,2463,2465,2467,2470,2472,2475],{"class":277,"line":2464},29,[275,2466,2285],{"class":345},[275,2468,2469],{"class":317},"foregroundColor",[275,2471,369],{"class":321},[275,2473,2474],{"class":345},".white",[275,2476,393],{"class":321},[275,2478,2480,2482,2484,2486,2489],{"class":277,"line":2479},30,[275,2481,2285],{"class":345},[275,2483,2324],{"class":317},[275,2485,369],{"class":321},[275,2487,2488],{"class":1139},"10",[275,2490,393],{"class":321},[275,2492,2494],{"class":277,"line":2493},31,[275,2495,2336],{"class":321},[275,2497,2499,2501,2504,2506,2509,2511,2514,2516,2518,2521,2524],{"class":277,"line":2498},32,[275,2500,504],{"class":345},[275,2502,2503],{"class":317},"onChange",[275,2505,369],{"class":321},[275,2507,2508],{"class":317},"of",[275,2510,331],{"class":321},[275,2512,2513],{"class":345}," selectedItem",[275,2515,375],{"class":321},[275,2517,1439],{"class":321},[275,2519,2520],{"class":1835}," _",[275,2522,2523],{"class":345},", newItem ",[275,2525,2526],{"class":288},"in\n",[275,2528,2530,2533],{"class":277,"line":2529},33,[275,2531,2532],{"class":317},"                    Task",[275,2534,842],{"class":321},[275,2536,2538,2541,2543,2546,2548,2550,2553,2556,2559,2561,2563,2566,2568,2571,2573,2576,2579,2581],{"class":277,"line":2537},34,[275,2539,2540],{"class":288},"                        guard",[275,2542,977],{"class":306},[275,2544,2545],{"class":345}," data ",[275,2547,858],{"class":313},[275,2549,861],{"class":288},[275,2551,2552],{"class":313},"?",[275,2554,2555],{"class":288}," await",[275,2557,2558],{"class":345}," newItem",[275,2560,2552],{"class":313},[275,2562,209],{"class":345},[275,2564,2565],{"class":317},"loadTransferable",[275,2567,369],{"class":321},[275,2569,2570],{"class":317},"type",[275,2572,331],{"class":321},[275,2574,2575],{"class":345}," Data.",[275,2577,2578],{"class":306},"self",[275,2580,375],{"class":321},[275,2582,346],{"class":345},[275,2584,2586,2589,2592,2594,2596,2598,2601,2603,2606,2608,2610,2612,2614],{"class":277,"line":2585},35,[275,2587,2588],{"class":306},"                              let",[275,2590,2591],{"class":345}," uiImage ",[275,2593,858],{"class":313},[275,2595,1388],{"class":317},[275,2597,369],{"class":321},[275,2599,2600],{"class":317},"data",[275,2602,331],{"class":321},[275,2604,2605],{"class":345}," data",[275,2607,375],{"class":321},[275,2609,1107],{"class":288},[275,2611,1439],{"class":321},[275,2613,1442],{"class":288},[275,2615,1445],{"class":321},[275,2617,2619,2622,2624],{"class":277,"line":2618},36,[275,2620,2621],{"class":345},"                        previewImage ",[275,2623,858],{"class":313},[275,2625,2626],{"class":345}," uiImage\n",[275,2628,2630,2633,2636,2638,2640,2642,2644],{"class":277,"line":2629},37,[275,2631,2632],{"class":288},"                        await",[275,2634,2635],{"class":317}," runOcr",[275,2637,369],{"class":321},[275,2639,2600],{"class":317},[275,2641,331],{"class":321},[275,2643,2605],{"class":345},[275,2645,393],{"class":321},[275,2647,2649],{"class":277,"line":2648},38,[275,2650,2651],{"class":321},"                    }\n",[275,2653,2655],{"class":277,"line":2654},39,[275,2656,2336],{"class":321},[275,2658,2660],{"class":277,"line":2659},40,[275,2661,300],{"emptyLinePlaceholder":299},[275,2663,2665,2667,2670],{"class":277,"line":2664},41,[275,2666,2256],{"class":288},[275,2668,2669],{"class":345}," isProcessing ",[275,2671,969],{"class":321},[275,2673,2675,2678,2680,2682,2685,2687],{"class":277,"line":2674},42,[275,2676,2677],{"class":317},"                    ProgressView",[275,2679,369],{"class":321},[275,2681,342],{"class":334},[275,2683,2684],{"class":338},"Extracting text with RustO!...",[275,2686,342],{"class":334},[275,2688,393],{"class":321},[275,2690,2692,2694,2696],{"class":277,"line":2691},43,[275,2693,2285],{"class":345},[275,2695,2444],{"class":317},[275,2697,870],{"class":321},[275,2699,2701],{"class":277,"line":2700},44,[275,2702,2336],{"class":321},[275,2704,2706],{"class":277,"line":2705},45,[275,2707,300],{"emptyLinePlaceholder":299},[275,2709,2711,2714],{"class":277,"line":2710},46,[275,2712,2713],{"class":317},"                ScrollView",[275,2715,842],{"class":321},[275,2717,2719,2722,2724,2727,2730,2733,2735,2738,2740,2743,2746],{"class":277,"line":2718},47,[275,2720,2721],{"class":317},"                    Text",[275,2723,369],{"class":321},[275,2725,2726],{"class":345},"recognizedText.",[275,2728,2729],{"class":1835},"isEmpty",[275,2731,2732],{"class":313}," ?",[275,2734,335],{"class":334},[275,2736,2737],{"class":338},"No text recognized yet.",[275,2739,342],{"class":334},[275,2741,2742],{"class":313}," :",[275,2744,2745],{"class":345}," recognizedText",[275,2747,393],{"class":321},[275,2749,2751,2753,2755,2757,2759,2762,2764,2767,2770,2772,2775],{"class":277,"line":2750},48,[275,2752,2285],{"class":345},[275,2754,2408],{"class":317},[275,2756,369],{"class":321},[275,2758,209],{"class":345},[275,2760,2761],{"class":317},"system",[275,2763,369],{"class":321},[275,2765,2766],{"class":345},".body, ",[275,2768,2769],{"class":317},"design",[275,2771,331],{"class":321},[275,2773,2774],{"class":345}," .monospaced",[275,2776,1732],{"class":321},[275,2778,2780,2782,2784,2786,2788,2790,2792,2794,2796,2799,2801,2804],{"class":277,"line":2779},49,[275,2781,2285],{"class":345},[275,2783,1859],{"class":317},[275,2785,369],{"class":321},[275,2787,2427],{"class":317},[275,2789,331],{"class":321},[275,2791,1747],{"class":345},[275,2793,2434],{"class":1835},[275,2795,434],{"class":345},[275,2797,2798],{"class":317},"alignment",[275,2800,331],{"class":321},[275,2802,2803],{"class":345}," .leading",[275,2805,393],{"class":321},[275,2807,2809,2811,2813],{"class":277,"line":2808},50,[275,2810,2285],{"class":345},[275,2812,2444],{"class":317},[275,2814,870],{"class":321},[275,2816,2818,2820,2822,2824,2827,2829,2832],{"class":277,"line":2817},51,[275,2819,2285],{"class":345},[275,2821,2454],{"class":317},[275,2823,369],{"class":321},[275,2825,2826],{"class":317},"Color",[275,2828,369],{"class":321},[275,2830,2831],{"class":345},"UIColor.secondarySystemBackground",[275,2833,1732],{"class":321},[275,2835,2837,2839,2841,2843,2846],{"class":277,"line":2836},52,[275,2838,2285],{"class":345},[275,2840,2324],{"class":317},[275,2842,369],{"class":321},[275,2844,2845],{"class":1139},"8",[275,2847,393],{"class":321},[275,2849,2851],{"class":277,"line":2850},53,[275,2852,2336],{"class":321},[275,2854,2856],{"class":277,"line":2855},54,[275,2857,2858],{"class":321},"            }\n",[275,2860,2862,2865,2867],{"class":277,"line":2861},55,[275,2863,2864],{"class":345},"            .",[275,2866,2444],{"class":317},[275,2868,870],{"class":321},[275,2870,2872,2874,2877,2879,2881,2884,2886],{"class":277,"line":2871},56,[275,2873,2864],{"class":345},[275,2875,2876],{"class":317},"navigationTitle",[275,2878,369],{"class":321},[275,2880,342],{"class":334},[275,2882,2883],{"class":338},"RustO! iOS Scanner",[275,2885,342],{"class":334},[275,2887,393],{"class":321},[275,2889,2891,2893,2896],{"class":277,"line":2890},57,[275,2892,2864],{"class":345},[275,2894,2895],{"class":317},"task",[275,2897,842],{"class":321},[275,2899,2901],{"class":277,"line":2900},58,[275,2902,2903],{"class":281},"                \u002F\u002F Initialize engine in background\n",[275,2905,2907,2910,2912,2914,2916,2918,2920],{"class":277,"line":2906},59,[275,2908,2909],{"class":345},"                ocrEngine ",[275,2911,858],{"class":313},[275,2913,861],{"class":288},[275,2915,2552],{"class":313},[275,2917,864],{"class":345},[275,2919,867],{"class":317},[275,2921,870],{"class":321},[275,2923,2925],{"class":277,"line":2924},60,[275,2926,2858],{"class":321},[275,2928,2930],{"class":277,"line":2929},61,[275,2931,2932],{"class":321},"        }\n",[275,2934,2936],{"class":277,"line":2935},62,[275,2937,1169],{"class":321},[275,2939,2941],{"class":277,"line":2940},63,[275,2942,300],{"emptyLinePlaceholder":299},[275,2944,2946,2949,2952,2954,2956,2959,2962,2964,2967],{"class":277,"line":2945},64,[275,2947,2948],{"class":306},"    private",[275,2950,2951],{"class":948}," func",[275,2953,2635],{"class":952},[275,2955,369],{"class":321},[275,2957,2600],{"class":2958},"srB0j",[275,2960,2961],{"class":345},": Data",[275,2963,375],{"class":321},[275,2965,2966],{"class":959}," async",[275,2968,842],{"class":321},[275,2970,2972,2975,2977,2980,2982,2985,2988,2990,2992],{"class":277,"line":2971},65,[275,2973,2974],{"class":288},"        guard",[275,2976,977],{"class":306},[275,2978,2979],{"class":345}," engine ",[275,2981,858],{"class":313},[275,2983,2984],{"class":345}," ocrEngine ",[275,2986,2987],{"class":288},"else",[275,2989,1439],{"class":321},[275,2991,1442],{"class":288},[275,2993,1445],{"class":321},[275,2995,2997,3000,3002],{"class":277,"line":2996},66,[275,2998,2999],{"class":345},"        isProcessing ",[275,3001,858],{"class":313},[275,3003,3004],{"class":1644}," true\n",[275,3006,3008,3011,3013],{"class":277,"line":3007},67,[275,3009,3010],{"class":345},"        recognizedText ",[275,3012,858],{"class":313},[275,3014,2170],{"class":334},[275,3016,3018],{"class":277,"line":3017},68,[275,3019,300],{"emptyLinePlaceholder":299},[275,3021,3023],{"class":277,"line":3022},69,[275,3024,3025],{"class":281},"        \u002F\u002F Run inference detached from MainActor\n",[275,3027,3029,3032,3035,3037,3039,3041,3044,3047,3049,3052,3054,3057,3059],{"class":277,"line":3028},70,[275,3030,3031],{"class":306},"        let",[275,3033,3034],{"class":345}," resultText: ",[275,3036,1799],{"class":1798},[275,3038,314],{"class":313},[275,3040,2555],{"class":288},[275,3042,3043],{"class":345}," Task.",[275,3045,3046],{"class":317},"detached",[275,3048,369],{"class":321},[275,3050,3051],{"class":317},"priority",[275,3053,331],{"class":321},[275,3055,3056],{"class":345}," .userInitiated",[275,3058,375],{"class":321},[275,3060,842],{"class":321},[275,3062,3064,3067],{"class":277,"line":3063},71,[275,3065,3066],{"class":288},"            do",[275,3068,842],{"class":321},[275,3070,3072,3075,3077,3079,3081,3083,3085,3087,3090,3093,3095,3097,3099,3102,3104,3106],{"class":277,"line":3071},72,[275,3073,3074],{"class":306},"                let",[275,3076,1493],{"class":345},[275,3078,858],{"class":313},[275,3080,1498],{"class":317},[275,3082,369],{"class":321},[275,3084,1724],{"class":317},[275,3086,331],{"class":321},[275,3088,3089],{"class":345}," .spatial, ",[275,3091,3092],{"class":317},"lineYThreshold",[275,3094,331],{"class":321},[275,3096,1523],{"class":1139},[275,3098,434],{"class":345},[275,3100,3101],{"class":317},"wordXThreshold",[275,3103,331],{"class":321},[275,3105,1539],{"class":1139},[275,3107,393],{"class":321},[275,3109,3111,3113,3115,3117,3119,3122,3124,3126,3128,3130,3132,3134,3136,3138,3140,3142,3145],{"class":277,"line":3110},73,[275,3112,3074],{"class":306},[275,3114,1697],{"class":345},[275,3116,858],{"class":313},[275,3118,861],{"class":288},[275,3120,3121],{"class":345}," engine.",[275,3123,1707],{"class":317},[275,3125,369],{"class":321},[275,3127,209],{"class":345},[275,3129,1463],{"class":317},[275,3131,369],{"class":321},[275,3133,2600],{"class":345},[275,3135,375],{"class":321},[275,3137,434],{"class":345},[275,3139,1715],{"class":317},[275,3141,331],{"class":321},[275,3143,3144],{"class":345}," options",[275,3146,393],{"class":321},[275,3148,3150,3152,3154,3156,3158,3160,3162,3165,3167,3169,3171],{"class":277,"line":3149},74,[275,3151,2256],{"class":288},[275,3153,1744],{"class":288},[275,3155,1747],{"class":345},[275,3157,2012],{"class":317},[275,3159,369],{"class":321},[275,3161,307],{"class":306},[275,3163,3164],{"class":345}," text",[275,3166,375],{"class":321},[275,3168,314],{"class":313},[275,3170,1697],{"class":345},[275,3172,969],{"class":321},[275,3174,3176,3179],{"class":277,"line":3175},75,[275,3177,3178],{"class":288},"                    return",[275,3180,3181],{"class":345}," text\n",[275,3183,3185],{"class":277,"line":3184},76,[275,3186,2336],{"class":321},[275,3188,3190,3193,3195,3198],{"class":277,"line":3189},77,[275,3191,3192],{"class":288},"                return",[275,3194,335],{"class":334},[275,3196,3197],{"class":338},"No text extracted.",[275,3199,1615],{"class":334},[275,3201,3203,3206,3208],{"class":277,"line":3202},78,[275,3204,3205],{"class":321},"            }",[275,3207,878],{"class":288},[275,3209,842],{"class":321},[275,3211,3213,3215,3217,3220,3222,3225,3228,3230],{"class":277,"line":3212},79,[275,3214,3192],{"class":288},[275,3216,335],{"class":334},[275,3218,3219],{"class":338},"OCR Error: ",[275,3221,896],{"class":895},[275,3223,3224],{"class":899},"error.",[275,3226,3227],{"class":345},"localizedDescription",[275,3229,375],{"class":895},[275,3231,1615],{"class":334},[275,3233,3235],{"class":277,"line":3234},80,[275,3236,2858],{"class":321},[275,3238,3240,3243,3245],{"class":277,"line":3239},81,[275,3241,3242],{"class":321},"        }",[275,3244,209],{"class":345},[275,3246,3247],{"class":1835},"value\n",[275,3249,3251],{"class":277,"line":3250},82,[275,3252,300],{"emptyLinePlaceholder":299},[275,3254,3256,3258,3260],{"class":277,"line":3255},83,[275,3257,3010],{"class":345},[275,3259,858],{"class":313},[275,3261,3262],{"class":345}," resultText\n",[275,3264,3266,3268,3270],{"class":277,"line":3265},84,[275,3267,2999],{"class":345},[275,3269,858],{"class":313},[275,3271,2191],{"class":1644},[275,3273,3275],{"class":277,"line":3274},85,[275,3276,1169],{"class":321},[275,3278,3280],{"class":277,"line":3279},86,[275,3281,911],{"class":321},[3283,3284,3285],"style",{},"html pre.shiki code .ss7Ak, html code.shiki .ss7Ak{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit;--shiki-sepia:#88846F;--shiki-sepia-font-style:inherit}html pre.shiki code .sRxSC, html code.shiki .sRxSC{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit;--shiki-sepia:#F92672;--shiki-sepia-font-style:inherit}html pre.shiki code .sKvfc, html code.shiki .sKvfc{--shiki-light:#E2931D;--shiki-light-text-decoration:inherit;--shiki-default:#6F42C1;--shiki-default-text-decoration:inherit;--shiki-dark:#B392F0;--shiki-dark-text-decoration:inherit;--shiki-sepia:#A6E22E;--shiki-sepia-text-decoration:underline}html pre.shiki code .shWJe, html code.shiki .shWJe{--shiki-light:#F76D47;--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .sGXK2, html code.shiki .sGXK2{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .sMLJd, html code.shiki .sMLJd{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#66D9EF}html pre.shiki code .swvn1, html code.shiki .swvn1{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}html pre.shiki code .siCPE, html code.shiki .siCPE{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .sLACW, html code.shiki .sLACW{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#E6DB74}html pre.shiki code .ss--_, html code.shiki .ss--_{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8;--shiki-sepia:#F8F8F2}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 .sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html.sepia .shiki span {color: var(--shiki-sepia);background: var(--shiki-sepia-bg);font-style: var(--shiki-sepia-font-style);font-weight: var(--shiki-sepia-font-weight);text-decoration: var(--shiki-sepia-text-decoration);}html pre.shiki code .sR7ES, html code.shiki .sR7ES{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .sHsBP, html code.shiki .sHsBP{--shiki-light:#E53935;--shiki-default:#22863A;--shiki-dark:#85E89D;--shiki-sepia:#F92672}html pre.shiki code .slF1C, html code.shiki .slF1C{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#F92672}html pre.shiki code .s-euU, html code.shiki .s-euU{--shiki-light:#90A4AE;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#F8F8F2}html pre.shiki code .srJo8, html code.shiki .srJo8{--shiki-light:#9C3EDA;--shiki-light-font-style:inherit;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .sD0ED, html code.shiki .sD0ED{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0;--shiki-sepia:#A6E22E}html pre.shiki code .sTNss, html code.shiki .sTNss{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583;--shiki-sepia:#F92672}html pre.shiki code .sYThS, html code.shiki .sYThS{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .s8HiA, html code.shiki .s8HiA{--shiki-light:#FF5370;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .s_MOj, html code.shiki .s_MOj{--shiki-light:#E2931D;--shiki-light-font-style:inherit;--shiki-default:#005CC5;--shiki-default-font-style:inherit;--shiki-dark:#79B8FF;--shiki-dark-font-style:inherit;--shiki-sepia:#66D9EF;--shiki-sepia-font-style:italic}html pre.shiki code .s00De, html code.shiki .s00De{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF;--shiki-sepia:#F8F8F2}html pre.shiki code .s91G_, html code.shiki .s91G_{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#F8F8F2}html pre.shiki code .sQeA1, html code.shiki .sQeA1{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF;--shiki-sepia:#AE81FF}html pre.shiki code .sW3Pz, html code.shiki .sW3Pz{--shiki-light:#E2931D;--shiki-light-font-style:inherit;--shiki-light-text-decoration:inherit;--shiki-default:#6F42C1;--shiki-default-font-style:inherit;--shiki-default-text-decoration:inherit;--shiki-dark:#B392F0;--shiki-dark-font-style:inherit;--shiki-dark-text-decoration:inherit;--shiki-sepia:#A6E22E;--shiki-sepia-font-style:italic;--shiki-sepia-text-decoration:underline}html pre.shiki code .srB0j, html code.shiki .srB0j{--shiki-light:#6182B8;--shiki-light-font-style:italic;--shiki-default:#6F42C1;--shiki-default-font-style:inherit;--shiki-dark:#B392F0;--shiki-dark-font-style:inherit;--shiki-sepia:#A6E22E;--shiki-sepia-font-style:inherit}",{"title":243,"searchDepth":285,"depth":285,"links":3287},[3288,3292,3294,3298,3299,3301,3305],{"id":197,"depth":285,"text":15,"children":3289},[3290,3291],{"id":213,"depth":296,"text":214},{"id":572,"depth":296,"text":573},{"id":711,"depth":285,"text":3293},"1. Permissions Configuration (Info.plist)",{"id":807,"depth":285,"text":808,"children":3295},[3296,3297],{"id":811,"depth":296,"text":812},{"id":914,"depth":296,"text":915},{"id":1304,"depth":285,"text":1305},{"id":1475,"depth":285,"text":3300},"4. Request-Local Options (OcrRunOptions)",{"id":1677,"depth":285,"text":1678,"children":3302},[3303,3304],{"id":1681,"depth":296,"text":1682},{"id":1953,"depth":296,"text":1954},{"id":2062,"depth":285,"text":2063},"Integrating RustO! into iOS Swift and SwiftUI applications via Swift Package Manager (SPM) or CocoaPods.","md",null,{},{"icon":54},{"title":3312,"description":3306},"Use iOS (Swift) - RustO!","H677nCS-zkNQ3B_ToOhficUy1yBSWQ4qlNMVp4jamqI",[3315,3317],{"title":46,"path":47,"stem":48,"description":3316,"icon":49,"children":-1},"How to use @rustors\u002Freact-native in React Native applications for iOS and Android, covering New Architecture (TurboModules), CocoaPods, and Expo.",{"title":56,"path":57,"stem":58,"description":3318,"icon":59,"children":-1},"Using RustO! in native Android Kotlin and Jetpack Compose applications via JitPack.",1792905888204]