{"id":68,"date":"2020-10-18T21:34:11","date_gmt":"2020-10-18T12:34:11","guid":{"rendered":"http:\/\/practical.kr\/?p=68"},"modified":"2020-10-18T21:34:11","modified_gmt":"2020-10-18T12:34:11","slug":"ios-swift-icloud-drive%ec%97%90-%ed%8c%8c%ec%9d%bc-%ec%97%85%eb%a1%9c%eb%93%9c-%ed%95%98%ea%b8%b0","status":"publish","type":"post","link":"http:\/\/practical.kr\/?p=68","title":{"rendered":"iOS\/Swift \u2013 iCloud Drive\uc5d0 \ud30c\uc77c \uc5c5\ub85c\ub4dc \ud558\uae30"},"content":{"rendered":"\n<p>2011\ub144 4\uc6d4\uc5d0 \uc560\ud50c \uc571\uc2a4\ud1a0\uc5b4\uc5d0 \uc5c5\ub85c\ub4dc\ud55c Fake Location\uc774 \uc5b4\ubdf0\uc9d5 \uc694\uc18c\uac00 \uc788\ub2e4\ub294 \uc774\uc720\ub85c 2020\ub144 4\uc6d4\uc5d0 \uc2a4\ud1a0\uc5b4\uc5d0\uc11c \uac15\uc81c\ub85c \ud1f4\ucd9c\ub2f9\ud588\ub2e4. \uc774\uac78 \ub9c8\uc9c0\ub9c9\uc73c\ub85c \uc571\uc2a4\ud1a0\uc5b4\uc5d0 \ud310\ub9e4\uc911\uc778 \uc571\uc774 \ud55c\uac1c\ub3c4 \ub0a8\uc9c0 \uc54a\uac8c\ub418\uc5b4 \uc0c8\ub85c\uc6b4 \uc571\uc744 \ud558\ub098 \ub9cc\ub4e4\uae30\ub85c \ud588\ub2e4.<\/p>\n\n\n\n<p>\uba87\uc77c\uac04 \ub0a8\ub294 \uc2dc\uac04\uc744 \ucabc\uac1c\uc5b4 \uadf8\ub7ed\uc800\ub7ed \ubcf4\uc774\uc2a4\ub97c \ub179\uc74c\ud558\uace0 \ud50c\ub808\uc774\ud558\ub294 \uc791\uc5c5\uc744 \ud558\uace0 \uc788\uc5c8\ub294\ub370 \uc54c\uc218 \uc5c6\ub294 \ubb38\uc81c\uc5d0 \ubd09\ucc29\ud588\ub2e4. \ub179\uc74c\ub41c \ubcf4\uc774\uc2a4 \ud30c\uc77c\uc740 \uc544\uc774\ud3f0\uc5d0 \uc800\uc7a5\ub418\uc5b4\uc57c \ud558\uace0 \uc635\uc158\uc73c\ub85c iCloud Drive\uc5d0 \uc800\uc7a5\ub418\uc5b4\uc57c \ud574\uc11c iCloud\uc5d0 \uc800\uc7a5\ud558\ub294 \uae30\ub2a5\uc744 \ucd94\uac00 \ud588\ub294\ub370 \ud30c\uc77c\uc740 \ubd84\uba85\ud788 \uc800\uc7a5\uc774 \ub418\uace0 \uc6d0\uaca9 \ud50c\ub808\uc774\uae4c\uc9c0 \uc815\uc0c1\uc801\uc73c\ub85c \ub418\ub294\ub370 iCloud Drive\uc5d0 \ud3f4\ub354\uc640 \ud30c\uc77c\uc774 \ubcf4\uc774\uc9c0 \uc54a\ub294 \ubb38\uc81c\uac00 \ubc1c\uc0dd\ud588\ub2e4.<\/p>\n\n\n\n<p>\uc54c\uace0\ubcf4\uba74 \uac04\ub2e8\ud55c \ubb38\uc81c\uc600\uc9c0\ub9cc \ubb38\uc81c\ub77c\ub294\uac8c \ud56d\uc0c1 \uadf8\ub807\ub4ef \ubaa8\ub974\uba74 \uad34\ub85c\uc6b8 \ubfd0\uc774\ub2e4. \uac8c\ub2e4\uac00 \ucf54\ub4dc \ubb38\uc81c\ub77c\uae30\ubcf4\ub2e8 \uc124\uc815(?) \ubb38\uc81c\ub77c\uba74 \ud574\uacb0\ud6c4 \ud5c8\ubb34\ud568\uae4c\uc9c0 \ub3d9\ubc18\ud55c\ub2e4.<\/p>\n\n\n\n<p>\uc544\uc774\ud3f0 \ub85c\uceec \ud3f4\ub354 \uc5bb\uae30<\/p>\n\n\n\n<p>\uc544\uc774\ud3f0 \ub85c\uceec \ub3c4\ud050\uba3c\ud2b8 \ud3f4\ub354\ub97c \uc5bb\ub294 \ubc29\ubc95\uc740 \uc544\ub798\uc758 \ucf54\ub4dc\ub85c \uc800\uc7a5\ud560 \ud30c\uc77c\uc744 \uc0dd\uc131 \ud560 \uc218 \uc788\ub2e4. \uc0dd\uc131\ub41c audioFilename\uc744 AVAudioRecorder\uc5d0 \ub118\uaca8\uc8fc\uba74 \ub179\uc74c\uc774 \uc644\ub8cc\ub41c\ud6c4 \ud30c\uc77c\uc774 \uc0dd\uc131\ub418\ub294 \uac83\uc744 \ud655\uc778 \ud560 \uc218 \uc788\ub2e4. \uc544\ub798 \ucf54\ub4dc\uc758 \uacb0\uacfc\ub85c \ub300\ub7b5 \uc774\ub7f0 \ub85c\ucf00\uc774\uc158\uc774 \uc5bb\uc5b4\uc9c4\ub2e4.<\/p>\n\n\n\n<p>file:\/\/\/var\/mobile\/Containers\/Data\/Application\/9F57DEC2-3A40-40AA-9EC5-5D104E94053F\/Documents\/voice.m4a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>let<\/strong> saveFilename = \"voice.m4a\"\n<strong>let<\/strong> path = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first\n<strong>let<\/strong> audioFilename = path!.appendingPathComponent(saveFilename) <\/pre>\n\n\n\n<p>iCloud Drive \uc6d0\uaca9 \ud3f4\ub354 \uc5bb\uae30<\/p>\n\n\n\n<p>\uc6d0\uaca9 \ud3f4\ub354\ub97c \uc5bb\ub294 \ubc29\ubc95\uc740 \uc57d\uac04\uc758 \uc124\uc815\uc791\uc5c5\uc744 \ud574\uc57c\ud55c\ub2e4. Xcode\uc758 Signning &amp; Capability\ud0ed\uc5d0\uc11c +Capability \ud0ed\uc744 \uc120\ud0dd\ud558\uc5ec iCloud \uc0ac\uc6a9\uc124\uc815\uc744 \ud574\uc57c\ud55c\ub2e4. \ubb3c\ub860 \uc774\uac78 \ud558\ub824\uba74 \uac1c\ubc1c\uc790 \uacc4\uc815\uc774 \ud544\uc694\ud558\ub2e4.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"http:\/\/practical.kr\/wp-content\/uploads\/2020\/05\/ai_recorder.xcodeproj-2020-05-05-11-14-09.png\" alt=\"\" class=\"wp-image-138\"\/><figcaption>\uc124\uc815\ubc29\ubc95<\/figcaption><\/figure>\n\n\n\n<p>\uc704\uc640 \uac19\uc740 \uc124\uc815\uc744 \ud574\uc8fc\uba74 .entitlement \ud30c\uc77c\uc774 \uc0dd\uc131\ub41c\ub2e4. \uadf8\ub9ac\uace0 \uc544\ub798 \ucf54\ub4dc\ub97c \uc774\uc6a9\ud558\uba74 iCloud Drive \ud3f4\ub354\uc5d0 \ud30c\uc77c\uc744 \uc0dd\uc131 \ud560 \uc218 \uc788\ub2e4. \ud30c\uc77c\uba85\uc774 \uc544\ub798\ucc98\ub7fc \uc0dd\uc131\ub41c\ub2e4. \ub808\ucf54\ub529 \uacb0\uacfc\uac00 \uc0dd\uc131\ub41c \ud30c\uc77c\uba85\uc73c\ub85c \uc798 \uc800\uc7a5\ub418\uc5c8\ub2e4.<\/p>\n\n\n\n<p>file:\/\/\/private\/var\/mobile\/Library\/Mobile%20Documents\/iCloud~com~*****\/Documents\/voice.m4a<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"><strong>let<\/strong> saveFilename = \"voice.m4a\"\n<strong>let<\/strong> path = FileManager.default.url(forUbiquityContainerIdentifier: <strong>nil<\/strong>)?.appendingPathComponent(\"Documents\")\n<strong>let<\/strong> audioFilename = path!.appendingPathComponent(saveFilename) <\/pre>\n\n\n\n<p>\uadf8\ub7f0\ub370 \ud3f4\ub354\uac00 \ubcf4\uc774\uc9c0 \uc54a\ub294\ub2e4<\/p>\n\n\n\n<p>iCloud Drive\uc5d0 \ud30c\uc77c\uc744 \uc5c5\ub85c\ub4dc \ud588\uc73c\ub2c8 \ub2f9\uc5f0\ud788 \ub098\uc758 \ub9e5\ubd81 Finder \uc5d0 iCloud Drive\uc5d0 \uc624\ub514\uc624 \ud30c\uc77c\uc774 \ubcf4\uc5ec\uc57c \ud558\ub294\ub370 \ubcf4\uc774\uc9c0 \uc54a\uc558\ub2e4. \uc5ec\uae30\uc5d0 \ubcf4\uc774\uc9c0 \uc54a\uc73c\uba74 \ud30c\uc77c\uc744 \ubcf5\uc0ac\ud558\uac70\ub098 \uc774\ub3d9 \uc2dc\ud0ac \uc218 \uc5c6\ub2e4. \ub09c\uac10\ud558\ub124\u2026 \uadf8\ub798\uc11c 3\uc77c\uc744 \uae4c\uba39\uc5c8\ub2e4. \uacb0\ub860\uc801\uc778 \uc774\uc57c\uae30\uc9c0\ub9cc \ud074\ub77c\uc6b0\ub4dc\uc5d0 \ud30c\uc77c\uc744 \uc5c5\ub85c\ub4dc \ud558\uace0 \uc0ac\uc6a9\uc790\uac00 \uc190\ub300\uc9c0 \ubabb\ud558\uac8c \ud558\ub824\uba74 \uc5ec\uae30\uae4c\uc9c0\ub9cc \ud558\uba74 \ub41c\ub2e4. \ubb3c\ub860 \uc544\uc774\ud3f0\uc758 \uc124\uc815 \u2013 iCloud \u2013 \uc800\uc7a5\uacf5\uac04\uad00\ub9ac \u2013 (\uc571) \u2013 \uc5d0\uc11c \uc0ad\uc81c \ud560 \uc218\ub294 \uc788\ub2e4.<\/p>\n\n\n\n<p>\ubb38\uc81c\uc758 \ud574\uacb0\uc740 \ub9e4\uc6b0 \uac04\ub2e8\ud588\ub2e4. info.plist\uc5d0 \uc544\ub798\uc640 \uac19\uc740 Key\uac12\uc744 \ucd94\uac00 \ud574\uc8fc\uba74 \ub41c\ub2e4. \ubb3c\ub860 key\ub294 \uac01\uc790\uc758 \uac83\uc744 \uc0ac\uc6a9\ud574\uc57c \ud55c\ub2e4. \uac1c\ubc1c\uc790\uac00 \ucf54\ub4dc\ub85c \ubb38\uc81c\ub97c \ud574\uacb0 \ubabb\ud558\uace0 \uc124\uc815\ub54c\ubb38\uc5d0 \uba87\uc77c\uc529 \uae4c\uba39\uace0 \ub098\uba74 \ub9e4\uc6b0 \ud5c8\ubb34\ud574\uc9c4\ub2e4. ^^; \uc774\uac74 \uc544\ub798\uc758 stackoverflow \ub9c1\ud06c\uc758 \uc911\uac04\ucbe4\uc5d0 \u2018\ub09c \uc774\ub807\uac8c \ud574\uacb0\ud588\uc5b4\u2019 \uac00 \uc788\uc5c8\ub294\ub370\u2026 \uae00\ud0c0\ub798\uac00 \uae38\uc5b4\uc11c \ub300\ucda9 \uc77d\uace0 \ub118\uc5b4\uac00\ub290\ub77c \ubabb\ubcf8\uac70 \uc600\ub358\uac83 \ubfd0\uc774\uc5c8\ub2e4. \uacb0\uad6d 3\uc77c\uc9f8 \ubaa8\ub4e0 \ub300\ub2f5\ub4e4\uc744 \ub2e4\uc2dc \uaf3c\uaf3c\ud788 \uc77d\uace0 \ub2e4 \uc2dc\ub3c4\ud574 \ubcf4\uace0\uc11c\uc57c \ubb38\uc81c\ub97c \ucc3e\uc744 \uc218 \uc788\uc5c8\ub2e4. \uad50\ud6c8\uc740 \uc880 \ub354 \uaf3c\uaf3c\ud574 \uc838\uc57c \ud55c\ub2e4.. \uc815\ub3c4?<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;key>NSUbiquitousContainers&lt;\/key>\n&lt;dict>\n    &lt;key>iCloud.net.redacted.docTest&lt;\/key>\n    &lt;dict>\n        &lt;key>NSUbiquitousContainerIsDocumentScopePublic&lt;\/key>\n        &lt;true\/>\n        &lt;key>NSUbiquitousContainerSupportedFolderLevels&lt;\/key>\n        &lt;string>Any&lt;\/string>\n    &lt;\/dict>\n&lt;\/dict><\/code><\/pre>\n\n\n\n<p><a href=\"https:\/\/stackoverflow.com\/questions\/25203697\/exposing-an-apps-ubiquitous-container-to-icloud-drive-in-ios-8\">https:\/\/stackoverflow.com\/questions\/25203697\/exposing-an-apps-ubiquitous-container-to-icloud-drive-in-ios-8<\/a><\/p>\n\n\n\n<p>\uc774 \uc124\uc815\uc744 \ucd94\uac00\ud558\uba74 \uc544\uc774\ud3f0\uc758 \ud30c\uc77c\uc571 \uadf8\ub9ac\uace0 \uacc4\uc815\uc774 \uc5f0\uacb0\ub41c \ub9e5\ubd81 \ub610\ub294 \ub2e4\ub978 \ucef4\ud4e8\ud130\uc5d0\uc11c \uc0dd\uc131\ub41c \ud3f4\ub354\uc640 \ud30c\uc77c\uc744 \ud655\uc778 \ud560 \uc218 \uc788\ub2e4.<\/p>\n\n\n\n<p>\uc774 \ud504\ub85c\uc81d\ud2b8\ub294 \ud604\uc7ac \ub300\ub7b5 20% \uc815\ub3c4 \uc9c4\ud589\ub418\uc5c8\ub2e4. \uc2dc\uc791\ub9cc \ud574\ub193\uace0 \ub9c8\ubb34\ub9ac\ub294 \ud558\uc9c0 \ubabb\ud55c \uc77c\ub4e4\uc774 \ub108\ubb34 \ub9ce\uc544\uc11c \uc774\uc81c\ub294 \uc678\ubd80\uc5d0 \uacf5\ud45c\ub97c \ud574\uac00\uba70 \uc2a4\uc2a4\ub85c\ub97c \ucc44\ucc0d\uc9c8\uc744 \ud574\ubcf4\ub824\uace0 \ud558\uace0\ub294 \uc788\uc9c0\ub9cc \uacfc\uc5f0 \ub9c8\ubb34\ub9ac\ub97c \ud560 \uc218 \uc788\uc744\uc9c0\ub294 \uc798 \ubaa8\ub974\uaca0\ub2e4. \ube14\ub85c\uadf8 \ud55c\uac1c \uc37b\uc73c\ub2c8 \uadf8\ub098\ub9c8 \ubcf4\ub78c\uc774 \uc788\ub294\uac83\uc77c\uae4c?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>2011\ub144 4\uc6d4\uc5d0 \uc560\ud50c \uc571\uc2a4\ud1a0\uc5b4\uc5d0 \uc5c5\ub85c\ub4dc\ud55c Fake Location\uc774 \uc5b4\ubdf0\uc9d5 \uc694\uc18c\uac00 \uc788\ub2e4\ub294 \uc774\uc720\ub85c 2020\ub144 4\uc6d4\uc5d0 \uc2a4\ud1a0\uc5b4\uc5d0\uc11c \uac15\uc81c\ub85c \ud1f4\ucd9c\ub2f9\ud588\ub2e4. \uc774\uac78 \ub9c8\uc9c0\ub9c9\uc73c\ub85c \uc571\uc2a4\ud1a0\uc5b4\uc5d0 \ud310\ub9e4\uc911\uc778 \uc571\uc774 \ud55c\uac1c\ub3c4 \ub0a8\uc9c0 \uc54a\uac8c\ub418\uc5b4 \uc0c8\ub85c\uc6b4 \uc571\uc744 \ud558\ub098 \ub9cc\ub4e4\uae30\ub85c \ud588\ub2e4. \uba87\uc77c\uac04 \ub0a8\ub294 \uc2dc\uac04\uc744 \ucabc\uac1c\uc5b4 \uadf8\ub7ed\uc800\ub7ed \ubcf4\uc774\uc2a4\ub97c \ub179\uc74c\ud558\uace0 \ud50c\ub808\uc774\ud558\ub294 \uc791\uc5c5\uc744 \ud558\uace0 \uc788\uc5c8\ub294\ub370 \uc54c\uc218 \uc5c6\ub294 \ubb38\uc81c\uc5d0 \ubd09\ucc29\ud588\ub2e4. \ub179\uc74c\ub41c \ubcf4\uc774\uc2a4 \ud30c\uc77c\uc740 \uc544\uc774\ud3f0\uc5d0 \uc800\uc7a5\ub418\uc5b4\uc57c \ud558\uace0 \uc635\uc158\uc73c\ub85c iCloud Drive\uc5d0 \uc800\uc7a5\ub418\uc5b4\uc57c \ud574\uc11c<\/p>\n<div class=\"more-link\">\n\t\t\t\t <a href=\"http:\/\/practical.kr\/?p=68\" class=\"link-btn theme-btn\"><span>Read More <\/span> <i class=\"fa fa-caret-right\"><\/i><\/a>\n\t\t\t<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[13,26,27],"tags":[],"class_list":["post-68","post","type-post","status-publish","format-standard","hentry","category-ios","category-iphone","category-swift"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"http:\/\/practical.kr\/index.php?rest_route=\/wp\/v2\/posts\/68","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/practical.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/practical.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/practical.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/practical.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=68"}],"version-history":[{"count":1,"href":"http:\/\/practical.kr\/index.php?rest_route=\/wp\/v2\/posts\/68\/revisions"}],"predecessor-version":[{"id":69,"href":"http:\/\/practical.kr\/index.php?rest_route=\/wp\/v2\/posts\/68\/revisions\/69"}],"wp:attachment":[{"href":"http:\/\/practical.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=68"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/practical.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=68"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/practical.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=68"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}