最近有个需求,就是另外一个应用 A 需要跳转到我们的 B(已设置url schemes)内做某些操作然后再返回到 A 内,在返回的时候就需要 A 设置一个url schemes 来让 B 跳转以返回到 A 内。

    

    但是在 A 跳转到 B 后,当 B 发现 A 没有把它自己的 url schemes传过来的时候,B 就傻眼了,B 怎么回去呢,当然iOS9之后自带的返回不用做处理,那么9以下的版本呢,这个时候在 A 跳转到 B 前,就需要判断下 A 是否设置了相应的url schemes,没设置就不让跳转。


    但是问题来了,我要怎么判断 A 是不是设置了url schemes 呢?当我遇到这个问题的时候,第一反应就是去谷歌搜答案,但是这个问题不是怎么好描述,就没能搜到答案,最后还去stackoverflow提了一问,整整折腾了一下午也没能找到答案。

    

    今天早起的时候突然想到了以前见过用代码来回去当前系统版本的搜了搜代码:

NSDictionary* infoDict =[[NSBundle mainBundle] infoDictionary];
NSString* versionNum =[infoDict objectForKey:@"CFBundleVersion"];
NSString*appName =[infoDict objectForKey:@"CFBundleDisplayName"];
NSString*text =[NSString stringWithFormat:@"%@ %@",appName,versionNum];

    infoDict好像就是整个程序的配置文件取出来的字典,忍不住打印了出来。果然发现了什么

CFBundleURLTypes
	
		
			CFBundleTypeRole
			Editor
			CFBundleURLSchemes
			
				aaa123
			
		
	

    里面有我自己在应用内设置的url schems,然后直接取出来就解决了这个问题。

    

    这个问题的解决给了我另外的思路,在遇到一个令人无从下手的问题的时候,除了搜索还应该自己去思考一个解决方案,尽管可能很痛苦,但一定要尝试。