今天在引入一個第三方的拍照選擇照片的庫時,編譯報錯蒿讥。
Undefined symbolsforarchitecture x86_64:"_ALAssetPropertyAssetURL", referenced from:? ? ? -[TZImageManager getAssetIdentifier:]inTZImageManager.o"_ALAssetPropertyDuration", referenced from:? ? ? ___90-[TZImageManager getAssetsFromFetchResult:allowPickingVideo:allowPickingImage:completion:]_block_invoke139inTZImageManager.o? ? ? ___97-[TZImageManager getAssetFromFetchResult:atIndex:allowPickingVideo:allowPickingImage:completion:]_block_invokeinTZImageManager.o"_ALAssetPropertyType", referenced from:? ? ? ___90-[TZImageManager getAssetsFromFetchResult:allowPickingVideo:allowPickingImage:completion:]_block_invoke139inTZImageManager.o? ? ? ___97-[TZImageManager getAssetFromFetchResult:atIndex:allowPickingVideo:allowPickingImage:completion:]_block_invokeinTZImageManager.o"_ALAssetPropertyURLs", referenced from:? ? ? -[TZImageManager getVideoWithAsset:completion:]inTZImageManager.o? ? ? -[TZImageManager isAssetsArray:containAsset:]inTZImageManager.o"_ALAssetTypeVideo", referenced from:? ? ? ___90-[TZImageManager getAssetsFromFetchResult:allowPickingVideo:allowPickingImage:completion:]_block_invoke139inTZImageManager.o? ? ? ___97-[TZImageManager getAssetFromFetchResult:atIndex:allowPickingVideo:allowPickingImage:completion:]_block_invokeinTZImageManager.o"_ALAssetsGroupPropertyName", referenced from:? ? ? ___66-[TZImageManager getCameraRollAlbum:allowPickingImage:completion:]_block_invokeinTZImageManager.o? ? ? ___60-[TZImageManager getAllAlbums:allowPickingImage:completion:]_block_invokeinTZImageManager.o"_OBJC_CLASS_$_ALAsset", referenced from:? ? ? objc-class-refinTZImageManager.o"_OBJC_CLASS_$_ALAssetsFilter", referenced from:? ? ? objc-class-refinTZImageManager.o"_OBJC_CLASS_$_ALAssetsGroup", referenced from:? ? ? objc-class-refinTZImageManager.o"_OBJC_CLASS_$_ALAssetsLibrary", referenced from:? ? ? objc-class-refinTZImageManager.o"_OBJC_CLASS_$_PHAsset", referenced from:? ? ? objc-class-refinTZImageManager.o"_OBJC_CLASS_$_PHAssetCollection", referenced from:? ? ? objc-class-refinTZImageManager.o"_OBJC_CLASS_$_PHAssetCreationRequest", referenced from:? ? ? objc-class-refinTZImageManager.o"_OBJC_CLASS_$_PHAssetResourceCreationOptions", referenced from:? ? ? objc-class-refinTZImageManager.o"_OBJC_CLASS_$_PHCachingImageManager", referenced from:? ? ? objc-class-refinTZImageManager.o"_OBJC_CLASS_$_PHFetchOptions", referenced from:? ? ? objc-class-refinTZImageManager.o"_OBJC_CLASS_$_PHFetchResult", referenced from:? ? ? objc-class-refinTZImageManager.o"_OBJC_CLASS_$_PHImageManager", referenced from:? ? ? objc-class-refinTZAssetCell.o? ? ? objc-class-refinTZImageManager.o"_OBJC_CLASS_$_PHImageRequestOptions", referenced from:? ? ? objc-class-refinTZImageManager.o"_OBJC_CLASS_$_PHPhotoLibrary", referenced from:? ? ? objc-class-refinTZImageManager.o"_OBJC_CLASS_$_PHVideoRequestOptions", referenced from:? ? ? objc-class-refinTZImageManager.o"_PHImageCancelledKey", referenced from:? ? ? ___58-[TZImageManager getPhotoWithAsset:photoWidth:completion:]_block_invokeinTZImageManager.o? ? ? ___55-[TZImageManager getOriginalPhotoWithAsset:completion:]_block_invokeinTZImageManager.o"_PHImageErrorKey", referenced from:? ? ? ___58-[TZImageManager getPhotoWithAsset:photoWidth:completion:]_block_invokeinTZImageManager.o? ? ? ___55-[TZImageManager getOriginalPhotoWithAsset:completion:]_block_invokeinTZImageManager.o"_PHImageManagerMaximumSize", referenced from:? ? ? -[TZImageManager getOriginalPhotoWithAsset:completion:]inTZImageManager.o"_PHImageResultIsDegradedKey", referenced from:? ? ? ___58-[TZImageManager getPhotoWithAsset:photoWidth:completion:]_block_invokeinTZImageManager.o? ? ? ___58-[TZImageManager getPhotoWithAsset:photoWidth:completion:]_block_invoke_2inTZImageManager.o"_PHImageResultIsInCloudKey", referenced from:? ? ? ___58-[TZImageManager getPhotoWithAsset:photoWidth:completion:]_block_invokeinTZImageManager.old: symbol(s) not foundforarchitecture x86_64clang: error: linkercommandfailed withexitcode1(use -v to see invocation)
經(jīng)過幾個小時的查資料薛躬,和嘗試粒氧,基本上確定了是由于部分依賴的框架沒有導入(天知道為什么會沒有導入度迂,我在另一個項目里面直接拖進去就可以編譯的,坑爹的xcode)简珠。
于是我仔細看了下報錯的內(nèi)容阶界,都是指向TZImageManager,于是我到對應的.m文件里面聋庵,發(fā)現(xiàn)它引用了系統(tǒng)的AssetsLibrary框架:
屏幕快照 2016-07-01 16.41.07.png
我嘗試手動導入這個框架:
屏幕快照 2016-07-01 16.45.05.png
編譯一下膘融,原來報27個錯,現(xiàn)在只有17個了祭玉,看來有效果氧映。于是我繼續(xù)找還缺少了什么框架。現(xiàn)在的報錯如下:
Undefined symbolsforarchitecture x86_64:"_OBJC_CLASS_$_PHAsset", referenced from:? ? ? objc-class-refinTZImageManager.o"_OBJC_CLASS_$_PHAssetCollection", referenced from:? ? ? objc-class-refinTZImageManager.o"_OBJC_CLASS_$_PHAssetCreationRequest", referenced from:? ? ? objc-class-refinTZImageManager.o"_OBJC_CLASS_$_PHAssetResourceCreationOptions", referenced from:? ? ? objc-class-refinTZImageManager.o"_OBJC_CLASS_$_PHCachingImageManager", referenced from:? ? ? objc-class-refinTZImageManager.o"_OBJC_CLASS_$_PHFetchOptions", referenced from:? ? ? objc-class-refinTZImageManager.o"_OBJC_CLASS_$_PHFetchResult", referenced from:? ? ? objc-class-refinTZImageManager.o"_OBJC_CLASS_$_PHImageManager", referenced from:? ? ? objc-class-refinTZAssetCell.o? ? ? objc-class-refinTZImageManager.o"_OBJC_CLASS_$_PHImageRequestOptions", referenced from:? ? ? objc-class-refinTZImageManager.o"_OBJC_CLASS_$_PHPhotoLibrary", referenced from:? ? ? objc-class-refinTZImageManager.o"_OBJC_CLASS_$_PHVideoRequestOptions", referenced from:? ? ? objc-class-refinTZImageManager.o"_PHImageCancelledKey", referenced from:? ? ? ___58-[TZImageManager getPhotoWithAsset:photoWidth:completion:]_block_invokeinTZImageManager.o? ? ? ___55-[TZImageManager getOriginalPhotoWithAsset:completion:]_block_invokeinTZImageManager.o"_PHImageErrorKey", referenced from:? ? ? ___58-[TZImageManager getPhotoWithAsset:photoWidth:completion:]_block_invokeinTZImageManager.o? ? ? ___55-[TZImageManager getOriginalPhotoWithAsset:completion:]_block_invokeinTZImageManager.o"_PHImageManagerMaximumSize", referenced from:? ? ? -[TZImageManager getOriginalPhotoWithAsset:completion:]inTZImageManager.o"_PHImageResultIsDegradedKey", referenced from:? ? ? ___58-[TZImageManager getPhotoWithAsset:photoWidth:completion:]_block_invokeinTZImageManager.o? ? ? ___58-[TZImageManager getPhotoWithAsset:photoWidth:completion:]_block_invoke_2inTZImageManager.o"_PHImageResultIsInCloudKey", referenced from:? ? ? ___58-[TZImageManager getPhotoWithAsset:photoWidth:completion:]_block_invokeinTZImageManager.old: symbol(s) not foundforarchitecture x86_64clang: error: linkercommandfailed withexitcode1(use -v to see invocation)
當時在看這個報錯的時候脱货,一頭霧水岛都,PHxxx的庫根本找不到,于是在.m里面找振峻,半天之后猜是不是Photos框架臼疫,導入了之后編譯成功!
猜得很艱辛啊扣孟。
現(xiàn)在寫這個文章的時候烫堤,突然發(fā)現(xiàn)對應的TZImageManager.h文件里果然導入了Photos框架……
屏幕快照 2016-07-01 16.53.18.png
猜得那么辛苦,原來.h里面就有答案,醉了塔逃。
解決這個問題花了一個下午的時間,寫一篇文章做個備份料仗,免得下次又被坑湾盗。
文/Javen_01(簡書作者)
原文鏈接:http://www.reibang.com/p/d91f270f3763
著作權(quán)歸作者所有,轉(zhuǎn)載請聯(lián)系作者獲得授權(quán)立轧,并標注“簡書作者”格粪。