《iOS11中UIDocumentInteractionController/UIActivityViewController分享文件到三方app毫無反應(yīng)》問題的解決方案

UIDocumentInteractionController和UIActivityViewController主要都是用來完成app間文件傳輸?shù)墓δ埽ㄒ簿褪莻髡f中的進(jìn)程間交互)扮匠,很多人將他當(dāng)做是一種系統(tǒng)原生的分享方案宅倒。具體如何實(shí)現(xiàn)在此就不做贅述了崔涂,很多前輩都寫過相關(guān)的文章蠕啄,非常詳盡。

這篇文章主要解決的問題是:

通過UIDocumentInteractionController/UIActivityViewController把文件分享給第三方app,之前本來用的好好的,怎么到了iOS11就毫無反應(yīng)了呢?

解決問題的關(guān)鍵點(diǎn)就是:copy文件到沙盒窄驹。
對(duì)褪秀,就是這么簡(jiǎn)單牵现,但也就是這么出人意料诸老。實(shí)際應(yīng)用中拒迅,大多數(shù)分享的文件可能都是保存在沙盒里的寓调;但是综膀,一般做Demo的時(shí)候呻征,大多可能就是拖個(gè)文件到boundle中谆级,這也就造成了后續(xù)分享文件功能毫無反應(yīng)的結(jié)果洞拨。

來說說具體怎么改進(jìn)吧扯罐。

  1. 首先,如果你要分享的文件是在boundle中烦衣,那么就一定要先把他copy到沙盒中歹河,然后把沙盒路徑傳給UIDocumentInteractionController/UIActivityViewController;
  2. 既然做了copy花吟,那么大多數(shù)情況下也同樣需要remove掉秸歧,不然應(yīng)用所占體積會(huì)越來越大,當(dāng)然衅澈,如果你有特殊需求除外键菱。但是remove需要放在哪里進(jìn)行呢?
    1 - 對(duì)UIActivityViewController 來說今布,他有一個(gè)屬性completionWithItemsHandler经备,這是用戶完成/取消選擇的回調(diào)拭抬,在回調(diào)中刪除沙盒中copy過去的文件,并不影響三方app獲取文件侵蒙,因?yàn)榇藭r(shí)文件已經(jīng)被復(fù)制到了三方的沙盒中造虎,默認(rèn)是/Documents/Inbox中。
    2 - 對(duì)于UIDocumentInteractionController纷闺,其分享彈窗有兩套方法:OpenInMenu 和 OptionsMenu算凿,甚至連代理方法都有對(duì)應(yīng)的兩套:
- (void)documentInteractionControllerDidDismissOptionsMenu:(UIDocumentInteractionController *)controller;

- (void)documentInteractionControllerDidDismissOpenInMenu:(UIDocumentInteractionController *)controller;

從方法名就可以看出來,這兩個(gè)方法也是分享彈窗在消失時(shí)調(diào)用的代理方法急但,因此根據(jù)你彈出分享彈窗的方式在相應(yīng)的代理方法中實(shí)現(xiàn)remove文件的操作即可澎媒。

  1. 如果你的app需要接收別人分享過來的文件,那么在什么地方接收呢波桩?
    在UIDocumentInteractionController的官方文檔《Document Interaction Programming Topics for iOS》

You receive information about the file to be opened in the application:willFinishLaunchingWithOptions: or application:didFinishLaunchingWithOptions: method of your application delegate. If your application handles custom file types, you must implement this delegate method (instead of the applicationDidFinishLaunching: method) and use it to initialize your application.

建議使用application:willFinishLaunchingWithOptions:application:didFinishLaunchingWithOptions:方法來接收分享過來的文件信息,但經(jīng)過我的實(shí)踐發(fā)現(xiàn):
無論iOS11還是iOS10请敦,無論是UIDocumentInteractionController還是UIActivityViewController:
1.當(dāng)接收app在后臺(tái)時(shí)镐躲,有其他app向其分享文件,都會(huì)執(zhí)行
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options方法侍筛;
2.接收app在完全退出的情況下萤皂,有其他app向其分享文件,會(huì)先后執(zhí)行
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法匣椰。
因此個(gè)人建議統(tǒng)一在openURL方法中處理即可裆熙。

還有一個(gè)很坑的地方,就是UIDocumentInteractionController的強(qiáng)引用問題禽笑。在iOS11之前入录,如果不強(qiáng)引用,則會(huì)直接崩潰佳镜;而在iOS11中僚稿,不崩潰了~ 我原本天真的以為,是修好了~然而我還是太年輕蟀伸。蚀同。。僅僅只是把崩潰修好了而已0√汀4缆纭!你可能沒太理解我的意思吧迟蜜?崩潰修好了不就是好了嗎刹孔?是“只”有崩潰好了!后面的功能還是不能用小泉!還得強(qiáng)引用才能正常使用芦疏!我勒個(gè)擦冕杠!以前還有報(bào)錯(cuò)信息可循,現(xiàn)在直接就是毫無反應(yīng)酸茴,讓人更加懵圈分预!簡(jiǎn)直爆炸啊P胶础A浴!

還有就是這個(gè)copy文件的問題酪穿,我也沒有在任何官方文檔中看到凳干,因?yàn)閕OS11出來之后,和UIDocumentInteractionController還有UIActivityViewController相關(guān)的所有文檔被济,Guide救赐,Sample Code等等都沒有過任何更新。只磷。经磅。感覺又是Apple自己悄悄弄的呢。钮追。预厌。(如果有小伙伴能找到相關(guān)的官方說明,敬請(qǐng)賜教元媚,非常感謝T础)

特別鳴謝
我全網(wǎng)只在這個(gè)帖子的9樓看到了copy的解決方法(他說的是copy到cache中,實(shí)測(cè)到Document也沒有問題)刊棕,鳴謝這位做好事不留名的英雄炭晒。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鞠绰,隨后出現(xiàn)的幾起案子腰埂,更是在濱河造成了極大的恐慌,老刑警劉巖蜈膨,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件屿笼,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡翁巍,警方通過查閱死者的電腦和手機(jī)驴一,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來灶壶,“玉大人肝断,你說我怎么就攤上這事。” “怎么了胸懈?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵担扑,是天一觀的道長。 經(jīng)常有香客問我趣钱,道長涌献,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任首有,我火速辦了婚禮燕垃,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘井联。我一直安慰自己卜壕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布烙常。 她就那樣靜靜地躺著轴捎,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蚕脏。 梳的紋絲不亂的頭發(fā)上轮蜕,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音蝗锥,去河邊找鬼。 笑死率触,一個(gè)胖子當(dāng)著我的面吹牛终议,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播葱蝗,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼穴张,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了两曼?” 一聲冷哼從身側(cè)響起皂甘,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎悼凑,沒想到半個(gè)月后偿枕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡户辫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年渐夸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片渔欢。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡墓塌,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情苫幢,我是刑警寧澤访诱,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站韩肝,受9級(jí)特大地震影響触菜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜伞梯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一玫氢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谜诫,春花似錦漾峡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至且预,卻和暖如春槽袄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锋谐。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工遍尺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人涮拗。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓乾戏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親三热。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鼓择,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 1.ios高性能編程 (1).內(nèi)層 最小的內(nèi)層平均值和峰值(2).耗電量 高效的算法和數(shù)據(jù)結(jié)構(gòu)(3).初始化時(shí)...
    歐辰_OSR閱讀 29,320評(píng)論 8 265
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,089評(píng)論 1 32
  • 前言 iOS中的沙盒可以讓平臺(tái)更加的安全,這也是沙盒給用戶帶來的最主要好處就漾。不過由于沙盒的嚴(yán)格限制呐能,導(dǎo)致程序之間共...
    不簡(jiǎn)單的風(fēng)度閱讀 5,336評(píng)論 0 6
  • 時(shí)間在無形中飛快的向前跑著摆出,而自己感覺一直在重復(fù)著同樣的日子,工作的壓力開始增加夷野,感覺空閑的時(shí)間越來越少懊蒸,自己一直...
    嘟嘟小胖閱讀 203評(píng)論 0 0
  • 春日骑丸,萬物復(fù)蘇舌仍,跋涉河流,順著山岳的腳往下游走通危,被火車拖曳著越陌度阡铸豁,在黃土高原上生生不息。 冷風(fēng)吹著荒蕩的土地慢...
    半榛半檸閱讀 777評(píng)論 5 5