diff --git a/.gitignore b/.gitignore index f94f832..7bb1587 100644 --- a/.gitignore +++ b/.gitignore @@ -30,4 +30,8 @@ DerivedData # you should judge for yourself, the pros and cons are mentioned at: # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control # -# Pods/ \ No newline at end of file +# Pods/ + +.DS_Store + +*.xcscmblueprint diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..05c11a4 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,4 @@ +osx_image: xcode7 +language: objective-c +xcode_workspace: Example/MessageDisplayKitWorkSpace.xcworkspace +xcode_schemes: MessageDisplayKit diff --git a/Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/project.pbxproj b/Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/project.pbxproj deleted file mode 100644 index 2582a57..0000000 --- a/Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/project.pbxproj +++ /dev/null @@ -1,4109 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 74065FB919123E1C00E1CE95 /* XHShareMenuItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 74065FB719123E1C00E1CE95 /* XHShareMenuItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74065FBA19123E1C00E1CE95 /* XHShareMenuItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 74065FB819123E1C00E1CE95 /* XHShareMenuItem.m */; }; - 74065FBB19123E1C00E1CE95 /* XHShareMenuItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 74065FB819123E1C00E1CE95 /* XHShareMenuItem.m */; }; - 740660B41914CA0000E1CE95 /* XHPhotographyHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 740660B21914CA0000E1CE95 /* XHPhotographyHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 740660B51914CA0000E1CE95 /* XHPhotographyHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 740660B31914CA0000E1CE95 /* XHPhotographyHelper.m */; }; - 740660B61914CA0000E1CE95 /* XHPhotographyHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 740660B31914CA0000E1CE95 /* XHPhotographyHelper.m */; }; - 740660BE1914D65600E1CE95 /* XHEmotion.h in Headers */ = {isa = PBXBuildFile; fileRef = 740660BC1914D65600E1CE95 /* XHEmotion.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 740660BF1914D65600E1CE95 /* XHEmotion.m in Sources */ = {isa = PBXBuildFile; fileRef = 740660BD1914D65600E1CE95 /* XHEmotion.m */; }; - 740660C01914D65600E1CE95 /* XHEmotion.m in Sources */ = {isa = PBXBuildFile; fileRef = 740660BD1914D65600E1CE95 /* XHEmotion.m */; }; - 740660CD1914E1F400E1CE95 /* XHEmotionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 740660CB1914E1F400E1CE95 /* XHEmotionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 740660CE1914E1F400E1CE95 /* XHEmotionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 740660CC1914E1F400E1CE95 /* XHEmotionManager.m */; }; - 740660CF1914E1F400E1CE95 /* XHEmotionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 740660CC1914E1F400E1CE95 /* XHEmotionManager.m */; }; - 74180BDC190F447100A35C82 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 74180BDA190F447100A35C82 /* InfoPlist.strings */; }; - 74180BE6190F447100A35C82 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7482451D1908C730008EC388 /* XCTest.framework */; }; - 74180BE7190F447100A35C82 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 748245041908C730008EC388 /* Foundation.framework */; }; - 74180BE8190F447100A35C82 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 748245081908C730008EC388 /* UIKit.framework */; }; - 74180BEB190F447100A35C82 /* MessageDisplayFramework.framework in Resources */ = {isa = PBXBuildFile; fileRef = 74180BD6190F447100A35C82 /* MessageDisplayFramework.framework */; }; - 74180BF1190F447100A35C82 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 74180BEF190F447100A35C82 /* InfoPlist.strings */; }; - 74180BF3190F447100A35C82 /* MessageDisplayFrameworkTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 74180BF2190F447100A35C82 /* MessageDisplayFrameworkTests.m */; }; - 74180BFD190F449400A35C82 /* XHFoundationCommon.m in Sources */ = {isa = PBXBuildFile; fileRef = 74D1C5C5190DFC1D003B1BCA /* XHFoundationCommon.m */; }; - 74180C01190F44A600A35C82 /* XHMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 7482456A19090C04008EC388 /* XHMessage.m */; }; - 74180C0C190F44ED00A35C82 /* XHMacro.h in Headers */ = {isa = PBXBuildFile; fileRef = 7482457919091BBA008EC388 /* XHMacro.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74180C0F190F44F600A35C82 /* XHFoundationCommon.h in Headers */ = {isa = PBXBuildFile; fileRef = 74D1C5C4190DFC1D003B1BCA /* XHFoundationCommon.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74180C13190F450200A35C82 /* XHMessageModel.h in Headers */ = {isa = PBXBuildFile; fileRef = 7482457519090D6B008EC388 /* XHMessageModel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74180C14190F450400A35C82 /* XHMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = 7482456919090C04008EC388 /* XHMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 744FBDC81915EE7400FB4A65 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 744FBDC61915EE7400FB4A65 /* Default-568h@2x.png */; }; - 744FBDC91915EE7400FB4A65 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 744FBDC71915EE7400FB4A65 /* Default@2x.png */; }; - 74585F3B191B939800F5E8C8 /* MessageVideoPlay@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74585F3A191B939800F5E8C8 /* MessageVideoPlay@2x.png */; }; - 74585F3E191B999B00F5E8C8 /* XHLocationHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 74585F3C191B999B00F5E8C8 /* XHLocationHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74585F3F191B999B00F5E8C8 /* XHLocationHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 74585F3D191B999B00F5E8C8 /* XHLocationHelper.m */; }; - 74585F40191B999B00F5E8C8 /* XHLocationHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 74585F3D191B999B00F5E8C8 /* XHLocationHelper.m */; }; - 74585FFD191D10CC00F5E8C8 /* XHAnnotation.h in Headers */ = {isa = PBXBuildFile; fileRef = 74585FFB191D10CC00F5E8C8 /* XHAnnotation.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74585FFE191D10CC00F5E8C8 /* XHAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 74585FFC191D10CC00F5E8C8 /* XHAnnotation.m */; }; - 74585FFF191D10CC00F5E8C8 /* XHAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = 74585FFC191D10CC00F5E8C8 /* XHAnnotation.m */; }; - 746C881B1916B5D6007F9A5E /* face_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88121916B5D6007F9A5E /* face_HL@2x.png */; }; - 746C881C1916B5D6007F9A5E /* face@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88131916B5D6007F9A5E /* face@2x.png */; }; - 746C881E1916B5D6007F9A5E /* keyborad_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88151916B5D6007F9A5E /* keyborad_HL@2x.png */; }; - 746C881F1916B5D6007F9A5E /* keyborad@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88161916B5D6007F9A5E /* keyborad@2x.png */; }; - 746C88201916B5D6007F9A5E /* multiMedia_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88171916B5D6007F9A5E /* multiMedia_HL@2x.png */; }; - 746C88211916B5D6007F9A5E /* multiMedia@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88181916B5D6007F9A5E /* multiMedia@2x.png */; }; - 746C88221916B5D6007F9A5E /* voice_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88191916B5D6007F9A5E /* voice_HL@2x.png */; }; - 746C88231916B5D6007F9A5E /* voice@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C881A1916B5D6007F9A5E /* voice@2x.png */; }; - 746C882A1916B5EE007F9A5E /* input-bar-background.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88241916B5EE007F9A5E /* input-bar-background.png */; }; - 746C882B1916B5EE007F9A5E /* input-bar-background@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88251916B5EE007F9A5E /* input-bar-background@2x.png */; }; - 746C882C1916B5EE007F9A5E /* input-bar-flat.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88261916B5EE007F9A5E /* input-bar-flat.png */; }; - 746C882D1916B5EE007F9A5E /* input-bar-flat@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88271916B5EE007F9A5E /* input-bar-flat@2x.png */; }; - 746C882E1916B5EE007F9A5E /* input-field-cover.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88281916B5EE007F9A5E /* input-field-cover.png */; }; - 746C882F1916B5EE007F9A5E /* input-field-cover@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88291916B5EE007F9A5E /* input-field-cover@2x.png */; }; - 746C88341916B5FE007F9A5E /* weChatBubble_Receiving_Cavern@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88301916B5FE007F9A5E /* weChatBubble_Receiving_Cavern@2x.png */; }; - 746C88351916B5FE007F9A5E /* weChatBubble_Receiving_Solid@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88311916B5FE007F9A5E /* weChatBubble_Receiving_Solid@2x.png */; }; - 746C88361916B5FE007F9A5E /* weChatBubble_Sending_Cavern@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88321916B5FE007F9A5E /* weChatBubble_Sending_Cavern@2x.png */; }; - 746C88371916B5FE007F9A5E /* weChatBubble_Sending_Solid@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88331916B5FE007F9A5E /* weChatBubble_Sending_Solid@2x.png */; }; - 746C88421916B607007F9A5E /* ReceiverVoiceNodePlaying@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88381916B607007F9A5E /* ReceiverVoiceNodePlaying@2x.png */; }; - 746C88431916B607007F9A5E /* ReceiverVoiceNodePlaying000@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88391916B607007F9A5E /* ReceiverVoiceNodePlaying000@2x.png */; }; - 746C88441916B607007F9A5E /* ReceiverVoiceNodePlaying001@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C883A1916B607007F9A5E /* ReceiverVoiceNodePlaying001@2x.png */; }; - 746C88451916B607007F9A5E /* ReceiverVoiceNodePlaying002@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C883B1916B607007F9A5E /* ReceiverVoiceNodePlaying002@2x.png */; }; - 746C88461916B607007F9A5E /* ReceiverVoiceNodePlaying003@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C883C1916B607007F9A5E /* ReceiverVoiceNodePlaying003@2x.png */; }; - 746C88471916B607007F9A5E /* SenderVoiceNodePlaying@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C883D1916B607007F9A5E /* SenderVoiceNodePlaying@2x.png */; }; - 746C88481916B607007F9A5E /* SenderVoiceNodePlaying000@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C883E1916B607007F9A5E /* SenderVoiceNodePlaying000@2x.png */; }; - 746C88491916B607007F9A5E /* SenderVoiceNodePlaying001@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C883F1916B607007F9A5E /* SenderVoiceNodePlaying001@2x.png */; }; - 746C884A1916B607007F9A5E /* SenderVoiceNodePlaying002@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88401916B607007F9A5E /* SenderVoiceNodePlaying002@2x.png */; }; - 746C884B1916B607007F9A5E /* SenderVoiceNodePlaying003@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88411916B607007F9A5E /* SenderVoiceNodePlaying003@2x.png */; }; - 746C88561916B612007F9A5E /* sharemore_friendcard@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C884C1916B612007F9A5E /* sharemore_friendcard@2x.png */; }; - 746C88571916B612007F9A5E /* sharemore_location@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C884D1916B612007F9A5E /* sharemore_location@2x.png */; }; - 746C88581916B612007F9A5E /* sharemore_myfav@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C884E1916B612007F9A5E /* sharemore_myfav@2x.png */; }; - 746C88591916B612007F9A5E /* sharemore_openapi@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C884F1916B612007F9A5E /* sharemore_openapi@2x.png */; }; - 746C885A1916B612007F9A5E /* sharemore_pic@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88501916B612007F9A5E /* sharemore_pic@2x.png */; }; - 746C885B1916B612007F9A5E /* sharemore_video@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88511916B612007F9A5E /* sharemore_video@2x.png */; }; - 746C885C1916B612007F9A5E /* sharemore_videovoip@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88521916B612007F9A5E /* sharemore_videovoip@2x.png */; }; - 746C885D1916B612007F9A5E /* sharemore_voiceinput@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88531916B612007F9A5E /* sharemore_voiceinput@2x.png */; }; - 746C885E1916B612007F9A5E /* sharemore_voipvoice@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88541916B612007F9A5E /* sharemore_voipvoice@2x.png */; }; - 746C885F1916B612007F9A5E /* sharemore_wxtalk@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88551916B612007F9A5E /* sharemore_wxtalk@2x.png */; }; - 746C88711916B62D007F9A5E /* section0_emotion0@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88611916B62D007F9A5E /* section0_emotion0@2x.png */; }; - 746C88721916B62D007F9A5E /* section0_emotion1@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88621916B62D007F9A5E /* section0_emotion1@2x.png */; }; - 746C88731916B62D007F9A5E /* section0_emotion2@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88631916B62D007F9A5E /* section0_emotion2@2x.png */; }; - 746C88741916B62D007F9A5E /* section0_emotion3@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88641916B62D007F9A5E /* section0_emotion3@2x.png */; }; - 746C88751916B62D007F9A5E /* section0_emotion4@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88651916B62D007F9A5E /* section0_emotion4@2x.png */; }; - 746C88761916B62D007F9A5E /* section0_emotion5@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88661916B62D007F9A5E /* section0_emotion5@2x.png */; }; - 746C88771916B62D007F9A5E /* section0_emotion6@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88671916B62D007F9A5E /* section0_emotion6@2x.png */; }; - 746C88781916B62D007F9A5E /* section0_emotion7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88681916B62D007F9A5E /* section0_emotion7@2x.png */; }; - 746C88791916B62D007F9A5E /* section0_emotion8@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88691916B62D007F9A5E /* section0_emotion8@2x.png */; }; - 746C887A1916B62D007F9A5E /* section0_emotion9@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C886A1916B62D007F9A5E /* section0_emotion9@2x.png */; }; - 746C887B1916B62D007F9A5E /* section0_emotion10@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C886B1916B62D007F9A5E /* section0_emotion10@2x.png */; }; - 746C887C1916B62D007F9A5E /* section0_emotion11@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C886C1916B62D007F9A5E /* section0_emotion11@2x.png */; }; - 746C887D1916B62D007F9A5E /* section0_emotion12@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C886D1916B62D007F9A5E /* section0_emotion12@2x.png */; }; - 746C887E1916B62D007F9A5E /* section0_emotion13@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C886E1916B62D007F9A5E /* section0_emotion13@2x.png */; }; - 746C887F1916B62D007F9A5E /* section0_emotion14@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C886F1916B62D007F9A5E /* section0_emotion14@2x.png */; }; - 746C88801916B62D007F9A5E /* section0_emotion15@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88701916B62D007F9A5E /* section0_emotion15@2x.png */; }; - 746C88821916B64E007F9A5E /* Fav_Cell_Loc@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 746C88811916B64E007F9A5E /* Fav_Cell_Loc@2x.png */; }; - 746C892F1917F691007F9A5E /* XHBubblePhotoImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 746C89151917F691007F9A5E /* XHBubblePhotoImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 746C89301917F691007F9A5E /* XHBubblePhotoImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C89161917F691007F9A5E /* XHBubblePhotoImageView.m */; }; - 746C89311917F691007F9A5E /* XHBubblePhotoImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C89161917F691007F9A5E /* XHBubblePhotoImageView.m */; }; - 746C89321917F691007F9A5E /* XHMessageBubbleView.h in Headers */ = {isa = PBXBuildFile; fileRef = 746C89171917F691007F9A5E /* XHMessageBubbleView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 746C89331917F691007F9A5E /* XHMessageBubbleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C89181917F691007F9A5E /* XHMessageBubbleView.m */; }; - 746C89341917F691007F9A5E /* XHMessageBubbleView.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C89181917F691007F9A5E /* XHMessageBubbleView.m */; }; - 746C89351917F691007F9A5E /* XHMessageDisplayTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = 746C89191917F691007F9A5E /* XHMessageDisplayTextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 746C89361917F691007F9A5E /* XHMessageDisplayTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C891A1917F691007F9A5E /* XHMessageDisplayTextView.m */; }; - 746C89371917F691007F9A5E /* XHMessageDisplayTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C891A1917F691007F9A5E /* XHMessageDisplayTextView.m */; }; - 746C89381917F691007F9A5E /* XHMessageTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = 746C891B1917F691007F9A5E /* XHMessageTableView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 746C89391917F691007F9A5E /* XHMessageTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C891C1917F691007F9A5E /* XHMessageTableView.m */; }; - 746C893A1917F691007F9A5E /* XHMessageTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C891C1917F691007F9A5E /* XHMessageTableView.m */; }; - 746C893B1917F691007F9A5E /* XHMessageTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 746C891D1917F691007F9A5E /* XHMessageTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 746C893C1917F691007F9A5E /* XHMessageTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C891E1917F691007F9A5E /* XHMessageTableViewCell.m */; }; - 746C893D1917F691007F9A5E /* XHMessageTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C891E1917F691007F9A5E /* XHMessageTableViewCell.m */; }; - 746C893E1917F691007F9A5E /* XHMessageInputView.h in Headers */ = {isa = PBXBuildFile; fileRef = 746C89201917F691007F9A5E /* XHMessageInputView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 746C893F1917F691007F9A5E /* XHMessageInputView.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C89211917F691007F9A5E /* XHMessageInputView.m */; }; - 746C89401917F691007F9A5E /* XHMessageInputView.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C89211917F691007F9A5E /* XHMessageInputView.m */; }; - 746C89411917F691007F9A5E /* XHMessageTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = 746C89221917F691007F9A5E /* XHMessageTextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 746C89421917F691007F9A5E /* XHMessageTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C89231917F691007F9A5E /* XHMessageTextView.m */; }; - 746C89431917F691007F9A5E /* XHMessageTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C89231917F691007F9A5E /* XHMessageTextView.m */; }; - 746C89441917F691007F9A5E /* XHEmotionCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 746C89251917F691007F9A5E /* XHEmotionCollectionViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 746C89451917F691007F9A5E /* XHEmotionCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C89261917F691007F9A5E /* XHEmotionCollectionViewCell.m */; }; - 746C89461917F691007F9A5E /* XHEmotionCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C89261917F691007F9A5E /* XHEmotionCollectionViewCell.m */; }; - 746C89471917F691007F9A5E /* XHEmotionCollectionViewFlowLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 746C89271917F691007F9A5E /* XHEmotionCollectionViewFlowLayout.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 746C89481917F691007F9A5E /* XHEmotionCollectionViewFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C89281917F691007F9A5E /* XHEmotionCollectionViewFlowLayout.m */; }; - 746C89491917F691007F9A5E /* XHEmotionCollectionViewFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C89281917F691007F9A5E /* XHEmotionCollectionViewFlowLayout.m */; }; - 746C894A1917F691007F9A5E /* XHEmotionManagerView.h in Headers */ = {isa = PBXBuildFile; fileRef = 746C89291917F691007F9A5E /* XHEmotionManagerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 746C894B1917F691007F9A5E /* XHEmotionManagerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C892A1917F691007F9A5E /* XHEmotionManagerView.m */; }; - 746C894C1917F691007F9A5E /* XHEmotionManagerView.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C892A1917F691007F9A5E /* XHEmotionManagerView.m */; }; - 746C894D1917F691007F9A5E /* XHEmotionSectionBar.h in Headers */ = {isa = PBXBuildFile; fileRef = 746C892B1917F691007F9A5E /* XHEmotionSectionBar.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 746C894E1917F691007F9A5E /* XHEmotionSectionBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C892C1917F691007F9A5E /* XHEmotionSectionBar.m */; }; - 746C894F1917F691007F9A5E /* XHEmotionSectionBar.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C892C1917F691007F9A5E /* XHEmotionSectionBar.m */; }; - 746C89501917F691007F9A5E /* XHShareMenuView.h in Headers */ = {isa = PBXBuildFile; fileRef = 746C892D1917F691007F9A5E /* XHShareMenuView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 746C89511917F691007F9A5E /* XHShareMenuView.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C892E1917F691007F9A5E /* XHShareMenuView.m */; }; - 746C89521917F691007F9A5E /* XHShareMenuView.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C892E1917F691007F9A5E /* XHShareMenuView.m */; }; - 746C895B1917F7B4007F9A5E /* XHMessageTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 746C89591917F7B4007F9A5E /* XHMessageTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 746C895C1917F7B4007F9A5E /* XHMessageTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C895A1917F7B4007F9A5E /* XHMessageTableViewController.m */; }; - 746C895D1917F7B4007F9A5E /* XHMessageTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C895A1917F7B4007F9A5E /* XHMessageTableViewController.m */; }; - 746C89781917F8B2007F9A5E /* XHBaseNavigationController.h in Headers */ = {isa = PBXBuildFile; fileRef = 746C89761917F8B2007F9A5E /* XHBaseNavigationController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 746C89791917F8B2007F9A5E /* XHBaseNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C89771917F8B2007F9A5E /* XHBaseNavigationController.m */; }; - 746C897A1917F8B2007F9A5E /* XHBaseNavigationController.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C89771917F8B2007F9A5E /* XHBaseNavigationController.m */; }; - 746C897D1917F8C5007F9A5E /* XHBaseTabBarController.h in Headers */ = {isa = PBXBuildFile; fileRef = 746C897B1917F8C5007F9A5E /* XHBaseTabBarController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 746C897E1917F8C5007F9A5E /* XHBaseTabBarController.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C897C1917F8C5007F9A5E /* XHBaseTabBarController.m */; }; - 746C897F1917F8C5007F9A5E /* XHBaseTabBarController.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C897C1917F8C5007F9A5E /* XHBaseTabBarController.m */; }; - 746C89871917F8EA007F9A5E /* XHBaseTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 746C89851917F8EA007F9A5E /* XHBaseTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 746C89881917F8EA007F9A5E /* XHBaseTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C89861917F8EA007F9A5E /* XHBaseTableViewController.m */; }; - 746C89891917F8EA007F9A5E /* XHBaseTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 746C89861917F8EA007F9A5E /* XHBaseTableViewController.m */; }; - 748245051908C730008EC388 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 748245041908C730008EC388 /* Foundation.framework */; }; - 748245071908C730008EC388 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 748245061908C730008EC388 /* CoreGraphics.framework */; }; - 748245091908C730008EC388 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 748245081908C730008EC388 /* UIKit.framework */; }; - 7482450F1908C730008EC388 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 7482450D1908C730008EC388 /* InfoPlist.strings */; }; - 748245111908C730008EC388 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 748245101908C730008EC388 /* main.m */; }; - 748245151908C730008EC388 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 748245141908C730008EC388 /* AppDelegate.m */; }; - 7482451E1908C730008EC388 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7482451D1908C730008EC388 /* XCTest.framework */; }; - 7482451F1908C730008EC388 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 748245041908C730008EC388 /* Foundation.framework */; }; - 748245201908C730008EC388 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 748245081908C730008EC388 /* UIKit.framework */; }; - 748245281908C730008EC388 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 748245261908C730008EC388 /* InfoPlist.strings */; }; - 7482452A1908C730008EC388 /* MessageDisplayExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 748245291908C730008EC388 /* MessageDisplayExampleTests.m */; }; - 7482456B19090C04008EC388 /* XHMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 7482456A19090C04008EC388 /* XHMessage.m */; }; - 74901A3F191D3B1C0049AFF9 /* XHProfileTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 74901A3D191D3B1C0049AFF9 /* XHProfileTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74901A40191D3B1C0049AFF9 /* XHProfileTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 74901A3E191D3B1C0049AFF9 /* XHProfileTableViewController.m */; }; - 74901A41191D3B1C0049AFF9 /* XHProfileTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 74901A3E191D3B1C0049AFF9 /* XHProfileTableViewController.m */; }; - 74901A45191D4CD30049AFF9 /* XHBaseViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 74901A43191D4CD30049AFF9 /* XHBaseViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74901A46191D4CD30049AFF9 /* XHBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 74901A44191D4CD30049AFF9 /* XHBaseViewController.m */; }; - 74901A47191D4CD30049AFF9 /* XHBaseViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 74901A44191D4CD30049AFF9 /* XHBaseViewController.m */; }; - 74BBB020190B8EAB00093577 /* MessageDisplayKitString.strings in Resources */ = {isa = PBXBuildFile; fileRef = 74BBB022190B8EAB00093577 /* MessageDisplayKitString.strings */; }; - 74BBB02C190BE8C400093577 /* XHMessageRootViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 74BBB02B190BE8C400093577 /* XHMessageRootViewController.m */; }; - 74BBB032190C28CD00093577 /* XHDemoWeChatMessageTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 74BBB031190C28CD00093577 /* XHDemoWeChatMessageTableViewController.m */; }; - 74C3E7D1192919360053F4E1 /* XHAlbumTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C3E7CF192919360053F4E1 /* XHAlbumTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74C3E7D2192919360053F4E1 /* XHAlbumTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 74C3E7D0192919360053F4E1 /* XHAlbumTableViewCell.m */; }; - 74C3E7D3192919360053F4E1 /* XHAlbumTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 74C3E7D0192919360053F4E1 /* XHAlbumTableViewCell.m */; }; - 74C3E7D6192919930053F4E1 /* XHAlbumRichTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C3E7D4192919930053F4E1 /* XHAlbumRichTextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74C3E7D7192919930053F4E1 /* XHAlbumRichTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 74C3E7D5192919930053F4E1 /* XHAlbumRichTextView.m */; }; - 74C3E7D8192919930053F4E1 /* XHAlbumRichTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 74C3E7D5192919930053F4E1 /* XHAlbumRichTextView.m */; }; - 74C3E7DB19291A1A0053F4E1 /* XHAlbum.h in Headers */ = {isa = PBXBuildFile; fileRef = 74C3E7D919291A1A0053F4E1 /* XHAlbum.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74C3E7DC19291A1A0053F4E1 /* XHAlbum.m in Sources */ = {isa = PBXBuildFile; fileRef = 74C3E7DA19291A1A0053F4E1 /* XHAlbum.m */; }; - 74C3E7DD19291A1A0053F4E1 /* XHAlbum.m in Sources */ = {isa = PBXBuildFile; fileRef = 74C3E7DA19291A1A0053F4E1 /* XHAlbum.m */; }; - 74C3E7E519291F1B0053F4E1 /* AlbumHeaderBackgrounImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74C3E7E419291F1B0053F4E1 /* AlbumHeaderBackgrounImage@2x.png */; }; - 74D1C5C6190DFC1D003B1BCA /* XHFoundationCommon.m in Sources */ = {isa = PBXBuildFile; fileRef = 74D1C5C5190DFC1D003B1BCA /* XHFoundationCommon.m */; }; - 74E5E9891921317B0084BCFA /* XHVoiceRecordHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = 74E5E9871921317B0084BCFA /* XHVoiceRecordHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74E5E98A1921317B0084BCFA /* XHVoiceRecordHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5E9881921317B0084BCFA /* XHVoiceRecordHelper.m */; }; - 74E5E98B1921317B0084BCFA /* XHVoiceRecordHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5E9881921317B0084BCFA /* XHVoiceRecordHelper.m */; }; - 74E5E9951921E90A0084BCFA /* XHVoiceRecordHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = 74E5E9931921E90A0084BCFA /* XHVoiceRecordHUD.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74E5E9961921E90A0084BCFA /* XHVoiceRecordHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5E9941921E90A0084BCFA /* XHVoiceRecordHUD.m */; }; - 74E5E9971921E90A0084BCFA /* XHVoiceRecordHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5E9941921E90A0084BCFA /* XHVoiceRecordHUD.m */; }; - 74E5E99A1921EC8C0084BCFA /* VoiceBtn_Black@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9981921EC8C0084BCFA /* VoiceBtn_Black@2x.png */; }; - 74E5E99B1921EC8C0084BCFA /* VoiceBtn_BlackHL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9991921EC8C0084BCFA /* VoiceBtn_BlackHL@2x.png */; }; - 74E5E9A91921F7710084BCFA /* RecordingSignal001@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E99F1921F7710084BCFA /* RecordingSignal001@2x.png */; }; - 74E5E9AA1921F7710084BCFA /* RecordingSignal002@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9A01921F7710084BCFA /* RecordingSignal002@2x.png */; }; - 74E5E9AB1921F7710084BCFA /* RecordingSignal003@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9A11921F7710084BCFA /* RecordingSignal003@2x.png */; }; - 74E5E9AC1921F7710084BCFA /* RecordingSignal004@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9A21921F7710084BCFA /* RecordingSignal004@2x.png */; }; - 74E5E9AD1921F7710084BCFA /* RecordingSignal005@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9A31921F7710084BCFA /* RecordingSignal005@2x.png */; }; - 74E5E9AE1921F7710084BCFA /* RecordingSignal006@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9A41921F7710084BCFA /* RecordingSignal006@2x.png */; }; - 74E5E9AF1921F7710084BCFA /* RecordingSignal007@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9A51921F7710084BCFA /* RecordingSignal007@2x.png */; }; - 74E5E9B01921F7710084BCFA /* RecordingSignal008@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9A61921F7710084BCFA /* RecordingSignal008@2x.png */; }; - 74E5E9B11921F7710084BCFA /* RecordingBkg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9A71921F7710084BCFA /* RecordingBkg@2x.png */; }; - 74E5E9B21921F7710084BCFA /* RecordCancel@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9A81921F7710084BCFA /* RecordCancel@2x.png */; }; - 74E5EAC71924FFBE0084BCFA /* NSMutableAttributedString+Helper.h in Headers */ = {isa = PBXBuildFile; fileRef = 74E5EAA71924FFBE0084BCFA /* NSMutableAttributedString+Helper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74E5EAC81924FFBE0084BCFA /* NSMutableAttributedString+Helper.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EAA81924FFBE0084BCFA /* NSMutableAttributedString+Helper.m */; }; - 74E5EAC91924FFBE0084BCFA /* NSMutableAttributedString+Helper.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EAA81924FFBE0084BCFA /* NSMutableAttributedString+Helper.m */; }; - 74E5EACA1924FFBE0084BCFA /* SECompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = 74E5EAA91924FFBE0084BCFA /* SECompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74E5EACB1924FFBE0084BCFA /* SECompatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EAAA1924FFBE0084BCFA /* SECompatibility.m */; }; - 74E5EACC1924FFBE0084BCFA /* SECompatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EAAA1924FFBE0084BCFA /* SECompatibility.m */; }; - 74E5EACD1924FFBE0084BCFA /* SEConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = 74E5EAAB1924FFBE0084BCFA /* SEConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74E5EACE1924FFBE0084BCFA /* SEConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EAAC1924FFBE0084BCFA /* SEConstants.m */; }; - 74E5EACF1924FFBE0084BCFA /* SEConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EAAC1924FFBE0084BCFA /* SEConstants.m */; }; - 74E5EAD01924FFBE0084BCFA /* SELineLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 74E5EAAD1924FFBE0084BCFA /* SELineLayout.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74E5EAD11924FFBE0084BCFA /* SELineLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EAAE1924FFBE0084BCFA /* SELineLayout.m */; }; - 74E5EAD21924FFBE0084BCFA /* SELineLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EAAE1924FFBE0084BCFA /* SELineLayout.m */; }; - 74E5EAD31924FFBE0084BCFA /* SELinkText.h in Headers */ = {isa = PBXBuildFile; fileRef = 74E5EAAF1924FFBE0084BCFA /* SELinkText.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74E5EAD41924FFBE0084BCFA /* SELinkText.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EAB01924FFBE0084BCFA /* SELinkText.m */; }; - 74E5EAD51924FFBE0084BCFA /* SELinkText.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EAB01924FFBE0084BCFA /* SELinkText.m */; }; - 74E5EAD61924FFBE0084BCFA /* SESelectionGrabber.h in Headers */ = {isa = PBXBuildFile; fileRef = 74E5EAB11924FFBE0084BCFA /* SESelectionGrabber.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74E5EAD71924FFBE0084BCFA /* SESelectionGrabber.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EAB21924FFBE0084BCFA /* SESelectionGrabber.m */; }; - 74E5EAD81924FFBE0084BCFA /* SESelectionGrabber.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EAB21924FFBE0084BCFA /* SESelectionGrabber.m */; }; - 74E5EAD91924FFBE0084BCFA /* SETextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = 74E5EAB31924FFBE0084BCFA /* SETextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74E5EADA1924FFBE0084BCFA /* SETextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EAB41924FFBE0084BCFA /* SETextAttachment.m */; }; - 74E5EADB1924FFBE0084BCFA /* SETextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EAB41924FFBE0084BCFA /* SETextAttachment.m */; }; - 74E5EADC1924FFBE0084BCFA /* SETextEditingCaret.h in Headers */ = {isa = PBXBuildFile; fileRef = 74E5EAB51924FFBE0084BCFA /* SETextEditingCaret.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74E5EADD1924FFBE0084BCFA /* SETextEditingCaret.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EAB61924FFBE0084BCFA /* SETextEditingCaret.m */; }; - 74E5EADE1924FFBE0084BCFA /* SETextEditingCaret.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EAB61924FFBE0084BCFA /* SETextEditingCaret.m */; }; - 74E5EADF1924FFBE0084BCFA /* SETextGeometry.h in Headers */ = {isa = PBXBuildFile; fileRef = 74E5EAB71924FFBE0084BCFA /* SETextGeometry.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74E5EAE01924FFBE0084BCFA /* SETextGeometry.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EAB81924FFBE0084BCFA /* SETextGeometry.m */; }; - 74E5EAE11924FFBE0084BCFA /* SETextGeometry.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EAB81924FFBE0084BCFA /* SETextGeometry.m */; }; - 74E5EAE21924FFBE0084BCFA /* SETextInput.h in Headers */ = {isa = PBXBuildFile; fileRef = 74E5EAB91924FFBE0084BCFA /* SETextInput.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74E5EAE31924FFBE0084BCFA /* SETextInput.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EABA1924FFBE0084BCFA /* SETextInput.m */; }; - 74E5EAE41924FFBE0084BCFA /* SETextInput.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EABA1924FFBE0084BCFA /* SETextInput.m */; }; - 74E5EAE51924FFBE0084BCFA /* SETextLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = 74E5EABB1924FFBE0084BCFA /* SETextLayout.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74E5EAE61924FFBE0084BCFA /* SETextLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EABC1924FFBE0084BCFA /* SETextLayout.m */; }; - 74E5EAE71924FFBE0084BCFA /* SETextLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EABC1924FFBE0084BCFA /* SETextLayout.m */; }; - 74E5EAE81924FFBE0084BCFA /* SETextMagnifierCaret.h in Headers */ = {isa = PBXBuildFile; fileRef = 74E5EABD1924FFBE0084BCFA /* SETextMagnifierCaret.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74E5EAE91924FFBE0084BCFA /* SETextMagnifierCaret.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EABE1924FFBE0084BCFA /* SETextMagnifierCaret.m */; }; - 74E5EAEA1924FFBE0084BCFA /* SETextMagnifierCaret.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EABE1924FFBE0084BCFA /* SETextMagnifierCaret.m */; }; - 74E5EAEB1924FFBE0084BCFA /* SETextMagnifierRanged.h in Headers */ = {isa = PBXBuildFile; fileRef = 74E5EABF1924FFBE0084BCFA /* SETextMagnifierRanged.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74E5EAEC1924FFBE0084BCFA /* SETextMagnifierRanged.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EAC01924FFBE0084BCFA /* SETextMagnifierRanged.m */; }; - 74E5EAED1924FFBE0084BCFA /* SETextMagnifierRanged.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EAC01924FFBE0084BCFA /* SETextMagnifierRanged.m */; }; - 74E5EAEE1924FFBE0084BCFA /* SETextSelection.h in Headers */ = {isa = PBXBuildFile; fileRef = 74E5EAC11924FFBE0084BCFA /* SETextSelection.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74E5EAEF1924FFBE0084BCFA /* SETextSelection.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EAC21924FFBE0084BCFA /* SETextSelection.m */; }; - 74E5EAF01924FFBE0084BCFA /* SETextSelection.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EAC21924FFBE0084BCFA /* SETextSelection.m */; }; - 74E5EAF11924FFBE0084BCFA /* SETextSelectionView.h in Headers */ = {isa = PBXBuildFile; fileRef = 74E5EAC31924FFBE0084BCFA /* SETextSelectionView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74E5EAF21924FFBE0084BCFA /* SETextSelectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EAC41924FFBE0084BCFA /* SETextSelectionView.m */; }; - 74E5EAF31924FFBE0084BCFA /* SETextSelectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EAC41924FFBE0084BCFA /* SETextSelectionView.m */; }; - 74E5EAF41924FFBE0084BCFA /* SETextView.h in Headers */ = {isa = PBXBuildFile; fileRef = 74E5EAC51924FFBE0084BCFA /* SETextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74E5EAF51924FFBE0084BCFA /* SETextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EAC61924FFBE0084BCFA /* SETextView.m */; }; - 74E5EAF61924FFBE0084BCFA /* SETextView.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E5EAC61924FFBE0084BCFA /* SETextView.m */; }; - 74E9003319278F5C00D37C81 /* XHContactTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 74E9003119278F5C00D37C81 /* XHContactTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74E9003419278F5C00D37C81 /* XHContactTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E9003219278F5C00D37C81 /* XHContactTableViewController.m */; }; - 74E9003519278F5C00D37C81 /* XHContactTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E9003219278F5C00D37C81 /* XHContactTableViewController.m */; }; - 74E9003819278F6700D37C81 /* XHDiscoverTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 74E9003619278F6700D37C81 /* XHDiscoverTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74E9003919278F6700D37C81 /* XHDiscoverTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E9003719278F6700D37C81 /* XHDiscoverTableViewController.m */; }; - 74E9003A19278F6700D37C81 /* XHDiscoverTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E9003719278F6700D37C81 /* XHDiscoverTableViewController.m */; }; - 74E900611927940000D37C81 /* ff_IconBottle@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E9004F1927940000D37C81 /* ff_IconBottle@2x.png */; }; - 74E900621927940000D37C81 /* ff_IconLocationService@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E900501927940000D37C81 /* ff_IconLocationService@2x.png */; }; - 74E900631927940000D37C81 /* ff_IconQRCode@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E900511927940000D37C81 /* ff_IconQRCode@2x.png */; }; - 74E900641927940000D37C81 /* ff_IconShake@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E900521927940000D37C81 /* ff_IconShake@2x.png */; }; - 74E900651927940000D37C81 /* ff_IconShowAlbum@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E900531927940000D37C81 /* ff_IconShowAlbum@2x.png */; }; - 74E900661927940000D37C81 /* MoreGame@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E900541927940000D37C81 /* MoreGame@2x.png */; }; - 74E900671927940000D37C81 /* IMG_1555.MOV in Resources */ = {isa = PBXBuildFile; fileRef = 74E900551927940000D37C81 /* IMG_1555.MOV */; }; - 74E900691927940000D37C81 /* Contact@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E900581927940000D37C81 /* Contact@2x.png */; }; - 74E9006A1927940000D37C81 /* Profile@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E900591927940000D37C81 /* Profile@2x.png */; }; - 74E9006B1927940000D37C81 /* SNS@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E9005A1927940000D37C81 /* SNS@2x.png */; }; - 74E9006C1927940000D37C81 /* tabbarBkg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E9005B1927940000D37C81 /* tabbarBkg@2x.png */; }; - 74E9006D1927940000D37C81 /* WeChat@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E9005C1927940000D37C81 /* WeChat@2x.png */; }; - 74E9006E1927940000D37C81 /* TableViewBackgroundImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E9005D1927940000D37C81 /* TableViewBackgroundImage@2x.png */; }; - 74E900981927A81500D37C81 /* bottleButtonFish@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E900941927A81500D37C81 /* bottleButtonFish@2x.png */; }; - 74E900991927A81500D37C81 /* bottleButtonMine@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E900951927A81500D37C81 /* bottleButtonMine@2x.png */; }; - 74E9009A1927A81500D37C81 /* bottleButtonThrow@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E900961927A81500D37C81 /* bottleButtonThrow@2x.png */; }; - 74E9009B1927A81500D37C81 /* bottleNightBkg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E900971927A81500D37C81 /* bottleNightBkg@2x.png */; }; - 74E9009F1927A9C900D37C81 /* bottleBkg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E9009C1927A9C900D37C81 /* bottleBkg@2x.png */; }; - 74E900A01927A9C900D37C81 /* bottleBkgSpotLight@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E9009D1927A9C900D37C81 /* bottleBkgSpotLight@2x.png */; }; - 74E900A11927A9C900D37C81 /* bottleBoard@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E9009E1927A9C900D37C81 /* bottleBoard@2x.png */; }; - 74E900A51927A9C900D37C81 /* bottleRecord@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E900A21927A9C900D37C81 /* bottleRecord@2x.png */; }; - 74E900A61927A9C900D37C81 /* bottleWriting@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E900A31927A9C900D37C81 /* bottleWriting@2x.png */; }; - 74E900A71927A9C900D37C81 /* bottleStarfish@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E900A41927A9C900D37C81 /* bottleStarfish@2x.png */; }; - 74E900AB1927ABF800D37C81 /* fishwater@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E900A81927ABF800D37C81 /* fishwater@2x.png */; }; - 74E900AC1927ABF800D37C81 /* fishwater2@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E900A91927ABF800D37C81 /* fishwater2@2x.png */; }; - 74E900AD1927ABF800D37C81 /* fishwater3@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E900AA1927ABF800D37C81 /* fishwater3@2x.png */; }; - 74E900B31928F3D100D37C81 /* XHStoreManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 74E900B11928F3D100D37C81 /* XHStoreManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 74E900B41928F3D100D37C81 /* XHStoreManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E900B21928F3D100D37C81 /* XHStoreManager.m */; }; - 74E900B51928F3D100D37C81 /* XHStoreManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 74E900B21928F3D100D37C81 /* XHStoreManager.m */; }; - 7D06CA71192B3D9B00DF8C04 /* XHBaseTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D06CA6F192B3D9B00DF8C04 /* XHBaseTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7D06CA72192B3D9B00DF8C04 /* XHBaseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D06CA70192B3D9B00DF8C04 /* XHBaseTableViewCell.m */; }; - 7D06CA73192B3D9B00DF8C04 /* XHBaseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D06CA70192B3D9B00DF8C04 /* XHBaseTableViewCell.m */; }; - 7D08C21E192C7A5E00B26D93 /* MeIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7D08C21D192C7A5E00B26D93 /* MeIcon@2x.png */; }; - 7D08C220192CA06B00B26D93 /* CoreMedia.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D08C21F192CA06B00B26D93 /* CoreMedia.framework */; }; - 7D0AAFE61943179A00988FC3 /* XHPopMenu.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D0AAFE41943179A00988FC3 /* XHPopMenu.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7D0AAFE71943179A00988FC3 /* XHPopMenu.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AAFE51943179A00988FC3 /* XHPopMenu.m */; }; - 7D0AAFE81943179A00988FC3 /* XHPopMenu.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AAFE51943179A00988FC3 /* XHPopMenu.m */; }; - 7D0AAFEB194319A500988FC3 /* XHPopMenuItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D0AAFE9194319A500988FC3 /* XHPopMenuItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7D0AAFEC194319A500988FC3 /* XHPopMenuItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AAFEA194319A500988FC3 /* XHPopMenuItem.m */; }; - 7D0AAFED194319A500988FC3 /* XHPopMenuItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AAFEA194319A500988FC3 /* XHPopMenuItem.m */; }; - 7D0AAFF019431A9400988FC3 /* XHPopMenuItemView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D0AAFEE19431A9400988FC3 /* XHPopMenuItemView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7D0AAFF119431A9400988FC3 /* XHPopMenuItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AAFEF19431A9400988FC3 /* XHPopMenuItemView.m */; }; - 7D0AAFF219431A9400988FC3 /* XHPopMenuItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D0AAFEF19431A9400988FC3 /* XHPopMenuItemView.m */; }; - 7D0AAFF51943231400988FC3 /* MoreFunctionFrame@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7D0AAFF41943231400988FC3 /* MoreFunctionFrame@2x.png */; }; - 7D13FC58192C4F4000A23413 /* XHImageViewer.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D13FC43192C4F4000A23413 /* XHImageViewer.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7D13FC59192C4F4000A23413 /* XHImageViewer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D13FC44192C4F4000A23413 /* XHImageViewer.m */; }; - 7D13FC5A192C4F4000A23413 /* XHImageViewer.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D13FC44192C4F4000A23413 /* XHImageViewer.m */; }; - 7D13FC5B192C4F4000A23413 /* XHViewState.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D13FC45192C4F4000A23413 /* XHViewState.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7D13FC5C192C4F4000A23413 /* XHViewState.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D13FC46192C4F4000A23413 /* XHViewState.m */; }; - 7D13FC5D192C4F4000A23413 /* XHViewState.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D13FC46192C4F4000A23413 /* XHViewState.m */; }; - 7D13FC5E192C4F4000A23413 /* XHZoomingImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D13FC47192C4F4000A23413 /* XHZoomingImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7D13FC5F192C4F4000A23413 /* XHZoomingImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D13FC48192C4F4000A23413 /* XHZoomingImageView.m */; }; - 7D13FC60192C4F4000A23413 /* XHZoomingImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D13FC48192C4F4000A23413 /* XHZoomingImageView.m */; }; - 7D149FFA192DEB5D004B4D3B /* XHContactTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D149FF8192DEB5D004B4D3B /* XHContactTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7D149FFB192DEB5D004B4D3B /* XHContactTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D149FF9192DEB5D004B4D3B /* XHContactTableViewCell.m */; }; - 7D149FFC192DEB5D004B4D3B /* XHContactTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D149FF9192DEB5D004B4D3B /* XHContactTableViewCell.m */; }; - 7D149FFE192DF2CA004B4D3B /* XHFoundationMacro.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D149FFD192DF2CA004B4D3B /* XHFoundationMacro.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7D14A000192DF30C004B4D3B /* XHUIKitMacro.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D149FFF192DF30C004B4D3B /* XHUIKitMacro.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7D14A004192EF8FD004B4D3B /* XHContactDetailTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D14A002192EF8FD004B4D3B /* XHContactDetailTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7D14A005192EF8FD004B4D3B /* XHContactDetailTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D14A003192EF8FD004B4D3B /* XHContactDetailTableViewController.m */; }; - 7D14A006192EF8FD004B4D3B /* XHContactDetailTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D14A003192EF8FD004B4D3B /* XHContactDetailTableViewController.m */; }; - 7D14A009192EFD33004B4D3B /* XHContactView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7D14A007192EFD33004B4D3B /* XHContactView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7D14A00A192EFD33004B4D3B /* XHContactView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D14A008192EFD33004B4D3B /* XHContactView.m */; }; - 7D14A00B192EFD33004B4D3B /* XHContactView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7D14A008192EFD33004B4D3B /* XHContactView.m */; }; - 7D20B9B6196295660043A2BA /* CoreVideo.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D20B9B5196295660043A2BA /* CoreVideo.framework */; }; - 7D20B9B8196295730043A2BA /* Accelerate.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D20B9B7196295730043A2BA /* Accelerate.framework */; }; - 7D23E40E192C58E300B717B7 /* MediaPlayer.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D23E40D192C58E300B717B7 /* MediaPlayer.framework */; }; - 7D23E410192C58F000B717B7 /* AudioToolbox.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D23E40F192C58F000B717B7 /* AudioToolbox.framework */; }; - 7D23E412192C590900B717B7 /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D23E411192C590900B717B7 /* MobileCoreServices.framework */; }; - 7D23E414192C590F00B717B7 /* AVFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D23E413192C590F00B717B7 /* AVFoundation.framework */; }; - 7D23E416192C591600B717B7 /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D23E415192C591600B717B7 /* CoreLocation.framework */; }; - 7D23E418192C594800B717B7 /* CoreText.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7D23E417192C594800B717B7 /* CoreText.framework */; }; - 7DA2EC5D19455EF100B009FC /* MLLetterIndexNavigationItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DA2EC3319455EF000B009FC /* MLLetterIndexNavigationItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7DA2EC5E19455EF100B009FC /* MLLetterIndexNavigationItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DA2EC3419455EF000B009FC /* MLLetterIndexNavigationItem.m */; }; - 7DA2EC5F19455EF100B009FC /* MLLetterIndexNavigationItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DA2EC3419455EF000B009FC /* MLLetterIndexNavigationItem.m */; }; - 7DA2EC6019455EF100B009FC /* MLLetterIndexNavigationView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DA2EC3519455EF000B009FC /* MLLetterIndexNavigationView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7DA2EC6119455EF100B009FC /* MLLetterIndexNavigationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DA2EC3619455EF000B009FC /* MLLetterIndexNavigationView.m */; }; - 7DA2EC6219455EF100B009FC /* MLLetterIndexNavigationView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DA2EC3619455EF000B009FC /* MLLetterIndexNavigationView.m */; }; - 7DA2EC6319455EF100B009FC /* MultiSelectedPanel.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DA2EC3819455EF100B009FC /* MultiSelectedPanel.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7DA2EC6419455EF100B009FC /* MultiSelectedPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DA2EC3919455EF100B009FC /* MultiSelectedPanel.m */; }; - 7DA2EC6519455EF100B009FC /* MultiSelectedPanel.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DA2EC3919455EF100B009FC /* MultiSelectedPanel.m */; }; - 7DA2EC6619455EF100B009FC /* MultiSelectedPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2EC3A19455EF100B009FC /* MultiSelectedPanel.xib */; }; - 7DA2EC6719455EF100B009FC /* MultiSelectedPanel.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2EC3A19455EF100B009FC /* MultiSelectedPanel.xib */; }; - 7DA2EC6819455EF100B009FC /* MultiSelectItem.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DA2EC3B19455EF100B009FC /* MultiSelectItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7DA2EC6919455EF100B009FC /* MultiSelectItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DA2EC3C19455EF100B009FC /* MultiSelectItem.m */; }; - 7DA2EC6A19455EF100B009FC /* MultiSelectItem.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DA2EC3C19455EF100B009FC /* MultiSelectItem.m */; }; - 7DA2EC6B19455EF100B009FC /* MultiSelectSearchResultTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DA2EC3D19455EF100B009FC /* MultiSelectSearchResultTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7DA2EC6C19455EF100B009FC /* MultiSelectSearchResultTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DA2EC3E19455EF100B009FC /* MultiSelectSearchResultTableViewCell.m */; }; - 7DA2EC6D19455EF100B009FC /* MultiSelectSearchResultTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DA2EC3E19455EF100B009FC /* MultiSelectSearchResultTableViewCell.m */; }; - 7DA2EC6E19455EF100B009FC /* MultiSelectSearchResultTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2EC3F19455EF100B009FC /* MultiSelectSearchResultTableViewCell.xib */; }; - 7DA2EC6F19455EF100B009FC /* MultiSelectSearchResultTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2EC3F19455EF100B009FC /* MultiSelectSearchResultTableViewCell.xib */; }; - 7DA2EC7019455EF100B009FC /* MultiSelectTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DA2EC4019455EF100B009FC /* MultiSelectTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7DA2EC7119455EF100B009FC /* MultiSelectTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DA2EC4119455EF100B009FC /* MultiSelectTableViewCell.m */; }; - 7DA2EC7219455EF100B009FC /* MultiSelectTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DA2EC4119455EF100B009FC /* MultiSelectTableViewCell.m */; }; - 7DA2EC7319455EF100B009FC /* MultiSelectTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2EC4219455EF100B009FC /* MultiSelectTableViewCell.xib */; }; - 7DA2EC7419455EF100B009FC /* MultiSelectTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2EC4219455EF100B009FC /* MultiSelectTableViewCell.xib */; }; - 7DA2EC7519455EF100B009FC /* MultiSelectViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DA2EC4319455EF100B009FC /* MultiSelectViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7DA2EC7619455EF100B009FC /* MultiSelectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DA2EC4419455EF100B009FC /* MultiSelectViewController.m */; }; - 7DA2EC7719455EF100B009FC /* MultiSelectViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DA2EC4419455EF100B009FC /* MultiSelectViewController.m */; }; - 7DA2EC7819455EF100B009FC /* UIView+Convenience.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DA2EC4519455EF100B009FC /* UIView+Convenience.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7DA2EC7919455EF100B009FC /* UIView+Convenience.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DA2EC4619455EF100B009FC /* UIView+Convenience.m */; }; - 7DA2EC7A19455EF100B009FC /* UIView+Convenience.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DA2EC4619455EF100B009FC /* UIView+Convenience.m */; }; - 7DA2EC8719455F5700B009FC /* AddGroupMemberBtn@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2EC7C19455F5700B009FC /* AddGroupMemberBtn@2x.png */; }; - 7DA2EC8819455F5700B009FC /* AddGroupMemberBtnHL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2EC7D19455F5700B009FC /* AddGroupMemberBtnHL@2x.png */; }; - 7DA2EC8A19455F5700B009FC /* CellBlueSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2EC7F19455F5700B009FC /* CellBlueSelected@2x.png */; }; - 7DA2EC8B19455F5700B009FC /* CellGraySelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2EC8019455F5700B009FC /* CellGraySelected@2x.png */; }; - 7DA2EC8C19455F5700B009FC /* CellNotSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2EC8119455F5700B009FC /* CellNotSelected@2x.png */; }; - 7DA2EC8D19455F5700B009FC /* CellRedSelected@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2EC8219455F5700B009FC /* CellRedSelected@2x.png */; }; - 7DA2EC8E19455F5700B009FC /* ContactsPanelDotRect@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2EC8319455F5700B009FC /* ContactsPanelDotRect@2x.png */; }; - 7DA2EC8F19455F5700B009FC /* MultiSelectedPanelBkg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2EC8419455F5700B009FC /* MultiSelectedPanelBkg@2x.png */; }; - 7DA2EC9019455F5700B009FC /* MultiSelectedPanelConfirmBtnbKG@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2EC8519455F5700B009FC /* MultiSelectedPanelConfirmBtnbKG@2x.png */; }; - 7DA2EC9119455F5700B009FC /* SearchIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2EC8619455F5700B009FC /* SearchIcon@2x.png */; }; - 7DA2EC97194577EA00B009FC /* FLAnimatedImage.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DA2EC93194577EA00B009FC /* FLAnimatedImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7DA2EC98194577EA00B009FC /* FLAnimatedImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DA2EC94194577EA00B009FC /* FLAnimatedImage.m */; }; - 7DA2EC99194577EA00B009FC /* FLAnimatedImage.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DA2EC94194577EA00B009FC /* FLAnimatedImage.m */; }; - 7DA2EC9A194577EA00B009FC /* FLAnimatedImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = 7DA2EC95194577EA00B009FC /* FLAnimatedImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - 7DA2EC9B194577EA00B009FC /* FLAnimatedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DA2EC96194577EA00B009FC /* FLAnimatedImageView.m */; }; - 7DA2EC9C194577EA00B009FC /* FLAnimatedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DA2EC96194577EA00B009FC /* FLAnimatedImageView.m */; }; - 7DA2ECAF19457A2D00B009FC /* emotion1.gif in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2EC9E19457A2D00B009FC /* emotion1.gif */; }; - 7DA2ECB019457A2D00B009FC /* emotion10.gif in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2EC9F19457A2D00B009FC /* emotion10.gif */; }; - 7DA2ECB119457A2D00B009FC /* emotion11.gif in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2ECA019457A2D00B009FC /* emotion11.gif */; }; - 7DA2ECB219457A2D00B009FC /* emotion12.gif in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2ECA119457A2D00B009FC /* emotion12.gif */; }; - 7DA2ECB319457A2D00B009FC /* emotion13.gif in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2ECA219457A2D00B009FC /* emotion13.gif */; }; - 7DA2ECB419457A2D00B009FC /* emotion14.gif in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2ECA319457A2D00B009FC /* emotion14.gif */; }; - 7DA2ECB519457A2D00B009FC /* emotion15.gif in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2ECA419457A2D00B009FC /* emotion15.gif */; }; - 7DA2ECB619457A2D00B009FC /* emotion16.gif in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2ECA519457A2D00B009FC /* emotion16.gif */; }; - 7DA2ECB719457A2D00B009FC /* emotion0.gif in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2ECA619457A2D00B009FC /* emotion0.gif */; }; - 7DA2ECB819457A2D00B009FC /* emotion2.gif in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2ECA719457A2D00B009FC /* emotion2.gif */; }; - 7DA2ECB919457A2D00B009FC /* emotion3.gif in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2ECA819457A2D00B009FC /* emotion3.gif */; }; - 7DA2ECBA19457A2D00B009FC /* emotion4.gif in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2ECA919457A2D00B009FC /* emotion4.gif */; }; - 7DA2ECBB19457A2D00B009FC /* emotion5.gif in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2ECAA19457A2D00B009FC /* emotion5.gif */; }; - 7DA2ECBC19457A2D00B009FC /* emotion6.gif in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2ECAB19457A2D00B009FC /* emotion6.gif */; }; - 7DA2ECBD19457A2D00B009FC /* emotion7.gif in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2ECAC19457A2D00B009FC /* emotion7.gif */; }; - 7DA2ECBE19457A2D00B009FC /* emotion8.gif in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2ECAD19457A2D00B009FC /* emotion8.gif */; }; - 7DA2ECBF19457A2D00B009FC /* emotion9.gif in Resources */ = {isa = PBXBuildFile; fileRef = 7DA2ECAE19457A2D00B009FC /* emotion9.gif */; }; - AB02A9F5192D8DC5004AA23D /* XHBaseSearchTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = AB02A9F3192D8DC5004AA23D /* XHBaseSearchTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB02A9F6192D8DC5004AA23D /* XHBaseSearchTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB02A9F4192D8DC5004AA23D /* XHBaseSearchTableViewController.m */; }; - AB02A9F7192D8DC5004AA23D /* XHBaseSearchTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB02A9F4192D8DC5004AA23D /* XHBaseSearchTableViewController.m */; }; - AB0C4AD51943B6BB00D346FF /* contacts_add_friend@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0C4AD01943B6BB00D346FF /* contacts_add_friend@2x.png */; }; - AB0C4AD61943B6BB00D346FF /* contacts_add_newmessage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0C4AD11943B6BB00D346FF /* contacts_add_newmessage@2x.png */; }; - AB0C4AD71943B6BB00D346FF /* contacts_add_photo@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0C4AD21943B6BB00D346FF /* contacts_add_photo@2x.png */; }; - AB0C4AD81943B6BB00D346FF /* contacts_add_scan@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0C4AD31943B6BB00D346FF /* contacts_add_scan@2x.png */; }; - AB0C4AD91943B6BB00D346FF /* contacts_add_voip@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB0C4AD41943B6BB00D346FF /* contacts_add_voip@2x.png */; }; - AB372902192EC62C0084D7B5 /* XHAlbumTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = AB3728F1192EC62C0084D7B5 /* XHAlbumTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB372903192EC62C0084D7B5 /* XHAlbumTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB3728F2192EC62C0084D7B5 /* XHAlbumTableViewController.m */; }; - AB372904192EC62C0084D7B5 /* XHAlbumTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB3728F2192EC62C0084D7B5 /* XHAlbumTableViewController.m */; }; - AB372905192EC62C0084D7B5 /* XHBottleViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = AB3728F4192EC62C0084D7B5 /* XHBottleViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB372906192EC62C0084D7B5 /* XHBottleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB3728F5192EC62C0084D7B5 /* XHBottleViewController.m */; }; - AB372907192EC62C0084D7B5 /* XHBottleViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB3728F5192EC62C0084D7B5 /* XHBottleViewController.m */; }; - AB372908192EC62C0084D7B5 /* XHLocationServiceTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = AB3728F7192EC62C0084D7B5 /* XHLocationServiceTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB372909192EC62C0084D7B5 /* XHLocationServiceTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB3728F8192EC62C0084D7B5 /* XHLocationServiceTableViewController.m */; }; - AB37290A192EC62C0084D7B5 /* XHLocationServiceTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB3728F8192EC62C0084D7B5 /* XHLocationServiceTableViewController.m */; }; - AB37290B192EC62C0084D7B5 /* XHMoreGameTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = AB3728FA192EC62C0084D7B5 /* XHMoreGameTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB37290C192EC62C0084D7B5 /* XHMoreGameTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB3728FB192EC62C0084D7B5 /* XHMoreGameTableViewController.m */; }; - AB37290D192EC62C0084D7B5 /* XHMoreGameTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB3728FB192EC62C0084D7B5 /* XHMoreGameTableViewController.m */; }; - AB37290E192EC62C0084D7B5 /* XHQRCodeViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = AB3728FD192EC62C0084D7B5 /* XHQRCodeViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB37290F192EC62C0084D7B5 /* XHQRCodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB3728FE192EC62C0084D7B5 /* XHQRCodeViewController.m */; }; - AB372910192EC62C0084D7B5 /* XHQRCodeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB3728FE192EC62C0084D7B5 /* XHQRCodeViewController.m */; }; - AB372911192EC62C0084D7B5 /* XHShakeViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = AB372900192EC62C0084D7B5 /* XHShakeViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB372912192EC62C0084D7B5 /* XHShakeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB372901192EC62C0084D7B5 /* XHShakeViewController.m */; }; - AB372913192EC62C0084D7B5 /* XHShakeViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB372901192EC62C0084D7B5 /* XHShakeViewController.m */; }; - AB372920192EC6800084D7B5 /* XHDisplayEmotionViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = AB372915192EC6800084D7B5 /* XHDisplayEmotionViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB372921192EC6800084D7B5 /* XHDisplayEmotionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB372916192EC6800084D7B5 /* XHDisplayEmotionViewController.m */; }; - AB372922192EC6800084D7B5 /* XHDisplayEmotionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB372916192EC6800084D7B5 /* XHDisplayEmotionViewController.m */; }; - AB372923192EC6800084D7B5 /* XHDisplayLocationViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = AB372918192EC6800084D7B5 /* XHDisplayLocationViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB372924192EC6800084D7B5 /* XHDisplayLocationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB372919192EC6800084D7B5 /* XHDisplayLocationViewController.m */; }; - AB372925192EC6800084D7B5 /* XHDisplayLocationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB372919192EC6800084D7B5 /* XHDisplayLocationViewController.m */; }; - AB372926192EC6800084D7B5 /* XHDisplayMediaViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = AB37291B192EC6800084D7B5 /* XHDisplayMediaViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB372927192EC6800084D7B5 /* XHDisplayMediaViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB37291C192EC6800084D7B5 /* XHDisplayMediaViewController.m */; }; - AB372928192EC6800084D7B5 /* XHDisplayMediaViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB37291C192EC6800084D7B5 /* XHDisplayMediaViewController.m */; }; - AB372929192EC6800084D7B5 /* XHDisplayTextViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = AB37291E192EC6800084D7B5 /* XHDisplayTextViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB37292A192EC6800084D7B5 /* XHDisplayTextViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB37291F192EC6800084D7B5 /* XHDisplayTextViewController.m */; }; - AB37292B192EC6800084D7B5 /* XHDisplayTextViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB37291F192EC6800084D7B5 /* XHDisplayTextViewController.m */; }; - AB406DD8199AE5CC00669D05 /* SECoreTextView.bundle in Resources */ = {isa = PBXBuildFile; fileRef = AB406DD7199AE5CC00669D05 /* SECoreTextView.bundle */; }; - AB41A57B194273150095C12C /* XHMessageAvatorFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = AB41A571194273150095C12C /* XHMessageAvatorFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB41A57C194273150095C12C /* XHMessageAvatorFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = AB41A572194273150095C12C /* XHMessageAvatorFactory.m */; }; - AB41A57D194273150095C12C /* XHMessageAvatorFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = AB41A572194273150095C12C /* XHMessageAvatorFactory.m */; }; - AB41A57E194273150095C12C /* XHMessageBubbleFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = AB41A573194273150095C12C /* XHMessageBubbleFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB41A57F194273150095C12C /* XHMessageBubbleFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = AB41A574194273150095C12C /* XHMessageBubbleFactory.m */; }; - AB41A580194273150095C12C /* XHMessageBubbleFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = AB41A574194273150095C12C /* XHMessageBubbleFactory.m */; }; - AB41A581194273150095C12C /* XHMessageVideoConverPhotoFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = AB41A575194273150095C12C /* XHMessageVideoConverPhotoFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB41A582194273150095C12C /* XHMessageVideoConverPhotoFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = AB41A576194273150095C12C /* XHMessageVideoConverPhotoFactory.m */; }; - AB41A583194273150095C12C /* XHMessageVideoConverPhotoFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = AB41A576194273150095C12C /* XHMessageVideoConverPhotoFactory.m */; }; - AB41A584194273150095C12C /* XHMessageVoiceFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = AB41A577194273150095C12C /* XHMessageVoiceFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB41A585194273150095C12C /* XHMessageVoiceFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = AB41A578194273150095C12C /* XHMessageVoiceFactory.m */; }; - AB41A586194273150095C12C /* XHMessageVoiceFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = AB41A578194273150095C12C /* XHMessageVoiceFactory.m */; }; - AB41A587194273150095C12C /* XHVideoOutputSampleBufferFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = AB41A579194273150095C12C /* XHVideoOutputSampleBufferFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB41A588194273150095C12C /* XHVideoOutputSampleBufferFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = AB41A57A194273150095C12C /* XHVideoOutputSampleBufferFactory.m */; }; - AB41A589194273150095C12C /* XHVideoOutputSampleBufferFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = AB41A57A194273150095C12C /* XHVideoOutputSampleBufferFactory.m */; }; - AB41A58C194274240095C12C /* XHPullRefreshTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = AB41A58A194274240095C12C /* XHPullRefreshTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB41A58D194274240095C12C /* XHPullRefreshTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB41A58B194274240095C12C /* XHPullRefreshTableViewController.m */; }; - AB41A58E194274240095C12C /* XHPullRefreshTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB41A58B194274240095C12C /* XHPullRefreshTableViewController.m */; }; - AB41A592194274950095C12C /* XHRefreshCircleView.h in Headers */ = {isa = PBXBuildFile; fileRef = AB41A590194274950095C12C /* XHRefreshCircleView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB41A593194274950095C12C /* XHRefreshCircleView.m in Sources */ = {isa = PBXBuildFile; fileRef = AB41A591194274950095C12C /* XHRefreshCircleView.m */; }; - AB41A594194274950095C12C /* XHRefreshCircleView.m in Sources */ = {isa = PBXBuildFile; fileRef = AB41A591194274950095C12C /* XHRefreshCircleView.m */; }; - AB41A597194274AC0095C12C /* XHRefreshView.h in Headers */ = {isa = PBXBuildFile; fileRef = AB41A595194274AC0095C12C /* XHRefreshView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB41A598194274AC0095C12C /* XHRefreshView.m in Sources */ = {isa = PBXBuildFile; fileRef = AB41A596194274AC0095C12C /* XHRefreshView.m */; }; - AB41A599194274AC0095C12C /* XHRefreshView.m in Sources */ = {isa = PBXBuildFile; fileRef = AB41A596194274AC0095C12C /* XHRefreshView.m */; }; - AB41A59C194279380095C12C /* XHLoadMoreView.h in Headers */ = {isa = PBXBuildFile; fileRef = AB41A59A194279380095C12C /* XHLoadMoreView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB41A59D194279380095C12C /* XHLoadMoreView.m in Sources */ = {isa = PBXBuildFile; fileRef = AB41A59B194279380095C12C /* XHLoadMoreView.m */; }; - AB41A59E194279380095C12C /* XHLoadMoreView.m in Sources */ = {isa = PBXBuildFile; fileRef = AB41A59B194279380095C12C /* XHLoadMoreView.m */; }; - AB439973192C278400EC5E0D /* XHAlbumCollectionViewFlowLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = AB439971192C278400EC5E0D /* XHAlbumCollectionViewFlowLayout.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB439974192C278400EC5E0D /* XHAlbumCollectionViewFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = AB439972192C278400EC5E0D /* XHAlbumCollectionViewFlowLayout.m */; }; - AB439975192C278400EC5E0D /* XHAlbumCollectionViewFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = AB439972192C278400EC5E0D /* XHAlbumCollectionViewFlowLayout.m */; }; - AB44D41B192D8BB50069A210 /* XHContact.h in Headers */ = {isa = PBXBuildFile; fileRef = AB44D419192D8BB50069A210 /* XHContact.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB44D41C192D8BB50069A210 /* XHContact.m in Sources */ = {isa = PBXBuildFile; fileRef = AB44D41A192D8BB50069A210 /* XHContact.m */; }; - AB44D41D192D8BB50069A210 /* XHContact.m in Sources */ = {isa = PBXBuildFile; fileRef = AB44D41A192D8BB50069A210 /* XHContact.m */; }; - AB4F12F61932AC1300693BD5 /* AlbumFlagMark@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB4F12F51932AC1300693BD5 /* AlbumFlagMark@2x.png */; }; - AB5493961931102E001F2FCC /* XHContactPhotosTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = AB5493941931102E001F2FCC /* XHContactPhotosTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB5493971931102E001F2FCC /* XHContactPhotosTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = AB5493951931102E001F2FCC /* XHContactPhotosTableViewCell.m */; }; - AB5493981931102E001F2FCC /* XHContactPhotosTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = AB5493951931102E001F2FCC /* XHContactPhotosTableViewCell.m */; }; - AB54939B193110BD001F2FCC /* XHContactPhotosView.h in Headers */ = {isa = PBXBuildFile; fileRef = AB549399193110BD001F2FCC /* XHContactPhotosView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB54939C193110BD001F2FCC /* XHContactPhotosView.m in Sources */ = {isa = PBXBuildFile; fileRef = AB54939A193110BD001F2FCC /* XHContactPhotosView.m */; }; - AB54939D193110BD001F2FCC /* XHContactPhotosView.m in Sources */ = {isa = PBXBuildFile; fileRef = AB54939A193110BD001F2FCC /* XHContactPhotosView.m */; }; - AB569AAF193179CC0007DB0B /* Shake_icon_music@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB569AA5193179CC0007DB0B /* Shake_icon_music@2x.png */; }; - AB569AB0193179CC0007DB0B /* Shake_icon_musicHL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB569AA6193179CC0007DB0B /* Shake_icon_musicHL@2x.png */; }; - AB569AB1193179CC0007DB0B /* Shake_icon_people@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB569AA7193179CC0007DB0B /* Shake_icon_people@2x.png */; }; - AB569AB2193179CC0007DB0B /* Shake_icon_peopleHL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB569AA8193179CC0007DB0B /* Shake_icon_peopleHL@2x.png */; }; - AB569AB3193179CC0007DB0B /* Shake_Line_Down@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB569AA9193179CC0007DB0B /* Shake_Line_Down@2x.png */; }; - AB569AB4193179CC0007DB0B /* Shake_Line_Up@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB569AAA193179CC0007DB0B /* Shake_Line_Up@2x.png */; }; - AB569AB5193179CC0007DB0B /* Shake_Logo_Down@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB569AAB193179CC0007DB0B /* Shake_Logo_Down@2x.png */; }; - AB569AB6193179CC0007DB0B /* Shake_Logo_Up@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB569AAC193179CC0007DB0B /* Shake_Logo_Up@2x.png */; }; - AB63BF171936B35400B6C977 /* XHNewsTemplateTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = AB63BF151936B35400B6C977 /* XHNewsTemplateTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB63BF181936B35500B6C977 /* XHNewsTemplateTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = AB63BF161936B35400B6C977 /* XHNewsTemplateTableViewCell.m */; }; - AB63BF191936B35500B6C977 /* XHNewsTemplateTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = AB63BF161936B35400B6C977 /* XHNewsTemplateTableViewCell.m */; }; - AB63BF1C1936B4C800B6C977 /* XHNewsTemplateContainerView.h in Headers */ = {isa = PBXBuildFile; fileRef = AB63BF1A1936B4C800B6C977 /* XHNewsTemplateContainerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB63BF1D1936B4C800B6C977 /* XHNewsTemplateContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = AB63BF1B1936B4C800B6C977 /* XHNewsTemplateContainerView.m */; }; - AB63BF1E1936B4C800B6C977 /* XHNewsTemplateContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = AB63BF1B1936B4C800B6C977 /* XHNewsTemplateContainerView.m */; }; - AB63BF211936B58E00B6C977 /* NewsBackgroundImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB63BF201936B58E00B6C977 /* NewsBackgroundImage@2x.png */; }; - AB63BF251936B66400B6C977 /* XHNewsTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = AB63BF231936B66400B6C977 /* XHNewsTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB63BF261936B66400B6C977 /* XHNewsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB63BF241936B66400B6C977 /* XHNewsTableViewController.m */; }; - AB63BF271936B66400B6C977 /* XHNewsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB63BF241936B66400B6C977 /* XHNewsTableViewController.m */; }; - AB63BF2A1936BE5400B6C977 /* XHNewsContainerView.h in Headers */ = {isa = PBXBuildFile; fileRef = AB63BF281936BE5400B6C977 /* XHNewsContainerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB63BF2B1936BE5400B6C977 /* XHNewsContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = AB63BF291936BE5400B6C977 /* XHNewsContainerView.m */; }; - AB63BF2C1936BE5400B6C977 /* XHNewsContainerView.m in Sources */ = {isa = PBXBuildFile; fileRef = AB63BF291936BE5400B6C977 /* XHNewsContainerView.m */; }; - AB6AB49E193C03D600AFE823 /* NSString+MessageInputView.h in Headers */ = {isa = PBXBuildFile; fileRef = AB6AB482193C03D600AFE823 /* NSString+MessageInputView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB6AB49F193C03D600AFE823 /* NSString+MessageInputView.m in Sources */ = {isa = PBXBuildFile; fileRef = AB6AB483193C03D600AFE823 /* NSString+MessageInputView.m */; }; - AB6AB4A0193C03D600AFE823 /* NSString+MessageInputView.m in Sources */ = {isa = PBXBuildFile; fileRef = AB6AB483193C03D600AFE823 /* NSString+MessageInputView.m */; }; - AB6AB4A1193C03D600AFE823 /* NSString+XHMD5.h in Headers */ = {isa = PBXBuildFile; fileRef = AB6AB484193C03D600AFE823 /* NSString+XHMD5.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB6AB4A2193C03D600AFE823 /* NSString+XHMD5.m in Sources */ = {isa = PBXBuildFile; fileRef = AB6AB485193C03D600AFE823 /* NSString+XHMD5.m */; }; - AB6AB4A3193C03D600AFE823 /* NSString+XHMD5.m in Sources */ = {isa = PBXBuildFile; fileRef = AB6AB485193C03D600AFE823 /* NSString+XHMD5.m */; }; - AB6AB4A4193C03D600AFE823 /* UIButton+XHButtonTitlePosition.h in Headers */ = {isa = PBXBuildFile; fileRef = AB6AB487193C03D600AFE823 /* UIButton+XHButtonTitlePosition.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB6AB4A5193C03D600AFE823 /* UIButton+XHButtonTitlePosition.m in Sources */ = {isa = PBXBuildFile; fileRef = AB6AB488193C03D600AFE823 /* UIButton+XHButtonTitlePosition.m */; }; - AB6AB4A6193C03D600AFE823 /* UIButton+XHButtonTitlePosition.m in Sources */ = {isa = PBXBuildFile; fileRef = AB6AB488193C03D600AFE823 /* UIButton+XHButtonTitlePosition.m */; }; - AB6AB4A7193C03D600AFE823 /* UIImage+Alpha.h in Headers */ = {isa = PBXBuildFile; fileRef = AB6AB48A193C03D600AFE823 /* UIImage+Alpha.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB6AB4A8193C03D600AFE823 /* UIImage+Alpha.m in Sources */ = {isa = PBXBuildFile; fileRef = AB6AB48B193C03D600AFE823 /* UIImage+Alpha.m */; }; - AB6AB4A9193C03D600AFE823 /* UIImage+Alpha.m in Sources */ = {isa = PBXBuildFile; fileRef = AB6AB48B193C03D600AFE823 /* UIImage+Alpha.m */; }; - AB6AB4AA193C03D600AFE823 /* UIImage+Resize.h in Headers */ = {isa = PBXBuildFile; fileRef = AB6AB48C193C03D600AFE823 /* UIImage+Resize.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB6AB4AB193C03D600AFE823 /* UIImage+Resize.m in Sources */ = {isa = PBXBuildFile; fileRef = AB6AB48D193C03D600AFE823 /* UIImage+Resize.m */; }; - AB6AB4AC193C03D600AFE823 /* UIImage+Resize.m in Sources */ = {isa = PBXBuildFile; fileRef = AB6AB48D193C03D600AFE823 /* UIImage+Resize.m */; }; - AB6AB4AD193C03D600AFE823 /* UIImage+RoundedCorner.h in Headers */ = {isa = PBXBuildFile; fileRef = AB6AB48E193C03D600AFE823 /* UIImage+RoundedCorner.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB6AB4AE193C03D600AFE823 /* UIImage+RoundedCorner.m in Sources */ = {isa = PBXBuildFile; fileRef = AB6AB48F193C03D600AFE823 /* UIImage+RoundedCorner.m */; }; - AB6AB4AF193C03D600AFE823 /* UIImage+RoundedCorner.m in Sources */ = {isa = PBXBuildFile; fileRef = AB6AB48F193C03D600AFE823 /* UIImage+RoundedCorner.m */; }; - AB6AB4B0193C03D600AFE823 /* UIImage+Utility.h in Headers */ = {isa = PBXBuildFile; fileRef = AB6AB490193C03D600AFE823 /* UIImage+Utility.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB6AB4B1193C03D600AFE823 /* UIImage+Utility.m in Sources */ = {isa = PBXBuildFile; fileRef = AB6AB491193C03D600AFE823 /* UIImage+Utility.m */; }; - AB6AB4B2193C03D600AFE823 /* UIImage+Utility.m in Sources */ = {isa = PBXBuildFile; fileRef = AB6AB491193C03D600AFE823 /* UIImage+Utility.m */; }; - AB6AB4B3193C03D600AFE823 /* UIImage+XHAnimatedFaceGif.h in Headers */ = {isa = PBXBuildFile; fileRef = AB6AB492193C03D600AFE823 /* UIImage+XHAnimatedFaceGif.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB6AB4B4193C03D600AFE823 /* UIImage+XHAnimatedFaceGif.m in Sources */ = {isa = PBXBuildFile; fileRef = AB6AB493193C03D600AFE823 /* UIImage+XHAnimatedFaceGif.m */; }; - AB6AB4B5193C03D600AFE823 /* UIImage+XHAnimatedFaceGif.m in Sources */ = {isa = PBXBuildFile; fileRef = AB6AB493193C03D600AFE823 /* UIImage+XHAnimatedFaceGif.m */; }; - AB6AB4B6193C03D600AFE823 /* UIImage+XHRounded.h in Headers */ = {isa = PBXBuildFile; fileRef = AB6AB494193C03D600AFE823 /* UIImage+XHRounded.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB6AB4B7193C03D600AFE823 /* UIImage+XHRounded.m in Sources */ = {isa = PBXBuildFile; fileRef = AB6AB495193C03D600AFE823 /* UIImage+XHRounded.m */; }; - AB6AB4B8193C03D600AFE823 /* UIImage+XHRounded.m in Sources */ = {isa = PBXBuildFile; fileRef = AB6AB495193C03D600AFE823 /* UIImage+XHRounded.m */; }; - AB6AB4B9193C03D600AFE823 /* UIScrollView+XHkeyboardControl.h in Headers */ = {isa = PBXBuildFile; fileRef = AB6AB497193C03D600AFE823 /* UIScrollView+XHkeyboardControl.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB6AB4BA193C03D600AFE823 /* UIScrollView+XHkeyboardControl.m in Sources */ = {isa = PBXBuildFile; fileRef = AB6AB498193C03D600AFE823 /* UIScrollView+XHkeyboardControl.m */; }; - AB6AB4BB193C03D600AFE823 /* UIScrollView+XHkeyboardControl.m in Sources */ = {isa = PBXBuildFile; fileRef = AB6AB498193C03D600AFE823 /* UIScrollView+XHkeyboardControl.m */; }; - AB6AB4BC193C03D600AFE823 /* UIView+XHBadgeView.h in Headers */ = {isa = PBXBuildFile; fileRef = AB6AB49A193C03D600AFE823 /* UIView+XHBadgeView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB6AB4BD193C03D600AFE823 /* UIView+XHBadgeView.m in Sources */ = {isa = PBXBuildFile; fileRef = AB6AB49B193C03D600AFE823 /* UIView+XHBadgeView.m */; }; - AB6AB4BE193C03D600AFE823 /* UIView+XHBadgeView.m in Sources */ = {isa = PBXBuildFile; fileRef = AB6AB49B193C03D600AFE823 /* UIView+XHBadgeView.m */; }; - AB6AB4BF193C03D600AFE823 /* UIView+XHRemoteImage.h in Headers */ = {isa = PBXBuildFile; fileRef = AB6AB49C193C03D600AFE823 /* UIView+XHRemoteImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB6AB4C0193C03D600AFE823 /* UIView+XHRemoteImage.m in Sources */ = {isa = PBXBuildFile; fileRef = AB6AB49D193C03D600AFE823 /* UIView+XHRemoteImage.m */; }; - AB6AB4C1193C03D600AFE823 /* UIView+XHRemoteImage.m in Sources */ = {isa = PBXBuildFile; fileRef = AB6AB49D193C03D600AFE823 /* UIView+XHRemoteImage.m */; }; - AB713842193195A3009792B5 /* shake_match.wav in Resources */ = {isa = PBXBuildFile; fileRef = AB71383F193195A3009792B5 /* shake_match.wav */; }; - AB713843193195A3009792B5 /* shake_nomatch.wav in Resources */ = {isa = PBXBuildFile; fileRef = AB713840193195A3009792B5 /* shake_nomatch.wav */; }; - AB713844193195A3009792B5 /* shake_sound_male.wav in Resources */ = {isa = PBXBuildFile; fileRef = AB713841193195A3009792B5 /* shake_sound_male.wav */; }; - AB726383193281CA00AA738F /* XHCaptureHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = AB726381193281CA00AA738F /* XHCaptureHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB726384193281CA00AA738F /* XHCaptureHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = AB726382193281CA00AA738F /* XHCaptureHelper.m */; }; - AB726385193281CA00AA738F /* XHCaptureHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = AB726382193281CA00AA738F /* XHCaptureHelper.m */; }; - AB72638919328D9A00AA738F /* XHLocationServiceTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = AB72638719328D9A00AA738F /* XHLocationServiceTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB72638A19328D9A00AA738F /* XHLocationServiceTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = AB72638819328D9A00AA738F /* XHLocationServiceTableViewCell.m */; }; - AB72638B19328D9A00AA738F /* XHLocationServiceTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = AB72638819328D9A00AA738F /* XHLocationServiceTableViewCell.m */; }; - AB72638E193293DC00AA738F /* barbuttonicon_more@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB72638C193293DC00AA738F /* barbuttonicon_more@2x.png */; }; - AB72638F193293DC00AA738F /* barbuttonicon_set@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB72638D193293DC00AA738F /* barbuttonicon_set@2x.png */; }; - AB7263921932944400AA738F /* Shake_Logo_Female_Down@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB7263901932944400AA738F /* Shake_Logo_Female_Down@2x.png */; }; - AB7263931932944400AA738F /* Shake_Logo_Female_Up@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB7263911932944400AA738F /* Shake_Logo_Female_Up@2x.png */; }; - AB726395193296EE00AA738F /* album_add_photo@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB726394193296EE00AA738F /* album_add_photo@2x.png */; }; - AB73B1651932463E009665E3 /* XHScanningView.h in Headers */ = {isa = PBXBuildFile; fileRef = AB73B1631932463E009665E3 /* XHScanningView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB73B1661932463E009665E3 /* XHScanningView.m in Sources */ = {isa = PBXBuildFile; fileRef = AB73B1641932463E009665E3 /* XHScanningView.m */; }; - AB73B1671932463E009665E3 /* XHScanningView.m in Sources */ = {isa = PBXBuildFile; fileRef = AB73B1641932463E009665E3 /* XHScanningView.m */; }; - AB79A20D192C0A6400A9B951 /* XHPathCover.h in Headers */ = {isa = PBXBuildFile; fileRef = AB79A207192C0A6400A9B951 /* XHPathCover.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB79A20E192C0A6400A9B951 /* XHPathCover.m in Sources */ = {isa = PBXBuildFile; fileRef = AB79A208192C0A6400A9B951 /* XHPathCover.m */; }; - AB79A20F192C0A6400A9B951 /* XHPathCover.m in Sources */ = {isa = PBXBuildFile; fileRef = AB79A208192C0A6400A9B951 /* XHPathCover.m */; }; - AB79A210192C0A6400A9B951 /* XHSoundManager.h in Headers */ = {isa = PBXBuildFile; fileRef = AB79A209192C0A6400A9B951 /* XHSoundManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB79A211192C0A6400A9B951 /* XHSoundManager.m in Sources */ = {isa = PBXBuildFile; fileRef = AB79A20A192C0A6400A9B951 /* XHSoundManager.m */; }; - AB79A212192C0A6400A9B951 /* XHSoundManager.m in Sources */ = {isa = PBXBuildFile; fileRef = AB79A20A192C0A6400A9B951 /* XHSoundManager.m */; }; - AB79A213192C0A6400A9B951 /* XHWaterDropRefresh.h in Headers */ = {isa = PBXBuildFile; fileRef = AB79A20B192C0A6400A9B951 /* XHWaterDropRefresh.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB79A214192C0A6400A9B951 /* XHWaterDropRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = AB79A20C192C0A6400A9B951 /* XHWaterDropRefresh.m */; }; - AB79A215192C0A6400A9B951 /* XHWaterDropRefresh.m in Sources */ = {isa = PBXBuildFile; fileRef = AB79A20C192C0A6400A9B951 /* XHWaterDropRefresh.m */; }; - AB79A218192C0B1500A9B951 /* circle@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB79A216192C0B1500A9B951 /* circle@2x.png */; }; - AB79A219192C0B1500A9B951 /* pullrefresh.aif in Resources */ = {isa = PBXBuildFile; fileRef = AB79A217192C0B1500A9B951 /* pullrefresh.aif */; }; - AB79A21D192C22F500A9B951 /* XHBaseCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = AB79A21B192C22F500A9B951 /* XHBaseCollectionViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB79A21E192C22F500A9B951 /* XHBaseCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = AB79A21C192C22F500A9B951 /* XHBaseCollectionViewCell.m */; }; - AB79A21F192C22F500A9B951 /* XHBaseCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = AB79A21C192C22F500A9B951 /* XHBaseCollectionViewCell.m */; }; - AB79A222192C231C00A9B951 /* XHAlbumPhotoCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = AB79A220192C231C00A9B951 /* XHAlbumPhotoCollectionViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB79A223192C231C00A9B951 /* XHAlbumPhotoCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = AB79A221192C231C00A9B951 /* XHAlbumPhotoCollectionViewCell.m */; }; - AB79A224192C231C00A9B951 /* XHAlbumPhotoCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = AB79A221192C231C00A9B951 /* XHAlbumPhotoCollectionViewCell.m */; }; - AB84B5CF1937EEB30069A10C /* XHExpressionDetailTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = AB84B5CD1937EEB30069A10C /* XHExpressionDetailTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB84B5D01937EEB30069A10C /* XHExpressionDetailTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB84B5CE1937EEB30069A10C /* XHExpressionDetailTableViewController.m */; }; - AB84B5D11937EEB30069A10C /* XHExpressionDetailTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB84B5CE1937EEB30069A10C /* XHExpressionDetailTableViewController.m */; }; - AB89EAE61947ED19000930AE /* avator@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB89EAE41947ED19000930AE /* avator@2x.png */; }; - AB89EAE71947ED19000930AE /* placeholderImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB89EAE51947ED19000930AE /* placeholderImage@2x.png */; }; - AB8ACCDF192EB04400FA1C80 /* MoreExpressionShops@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB8ACCDA192EB04400FA1C80 /* MoreExpressionShops@2x.png */; }; - AB8ACCE0192EB04400FA1C80 /* MoreMyAlbum@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB8ACCDB192EB04400FA1C80 /* MoreMyAlbum@2x.png */; }; - AB8ACCE1192EB04400FA1C80 /* MoreMyBankCard@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB8ACCDC192EB04400FA1C80 /* MoreMyBankCard@2x.png */; }; - AB8ACCE2192EB04400FA1C80 /* MoreMyFavorites@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB8ACCDD192EB04400FA1C80 /* MoreMyFavorites@2x.png */; }; - AB8ACCE3192EB04400FA1C80 /* MoreSetting@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB8ACCDE192EB04400FA1C80 /* MoreSetting@2x.png */; }; - AB8ACCE7192EB0A400FA1C80 /* XHMultipleSectionTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = AB8ACCE5192EB0A400FA1C80 /* XHMultipleSectionTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB8ACCE8192EB0A400FA1C80 /* XHMultipleSectionTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB8ACCE6192EB0A400FA1C80 /* XHMultipleSectionTableViewController.m */; }; - AB8ACCE9192EB0A400FA1C80 /* XHMultipleSectionTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB8ACCE6192EB0A400FA1C80 /* XHMultipleSectionTableViewController.m */; }; - AB8ACCF2192EBF0C00FA1C80 /* XHMoreExpressionShopsTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = AB8ACCF0192EBF0C00FA1C80 /* XHMoreExpressionShopsTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB8ACCF3192EBF0C00FA1C80 /* XHMoreExpressionShopsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB8ACCF1192EBF0C00FA1C80 /* XHMoreExpressionShopsTableViewController.m */; }; - AB8ACCF4192EBF0C00FA1C80 /* XHMoreExpressionShopsTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB8ACCF1192EBF0C00FA1C80 /* XHMoreExpressionShopsTableViewController.m */; }; - AB8ACCF7192EBF1700FA1C80 /* XHMoreMyAlbumTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = AB8ACCF5192EBF1700FA1C80 /* XHMoreMyAlbumTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB8ACCF8192EBF1700FA1C80 /* XHMoreMyAlbumTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB8ACCF6192EBF1700FA1C80 /* XHMoreMyAlbumTableViewController.m */; }; - AB8ACCF9192EBF1700FA1C80 /* XHMoreMyAlbumTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB8ACCF6192EBF1700FA1C80 /* XHMoreMyAlbumTableViewController.m */; }; - AB8ACCFC192EBF2100FA1C80 /* XHMoreMyBankCardTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = AB8ACCFA192EBF2100FA1C80 /* XHMoreMyBankCardTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB8ACCFD192EBF2100FA1C80 /* XHMoreMyBankCardTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB8ACCFB192EBF2100FA1C80 /* XHMoreMyBankCardTableViewController.m */; }; - AB8ACCFE192EBF2100FA1C80 /* XHMoreMyBankCardTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB8ACCFB192EBF2100FA1C80 /* XHMoreMyBankCardTableViewController.m */; }; - AB8ACD01192EBF2C00FA1C80 /* XHMoreMyFavoritesTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = AB8ACCFF192EBF2C00FA1C80 /* XHMoreMyFavoritesTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB8ACD02192EBF2C00FA1C80 /* XHMoreMyFavoritesTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB8ACD00192EBF2C00FA1C80 /* XHMoreMyFavoritesTableViewController.m */; }; - AB8ACD03192EBF2C00FA1C80 /* XHMoreMyFavoritesTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB8ACD00192EBF2C00FA1C80 /* XHMoreMyFavoritesTableViewController.m */; }; - AB8ACD06192EBF3600FA1C80 /* XHMoreMyProfileDetailTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = AB8ACD04192EBF3600FA1C80 /* XHMoreMyProfileDetailTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB8ACD07192EBF3600FA1C80 /* XHMoreMyProfileDetailTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB8ACD05192EBF3600FA1C80 /* XHMoreMyProfileDetailTableViewController.m */; }; - AB8ACD08192EBF3600FA1C80 /* XHMoreMyProfileDetailTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB8ACD05192EBF3600FA1C80 /* XHMoreMyProfileDetailTableViewController.m */; }; - AB8ACD0B192EBF3F00FA1C80 /* XHMoreSettingTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = AB8ACD09192EBF3F00FA1C80 /* XHMoreSettingTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB8ACD0C192EBF3F00FA1C80 /* XHMoreSettingTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB8ACD0A192EBF3F00FA1C80 /* XHMoreSettingTableViewController.m */; }; - AB8ACD0D192EBF3F00FA1C80 /* XHMoreSettingTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB8ACD0A192EBF3F00FA1C80 /* XHMoreSettingTableViewController.m */; }; - AB8C80FC1936A6F7006CDA9B /* LKBadgeView.h in Headers */ = {isa = PBXBuildFile; fileRef = AB8C80FA1936A6F7006CDA9B /* LKBadgeView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB8C80FD1936A6F7006CDA9B /* LKBadgeView.m in Sources */ = {isa = PBXBuildFile; fileRef = AB8C80FB1936A6F7006CDA9B /* LKBadgeView.m */; }; - AB8C80FE1936A6F7006CDA9B /* LKBadgeView.m in Sources */ = {isa = PBXBuildFile; fileRef = AB8C80FB1936A6F7006CDA9B /* LKBadgeView.m */; }; - AB94CDBC194688FB0010F0D7 /* XHOperationNetworkKit.h in Headers */ = {isa = PBXBuildFile; fileRef = AB94CDBA194688FB0010F0D7 /* XHOperationNetworkKit.h */; }; - AB94CDBD194688FB0010F0D7 /* XHOperationNetworkKit.m in Sources */ = {isa = PBXBuildFile; fileRef = AB94CDBB194688FB0010F0D7 /* XHOperationNetworkKit.m */; }; - AB94CDBE194688FB0010F0D7 /* XHOperationNetworkKit.m in Sources */ = {isa = PBXBuildFile; fileRef = AB94CDBB194688FB0010F0D7 /* XHOperationNetworkKit.m */; }; - AB9B0F58193A8630004FA35D /* XHHorizontalGridView.h in Headers */ = {isa = PBXBuildFile; fileRef = AB9B0F56193A8630004FA35D /* XHHorizontalGridView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB9B0F59193A8630004FA35D /* XHHorizontalGridView.m in Sources */ = {isa = PBXBuildFile; fileRef = AB9B0F57193A8630004FA35D /* XHHorizontalGridView.m */; }; - AB9B0F5A193A8630004FA35D /* XHHorizontalGridView.m in Sources */ = {isa = PBXBuildFile; fileRef = AB9B0F57193A8630004FA35D /* XHHorizontalGridView.m */; }; - AB9B0F5D193A8649004FA35D /* XHHorizontalGridItem.h in Headers */ = {isa = PBXBuildFile; fileRef = AB9B0F5B193A8649004FA35D /* XHHorizontalGridItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB9B0F5E193A8649004FA35D /* XHHorizontalGridItem.m in Sources */ = {isa = PBXBuildFile; fileRef = AB9B0F5C193A8649004FA35D /* XHHorizontalGridItem.m */; }; - AB9B0F5F193A8649004FA35D /* XHHorizontalGridItem.m in Sources */ = {isa = PBXBuildFile; fileRef = AB9B0F5C193A8649004FA35D /* XHHorizontalGridItem.m */; }; - AB9B0F62193A88AD004FA35D /* XHHorizontalGridItemView.h in Headers */ = {isa = PBXBuildFile; fileRef = AB9B0F60193A88AD004FA35D /* XHHorizontalGridItemView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - AB9B0F63193A88AD004FA35D /* XHHorizontalGridItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = AB9B0F61193A88AD004FA35D /* XHHorizontalGridItemView.m */; }; - AB9B0F64193A88AD004FA35D /* XHHorizontalGridItemView.m in Sources */ = {isa = PBXBuildFile; fileRef = AB9B0F61193A88AD004FA35D /* XHHorizontalGridItemView.m */; }; - ABA8846F193D00BA00413CEC /* XHMessageBubbleHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = ABA8846D193D00BA00413CEC /* XHMessageBubbleHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ABA88470193D00BA00413CEC /* XHMessageBubbleHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = ABA8846E193D00BA00413CEC /* XHMessageBubbleHelper.m */; }; - ABA88471193D00BA00413CEC /* XHMessageBubbleHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = ABA8846E193D00BA00413CEC /* XHMessageBubbleHelper.m */; }; - ABB494041930086C000A2680 /* XHContactCommunicationView.h in Headers */ = {isa = PBXBuildFile; fileRef = ABB494021930086C000A2680 /* XHContactCommunicationView.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ABB494051930086C000A2680 /* XHContactCommunicationView.m in Sources */ = {isa = PBXBuildFile; fileRef = ABB494031930086C000A2680 /* XHContactCommunicationView.m */; }; - ABB494061930086C000A2680 /* XHContactCommunicationView.m in Sources */ = {isa = PBXBuildFile; fileRef = ABB494031930086C000A2680 /* XHContactCommunicationView.m */; }; - ABB5472B19394D47000D3C9C /* XHCacheManager.h in Headers */ = {isa = PBXBuildFile; fileRef = ABB5472619394D47000D3C9C /* XHCacheManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ABB5472C19394D47000D3C9C /* XHCacheManager.m in Sources */ = {isa = PBXBuildFile; fileRef = ABB5472719394D47000D3C9C /* XHCacheManager.m */; }; - ABB5472D19394D47000D3C9C /* XHCacheManager.m in Sources */ = {isa = PBXBuildFile; fileRef = ABB5472719394D47000D3C9C /* XHCacheManager.m */; }; - ABB5472E19394D47000D3C9C /* XHFileAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = ABB5472819394D47000D3C9C /* XHFileAttribute.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ABB5472F19394D47000D3C9C /* XHFileAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = ABB5472919394D47000D3C9C /* XHFileAttribute.m */; }; - ABB5473019394D47000D3C9C /* XHFileAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = ABB5472919394D47000D3C9C /* XHFileAttribute.m */; }; - ABB5473319394D7C000D3C9C /* XHHTTPClient.h in Headers */ = {isa = PBXBuildFile; fileRef = ABB5473119394D7C000D3C9C /* XHHTTPClient.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ABB5473419394D7C000D3C9C /* XHHTTPClient.m in Sources */ = {isa = PBXBuildFile; fileRef = ABB5473219394D7C000D3C9C /* XHHTTPClient.m */; }; - ABB5473519394D7C000D3C9C /* XHHTTPClient.m in Sources */ = {isa = PBXBuildFile; fileRef = ABB5473219394D7C000D3C9C /* XHHTTPClient.m */; }; - ABB76E2B1937ED7300E62A2E /* emotionShopOne@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABB76E281937ED7300E62A2E /* emotionShopOne@2x.png */; }; - ABB76E2C1937ED7300E62A2E /* emotionShopTwo@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABB76E291937ED7300E62A2E /* emotionShopTwo@2x.png */; }; - ABB76E2D1937ED7300E62A2E /* emotionShopOther@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABB76E2A1937ED7300E62A2E /* emotionShopOther@2x.png */; }; - ABB7771C1932A7D700F4ACAF /* Contact_Female@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABB7771A1932A7D700F4ACAF /* Contact_Female@2x.png */; }; - ABB7771D1932A7D700F4ACAF /* Contact_Male@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABB7771B1932A7D700F4ACAF /* Contact_Male@2x.png */; }; - ABB839E9193CCACA003DEE7A /* NSString+XHDiskSizeTransfrom.h in Headers */ = {isa = PBXBuildFile; fileRef = ABB839E7193CCACA003DEE7A /* NSString+XHDiskSizeTransfrom.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ABB839EA193CCACA003DEE7A /* NSString+XHDiskSizeTransfrom.m in Sources */ = {isa = PBXBuildFile; fileRef = ABB839E8193CCACA003DEE7A /* NSString+XHDiskSizeTransfrom.m */; }; - ABB839EB193CCACA003DEE7A /* NSString+XHDiskSizeTransfrom.m in Sources */ = {isa = PBXBuildFile; fileRef = ABB839E8193CCACA003DEE7A /* NSString+XHDiskSizeTransfrom.m */; }; - ABBA5D0C19427D96008BA06D /* XHRefreshControl.h in Headers */ = {isa = PBXBuildFile; fileRef = ABBA5D0A19427D96008BA06D /* XHRefreshControl.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ABBA5D0D19427D96008BA06D /* XHRefreshControl.m in Sources */ = {isa = PBXBuildFile; fileRef = ABBA5D0B19427D96008BA06D /* XHRefreshControl.m */; }; - ABBA5D0E19427D96008BA06D /* XHRefreshControl.m in Sources */ = {isa = PBXBuildFile; fileRef = ABBA5D0B19427D96008BA06D /* XHRefreshControl.m */; }; - ABCB35AB19342DFA002F9938 /* VoiceSearchBtn@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB356719342DFA002F9938 /* VoiceSearchBtn@2x.png */; }; - ABCB35AC19342DFA002F9938 /* VoiceSearchBtn_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB356819342DFA002F9938 /* VoiceSearchBtn_ios7@2x.png */; }; - ABCB35AD19342DFA002F9938 /* VoiceSearchBtnHL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB356919342DFA002F9938 /* VoiceSearchBtnHL@2x.png */; }; - ABCB35AE19342DFA002F9938 /* VoiceSearchBtnHL_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB356A19342DFA002F9938 /* VoiceSearchBtnHL_ios7@2x.png */; }; - ABCB35AF19342DFA002F9938 /* VoiceSearchFeedback003@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB356B19342DFA002F9938 /* VoiceSearchFeedback003@2x.png */; }; - ABCB35B019342DFA002F9938 /* VoiceSearchFeedback003_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB356C19342DFA002F9938 /* VoiceSearchFeedback003_ios7@2x.png */; }; - ABCB35B119342DFA002F9938 /* VoiceSearchFeedback004@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB356D19342DFA002F9938 /* VoiceSearchFeedback004@2x.png */; }; - ABCB35B219342DFA002F9938 /* VoiceSearchFeedback004_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB356E19342DFA002F9938 /* VoiceSearchFeedback004_ios7@2x.png */; }; - ABCB35B319342DFA002F9938 /* VoiceSearchFeedback005@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB356F19342DFA002F9938 /* VoiceSearchFeedback005@2x.png */; }; - ABCB35B419342DFA002F9938 /* VoiceSearchFeedback005_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB357019342DFA002F9938 /* VoiceSearchFeedback005_ios7@2x.png */; }; - ABCB35B519342DFA002F9938 /* VoiceSearchFeedback006@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB357119342DFA002F9938 /* VoiceSearchFeedback006@2x.png */; }; - ABCB35B619342DFA002F9938 /* VoiceSearchFeedback006_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB357219342DFA002F9938 /* VoiceSearchFeedback006_ios7@2x.png */; }; - ABCB35B719342DFA002F9938 /* VoiceSearchFeedback007@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB357319342DFA002F9938 /* VoiceSearchFeedback007@2x.png */; }; - ABCB35B819342DFA002F9938 /* VoiceSearchFeedback007_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB357419342DFA002F9938 /* VoiceSearchFeedback007_ios7@2x.png */; }; - ABCB35B919342DFA002F9938 /* VoiceSearchFeedback008@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB357519342DFA002F9938 /* VoiceSearchFeedback008@2x.png */; }; - ABCB35BA19342DFA002F9938 /* VoiceSearchFeedback008_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB357619342DFA002F9938 /* VoiceSearchFeedback008_ios7@2x.png */; }; - ABCB35BB19342DFA002F9938 /* VoiceSearchFeedback009@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB357719342DFA002F9938 /* VoiceSearchFeedback009@2x.png */; }; - ABCB35BC19342DFA002F9938 /* VoiceSearchFeedback009_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB357819342DFA002F9938 /* VoiceSearchFeedback009_ios7@2x.png */; }; - ABCB35BD19342DFA002F9938 /* VoiceSearchFeedback010@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB357919342DFA002F9938 /* VoiceSearchFeedback010@2x.png */; }; - ABCB35BE19342DFA002F9938 /* VoiceSearchFeedback010_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB357A19342DFA002F9938 /* VoiceSearchFeedback010_ios7@2x.png */; }; - ABCB35BF19342DFA002F9938 /* VoiceSearchFeedback011@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB357B19342DFA002F9938 /* VoiceSearchFeedback011@2x.png */; }; - ABCB35C019342DFA002F9938 /* VoiceSearchFeedback011_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB357C19342DFA002F9938 /* VoiceSearchFeedback011_ios7@2x.png */; }; - ABCB35C119342DFA002F9938 /* VoiceSearchFeedback012@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB357D19342DFA002F9938 /* VoiceSearchFeedback012@2x.png */; }; - ABCB35C219342DFA002F9938 /* VoiceSearchFeedback012_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB357E19342DFA002F9938 /* VoiceSearchFeedback012_ios7@2x.png */; }; - ABCB35C319342DFA002F9938 /* VoiceSearchFeedback013@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB357F19342DFA002F9938 /* VoiceSearchFeedback013@2x.png */; }; - ABCB35C419342DFA002F9938 /* VoiceSearchFeedback013_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB358019342DFA002F9938 /* VoiceSearchFeedback013_ios7@2x.png */; }; - ABCB35C519342DFA002F9938 /* VoiceSearchFeedback014@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB358119342DFA002F9938 /* VoiceSearchFeedback014@2x.png */; }; - ABCB35C619342DFA002F9938 /* VoiceSearchFeedback014_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB358219342DFA002F9938 /* VoiceSearchFeedback014_ios7@2x.png */; }; - ABCB35C719342DFA002F9938 /* VoiceSearchFeedback015@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB358319342DFA002F9938 /* VoiceSearchFeedback015@2x.png */; }; - ABCB35C819342DFA002F9938 /* VoiceSearchFeedback015_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB358419342DFA002F9938 /* VoiceSearchFeedback015_ios7@2x.png */; }; - ABCB35C919342DFA002F9938 /* VoiceSearchFeedback016@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB358519342DFA002F9938 /* VoiceSearchFeedback016@2x.png */; }; - ABCB35CA19342DFA002F9938 /* VoiceSearchFeedback016_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB358619342DFA002F9938 /* VoiceSearchFeedback016_ios7@2x.png */; }; - ABCB35CB19342DFA002F9938 /* VoiceSearchFeedback017@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB358719342DFA002F9938 /* VoiceSearchFeedback017@2x.png */; }; - ABCB35CC19342DFA002F9938 /* VoiceSearchFeedback017_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB358819342DFA002F9938 /* VoiceSearchFeedback017_ios7@2x.png */; }; - ABCB35CD19342DFA002F9938 /* VoiceSearchFeedback018@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB358919342DFA002F9938 /* VoiceSearchFeedback018@2x.png */; }; - ABCB35CE19342DFA002F9938 /* VoiceSearchFeedback018_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB358A19342DFA002F9938 /* VoiceSearchFeedback018_ios7@2x.png */; }; - ABCB35CF19342DFA002F9938 /* VoiceSearchFeedback019@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB358B19342DFA002F9938 /* VoiceSearchFeedback019@2x.png */; }; - ABCB35D019342DFA002F9938 /* VoiceSearchFeedback019_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB358C19342DFA002F9938 /* VoiceSearchFeedback019_ios7@2x.png */; }; - ABCB35D119342DFA002F9938 /* VoiceSearchFeedback020@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB358D19342DFA002F9938 /* VoiceSearchFeedback020@2x.png */; }; - ABCB35D219342DFA002F9938 /* VoiceSearchFeedback020_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB358E19342DFA002F9938 /* VoiceSearchFeedback020_ios7@2x.png */; }; - ABCB35D319342DFA002F9938 /* VoiceSearchIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB358F19342DFA002F9938 /* VoiceSearchIcon@2x.png */; }; - ABCB35D419342DFA002F9938 /* VoiceSearchIcon_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB359019342DFA002F9938 /* VoiceSearchIcon_ios7@2x.png */; }; - ABCB35D519342DFA002F9938 /* VoiceSearchIconHL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB359119342DFA002F9938 /* VoiceSearchIconHL@2x.png */; }; - ABCB35D619342DFA002F9938 /* VoiceSearchIconHL_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB359219342DFA002F9938 /* VoiceSearchIconHL_ios7@2x.png */; }; - ABCB35D719342DFA002F9938 /* VoiceSearchLoading001@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB359319342DFA002F9938 /* VoiceSearchLoading001@2x.png */; }; - ABCB35D819342DFA002F9938 /* VoiceSearchLoading001_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB359419342DFA002F9938 /* VoiceSearchLoading001_ios7@2x.png */; }; - ABCB35D919342DFA002F9938 /* VoiceSearchLoading002@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB359519342DFA002F9938 /* VoiceSearchLoading002@2x.png */; }; - ABCB35DA19342DFA002F9938 /* VoiceSearchLoading002_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB359619342DFA002F9938 /* VoiceSearchLoading002_ios7@2x.png */; }; - ABCB35DB19342DFA002F9938 /* VoiceSearchLoading003@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB359719342DFA002F9938 /* VoiceSearchLoading003@2x.png */; }; - ABCB35DC19342DFA002F9938 /* VoiceSearchLoading003_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB359819342DFA002F9938 /* VoiceSearchLoading003_ios7@2x.png */; }; - ABCB35DD19342DFA002F9938 /* VoiceSearchLoading004@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB359919342DFA002F9938 /* VoiceSearchLoading004@2x.png */; }; - ABCB35DE19342DFA002F9938 /* VoiceSearchLoading004_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB359A19342DFA002F9938 /* VoiceSearchLoading004_ios7@2x.png */; }; - ABCB35DF19342DFA002F9938 /* VoiceSearchLoading005@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB359B19342DFA002F9938 /* VoiceSearchLoading005@2x.png */; }; - ABCB35E019342DFA002F9938 /* VoiceSearchLoading005_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB359C19342DFA002F9938 /* VoiceSearchLoading005_ios7@2x.png */; }; - ABCB35E119342DFA002F9938 /* VoiceSearchLoading006@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB359D19342DFA002F9938 /* VoiceSearchLoading006@2x.png */; }; - ABCB35E219342DFA002F9938 /* VoiceSearchLoading006_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB359E19342DFA002F9938 /* VoiceSearchLoading006_ios7@2x.png */; }; - ABCB35E319342DFA002F9938 /* VoiceSearchLoading007@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB359F19342DFA002F9938 /* VoiceSearchLoading007@2x.png */; }; - ABCB35E419342DFA002F9938 /* VoiceSearchLoading007_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB35A019342DFA002F9938 /* VoiceSearchLoading007_ios7@2x.png */; }; - ABCB35E519342DFA002F9938 /* VoiceSearchLoading008@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB35A119342DFA002F9938 /* VoiceSearchLoading008@2x.png */; }; - ABCB35E619342DFA002F9938 /* VoiceSearchLoading008_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB35A219342DFA002F9938 /* VoiceSearchLoading008_ios7@2x.png */; }; - ABCB35E719342DFA002F9938 /* VoiceSearchLoading009@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB35A319342DFA002F9938 /* VoiceSearchLoading009@2x.png */; }; - ABCB35E819342DFA002F9938 /* VoiceSearchLoading009_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB35A419342DFA002F9938 /* VoiceSearchLoading009_ios7@2x.png */; }; - ABCB35E919342DFA002F9938 /* VoiceSearchLoading010@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB35A519342DFA002F9938 /* VoiceSearchLoading010@2x.png */; }; - ABCB35EA19342DFA002F9938 /* VoiceSearchLoading010_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB35A619342DFA002F9938 /* VoiceSearchLoading010_ios7@2x.png */; }; - ABCB35EB19342DFA002F9938 /* VoiceSearchOff.wav in Resources */ = {isa = PBXBuildFile; fileRef = ABCB35A719342DFA002F9938 /* VoiceSearchOff.wav */; }; - ABCB35EC19342DFA002F9938 /* VoiceSearchOn.wav in Resources */ = {isa = PBXBuildFile; fileRef = ABCB35A819342DFA002F9938 /* VoiceSearchOn.wav */; }; - ABCB35ED19342DFA002F9938 /* VoiceSearchStartBtn@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB35A919342DFA002F9938 /* VoiceSearchStartBtn@2x.png */; }; - ABCB35EE19342DFA002F9938 /* VoiceSearchStartBtnHL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABCB35AA19342DFA002F9938 /* VoiceSearchStartBtnHL@2x.png */; }; - ABE83CC61937DD5D00BBF653 /* XHMoreExpressionShopsTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = ABE83CC41937DD5D00BBF653 /* XHMoreExpressionShopsTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; - ABE83CC71937DD5D00BBF653 /* XHMoreExpressionShopsTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = ABE83CC51937DD5D00BBF653 /* XHMoreExpressionShopsTableViewCell.m */; }; - ABE83CC81937DD5D00BBF653 /* XHMoreExpressionShopsTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = ABE83CC51937DD5D00BBF653 /* XHMoreExpressionShopsTableViewCell.m */; }; - ABE83CCD1937E00E00BBF653 /* EmotionDownload@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABE83CCA1937E00E00BBF653 /* EmotionDownload@2x.png */; }; - ABE83CCE1937E00E00BBF653 /* EmotionListNewTips@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABE83CCB1937E00E00BBF653 /* EmotionListNewTips@2x.png */; }; - ABE83CCF1937E00E00BBF653 /* GreenBtn@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABE83CCC1937E00E00BBF653 /* GreenBtn@2x.png */; }; - ABE83CD21937E4FF00BBF653 /* EmoStoreDownloadBtn@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABE83CD01937E4FF00BBF653 /* EmoStoreDownloadBtn@2x.png */; }; - ABE83CD31937E4FF00BBF653 /* EmoStoreDownloadBtnHL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABE83CD11937E4FF00BBF653 /* EmoStoreDownloadBtnHL@2x.png */; }; - ABE83CD51937E57F00BBF653 /* EmotionDownloadComplete@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABE83CD41937E57F00BBF653 /* EmotionDownloadComplete@2x.png */; }; - ABE87CD4192D6D7F00EC1E49 /* AlbumOperateMore@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABE87CD2192D6D7F00EC1E49 /* AlbumOperateMore@2x.png */; }; - ABE87CD5192D6D7F00EC1E49 /* AlbumOperateMoreHL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABE87CD3192D6D7F00EC1E49 /* AlbumOperateMoreHL@2x.png */; }; - ABEC5131193A8497004954E3 /* dgame1.png in Resources */ = {isa = PBXBuildFile; fileRef = ABEC512B193A8497004954E3 /* dgame1.png */; }; - ABEC5132193A8497004954E3 /* dgame2.png in Resources */ = {isa = PBXBuildFile; fileRef = ABEC512C193A8497004954E3 /* dgame2.png */; }; - ABEC5133193A8497004954E3 /* dgame0.png in Resources */ = {isa = PBXBuildFile; fileRef = ABEC512D193A8497004954E3 /* dgame0.png */; }; - ABEC5134193A8497004954E3 /* game1.png in Resources */ = {isa = PBXBuildFile; fileRef = ABEC512E193A8497004954E3 /* game1.png */; }; - ABEC5135193A8497004954E3 /* game2.png in Resources */ = {isa = PBXBuildFile; fileRef = ABEC512F193A8497004954E3 /* game2.png */; }; - ABEC5136193A8497004954E3 /* game3.png in Resources */ = {isa = PBXBuildFile; fileRef = ABEC5130193A8497004954E3 /* game3.png */; }; - ABF9EC0F19324D64003B95DC /* ScanBook@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABF9EC0319324D64003B95DC /* ScanBook@2x.png */; }; - ABF9EC1019324D64003B95DC /* ScanBook_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABF9EC0419324D64003B95DC /* ScanBook_HL@2x.png */; }; - ABF9EC1119324D64003B95DC /* ScanQR1@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABF9EC0519324D64003B95DC /* ScanQR1@2x.png */; }; - ABF9EC1219324D64003B95DC /* ScanQR2@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABF9EC0619324D64003B95DC /* ScanQR2@2x.png */; }; - ABF9EC1319324D64003B95DC /* ScanQR3@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABF9EC0719324D64003B95DC /* ScanQR3@2x.png */; }; - ABF9EC1419324D64003B95DC /* ScanQR4@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABF9EC0819324D64003B95DC /* ScanQR4@2x.png */; }; - ABF9EC1519324D64003B95DC /* ScanQRCode@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABF9EC0919324D64003B95DC /* ScanQRCode@2x.png */; }; - ABF9EC1619324D64003B95DC /* ScanQRCode_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABF9EC0A19324D64003B95DC /* ScanQRCode_HL@2x.png */; }; - ABF9EC1719324D64003B95DC /* ScanStreet@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABF9EC0B19324D64003B95DC /* ScanStreet@2x.png */; }; - ABF9EC1819324D64003B95DC /* ScanStreet_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABF9EC0C19324D64003B95DC /* ScanStreet_HL@2x.png */; }; - ABF9EC1919324D64003B95DC /* ScanWord@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABF9EC0D19324D64003B95DC /* ScanWord@2x.png */; }; - ABF9EC1A19324D64003B95DC /* ScanWord_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = ABF9EC0E19324D64003B95DC /* ScanWord_HL@2x.png */; }; - E1664DC01934789A003F4C5B /* XHAudioPlayerHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = E1664DBF1934789A003F4C5B /* XHAudioPlayerHelper.m */; }; - E1664DC319347916003F4C5B /* XHVoiceCommonHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = E1664DC219347916003F4C5B /* XHVoiceCommonHelper.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 74180BE9190F447100A35C82 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 748244F91908C730008EC388 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 74180BD5190F447100A35C82; - remoteInfo = MessageDisplayFramework; - }; - 748245211908C730008EC388 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 748244F91908C730008EC388 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 748245001908C730008EC388; - remoteInfo = MessageDisplayExample; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 74065FB719123E1C00E1CE95 /* XHShareMenuItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHShareMenuItem.h; sourceTree = ""; }; - 74065FB819123E1C00E1CE95 /* XHShareMenuItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHShareMenuItem.m; sourceTree = ""; }; - 740660B21914CA0000E1CE95 /* XHPhotographyHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHPhotographyHelper.h; sourceTree = ""; }; - 740660B31914CA0000E1CE95 /* XHPhotographyHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHPhotographyHelper.m; sourceTree = ""; }; - 740660BC1914D65600E1CE95 /* XHEmotion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHEmotion.h; sourceTree = ""; }; - 740660BD1914D65600E1CE95 /* XHEmotion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHEmotion.m; sourceTree = ""; }; - 740660CB1914E1F400E1CE95 /* XHEmotionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHEmotionManager.h; sourceTree = ""; }; - 740660CC1914E1F400E1CE95 /* XHEmotionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHEmotionManager.m; sourceTree = ""; }; - 74180BD6190F447100A35C82 /* MessageDisplayFramework.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MessageDisplayFramework.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 74180BD9190F447100A35C82 /* MessageDisplayFramework-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "MessageDisplayFramework-Info.plist"; sourceTree = ""; }; - 74180BDB190F447100A35C82 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - 74180BDD190F447100A35C82 /* MessageDisplayFramework-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MessageDisplayFramework-Prefix.pch"; sourceTree = ""; }; - 74180BE5190F447100A35C82 /* MessageDisplayFrameworkTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MessageDisplayFrameworkTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 74180BEE190F447100A35C82 /* MessageDisplayFrameworkTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "MessageDisplayFrameworkTests-Info.plist"; sourceTree = ""; }; - 74180BF0190F447100A35C82 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - 74180BF2190F447100A35C82 /* MessageDisplayFrameworkTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MessageDisplayFrameworkTests.m; sourceTree = ""; }; - 74180CBB190F526100A35C82 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; - 744FBDC61915EE7400FB4A65 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; - 744FBDC71915EE7400FB4A65 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = ""; }; - 74585F3A191B939800F5E8C8 /* MessageVideoPlay@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MessageVideoPlay@2x.png"; sourceTree = ""; }; - 74585F3C191B999B00F5E8C8 /* XHLocationHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHLocationHelper.h; sourceTree = ""; }; - 74585F3D191B999B00F5E8C8 /* XHLocationHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHLocationHelper.m; sourceTree = ""; }; - 74585FFB191D10CC00F5E8C8 /* XHAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHAnnotation.h; sourceTree = ""; }; - 74585FFC191D10CC00F5E8C8 /* XHAnnotation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHAnnotation.m; sourceTree = ""; }; - 746C88121916B5D6007F9A5E /* face_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "face_HL@2x.png"; sourceTree = ""; }; - 746C88131916B5D6007F9A5E /* face@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "face@2x.png"; sourceTree = ""; }; - 746C88151916B5D6007F9A5E /* keyborad_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyborad_HL@2x.png"; sourceTree = ""; }; - 746C88161916B5D6007F9A5E /* keyborad@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyborad@2x.png"; sourceTree = ""; }; - 746C88171916B5D6007F9A5E /* multiMedia_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "multiMedia_HL@2x.png"; sourceTree = ""; }; - 746C88181916B5D6007F9A5E /* multiMedia@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "multiMedia@2x.png"; sourceTree = ""; }; - 746C88191916B5D6007F9A5E /* voice_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "voice_HL@2x.png"; sourceTree = ""; }; - 746C881A1916B5D6007F9A5E /* voice@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "voice@2x.png"; sourceTree = ""; }; - 746C88241916B5EE007F9A5E /* input-bar-background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-bar-background.png"; sourceTree = ""; }; - 746C88251916B5EE007F9A5E /* input-bar-background@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-bar-background@2x.png"; sourceTree = ""; }; - 746C88261916B5EE007F9A5E /* input-bar-flat.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-bar-flat.png"; sourceTree = ""; }; - 746C88271916B5EE007F9A5E /* input-bar-flat@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-bar-flat@2x.png"; sourceTree = ""; }; - 746C88281916B5EE007F9A5E /* input-field-cover.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-field-cover.png"; sourceTree = ""; }; - 746C88291916B5EE007F9A5E /* input-field-cover@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-field-cover@2x.png"; sourceTree = ""; }; - 746C88301916B5FE007F9A5E /* weChatBubble_Receiving_Cavern@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weChatBubble_Receiving_Cavern@2x.png"; sourceTree = ""; }; - 746C88311916B5FE007F9A5E /* weChatBubble_Receiving_Solid@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weChatBubble_Receiving_Solid@2x.png"; sourceTree = ""; }; - 746C88321916B5FE007F9A5E /* weChatBubble_Sending_Cavern@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weChatBubble_Sending_Cavern@2x.png"; sourceTree = ""; }; - 746C88331916B5FE007F9A5E /* weChatBubble_Sending_Solid@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weChatBubble_Sending_Solid@2x.png"; sourceTree = ""; }; - 746C88381916B607007F9A5E /* ReceiverVoiceNodePlaying@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying@2x.png"; sourceTree = ""; }; - 746C88391916B607007F9A5E /* ReceiverVoiceNodePlaying000@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying000@2x.png"; sourceTree = ""; }; - 746C883A1916B607007F9A5E /* ReceiverVoiceNodePlaying001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying001@2x.png"; sourceTree = ""; }; - 746C883B1916B607007F9A5E /* ReceiverVoiceNodePlaying002@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying002@2x.png"; sourceTree = ""; }; - 746C883C1916B607007F9A5E /* ReceiverVoiceNodePlaying003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying003@2x.png"; sourceTree = ""; }; - 746C883D1916B607007F9A5E /* SenderVoiceNodePlaying@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying@2x.png"; sourceTree = ""; }; - 746C883E1916B607007F9A5E /* SenderVoiceNodePlaying000@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying000@2x.png"; sourceTree = ""; }; - 746C883F1916B607007F9A5E /* SenderVoiceNodePlaying001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying001@2x.png"; sourceTree = ""; }; - 746C88401916B607007F9A5E /* SenderVoiceNodePlaying002@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying002@2x.png"; sourceTree = ""; }; - 746C88411916B607007F9A5E /* SenderVoiceNodePlaying003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying003@2x.png"; sourceTree = ""; }; - 746C884C1916B612007F9A5E /* sharemore_friendcard@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_friendcard@2x.png"; sourceTree = ""; }; - 746C884D1916B612007F9A5E /* sharemore_location@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_location@2x.png"; sourceTree = ""; }; - 746C884E1916B612007F9A5E /* sharemore_myfav@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_myfav@2x.png"; sourceTree = ""; }; - 746C884F1916B612007F9A5E /* sharemore_openapi@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_openapi@2x.png"; sourceTree = ""; }; - 746C88501916B612007F9A5E /* sharemore_pic@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_pic@2x.png"; sourceTree = ""; }; - 746C88511916B612007F9A5E /* sharemore_video@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_video@2x.png"; sourceTree = ""; }; - 746C88521916B612007F9A5E /* sharemore_videovoip@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_videovoip@2x.png"; sourceTree = ""; }; - 746C88531916B612007F9A5E /* sharemore_voiceinput@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_voiceinput@2x.png"; sourceTree = ""; }; - 746C88541916B612007F9A5E /* sharemore_voipvoice@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_voipvoice@2x.png"; sourceTree = ""; }; - 746C88551916B612007F9A5E /* sharemore_wxtalk@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_wxtalk@2x.png"; sourceTree = ""; }; - 746C88611916B62D007F9A5E /* section0_emotion0@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion0@2x.png"; sourceTree = ""; }; - 746C88621916B62D007F9A5E /* section0_emotion1@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion1@2x.png"; sourceTree = ""; }; - 746C88631916B62D007F9A5E /* section0_emotion2@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion2@2x.png"; sourceTree = ""; }; - 746C88641916B62D007F9A5E /* section0_emotion3@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion3@2x.png"; sourceTree = ""; }; - 746C88651916B62D007F9A5E /* section0_emotion4@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion4@2x.png"; sourceTree = ""; }; - 746C88661916B62D007F9A5E /* section0_emotion5@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion5@2x.png"; sourceTree = ""; }; - 746C88671916B62D007F9A5E /* section0_emotion6@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion6@2x.png"; sourceTree = ""; }; - 746C88681916B62D007F9A5E /* section0_emotion7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion7@2x.png"; sourceTree = ""; }; - 746C88691916B62D007F9A5E /* section0_emotion8@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion8@2x.png"; sourceTree = ""; }; - 746C886A1916B62D007F9A5E /* section0_emotion9@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion9@2x.png"; sourceTree = ""; }; - 746C886B1916B62D007F9A5E /* section0_emotion10@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion10@2x.png"; sourceTree = ""; }; - 746C886C1916B62D007F9A5E /* section0_emotion11@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion11@2x.png"; sourceTree = ""; }; - 746C886D1916B62D007F9A5E /* section0_emotion12@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion12@2x.png"; sourceTree = ""; }; - 746C886E1916B62D007F9A5E /* section0_emotion13@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion13@2x.png"; sourceTree = ""; }; - 746C886F1916B62D007F9A5E /* section0_emotion14@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion14@2x.png"; sourceTree = ""; }; - 746C88701916B62D007F9A5E /* section0_emotion15@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion15@2x.png"; sourceTree = ""; }; - 746C88811916B64E007F9A5E /* Fav_Cell_Loc@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Fav_Cell_Loc@2x.png"; sourceTree = ""; }; - 746C89151917F691007F9A5E /* XHBubblePhotoImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHBubblePhotoImageView.h; sourceTree = ""; }; - 746C89161917F691007F9A5E /* XHBubblePhotoImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHBubblePhotoImageView.m; sourceTree = ""; }; - 746C89171917F691007F9A5E /* XHMessageBubbleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageBubbleView.h; sourceTree = ""; }; - 746C89181917F691007F9A5E /* XHMessageBubbleView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageBubbleView.m; sourceTree = ""; }; - 746C89191917F691007F9A5E /* XHMessageDisplayTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageDisplayTextView.h; sourceTree = ""; }; - 746C891A1917F691007F9A5E /* XHMessageDisplayTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageDisplayTextView.m; sourceTree = ""; }; - 746C891B1917F691007F9A5E /* XHMessageTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageTableView.h; sourceTree = ""; }; - 746C891C1917F691007F9A5E /* XHMessageTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageTableView.m; sourceTree = ""; }; - 746C891D1917F691007F9A5E /* XHMessageTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageTableViewCell.h; sourceTree = ""; }; - 746C891E1917F691007F9A5E /* XHMessageTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageTableViewCell.m; sourceTree = ""; }; - 746C89201917F691007F9A5E /* XHMessageInputView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageInputView.h; sourceTree = ""; }; - 746C89211917F691007F9A5E /* XHMessageInputView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageInputView.m; sourceTree = ""; }; - 746C89221917F691007F9A5E /* XHMessageTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageTextView.h; sourceTree = ""; }; - 746C89231917F691007F9A5E /* XHMessageTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageTextView.m; sourceTree = ""; }; - 746C89251917F691007F9A5E /* XHEmotionCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHEmotionCollectionViewCell.h; sourceTree = ""; }; - 746C89261917F691007F9A5E /* XHEmotionCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHEmotionCollectionViewCell.m; sourceTree = ""; }; - 746C89271917F691007F9A5E /* XHEmotionCollectionViewFlowLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHEmotionCollectionViewFlowLayout.h; sourceTree = ""; }; - 746C89281917F691007F9A5E /* XHEmotionCollectionViewFlowLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHEmotionCollectionViewFlowLayout.m; sourceTree = ""; }; - 746C89291917F691007F9A5E /* XHEmotionManagerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHEmotionManagerView.h; sourceTree = ""; }; - 746C892A1917F691007F9A5E /* XHEmotionManagerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHEmotionManagerView.m; sourceTree = ""; }; - 746C892B1917F691007F9A5E /* XHEmotionSectionBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHEmotionSectionBar.h; sourceTree = ""; }; - 746C892C1917F691007F9A5E /* XHEmotionSectionBar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHEmotionSectionBar.m; sourceTree = ""; }; - 746C892D1917F691007F9A5E /* XHShareMenuView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHShareMenuView.h; sourceTree = ""; }; - 746C892E1917F691007F9A5E /* XHShareMenuView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHShareMenuView.m; sourceTree = ""; }; - 746C89591917F7B4007F9A5E /* XHMessageTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageTableViewController.h; sourceTree = ""; }; - 746C895A1917F7B4007F9A5E /* XHMessageTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageTableViewController.m; sourceTree = ""; }; - 746C89761917F8B2007F9A5E /* XHBaseNavigationController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHBaseNavigationController.h; sourceTree = ""; }; - 746C89771917F8B2007F9A5E /* XHBaseNavigationController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHBaseNavigationController.m; sourceTree = ""; }; - 746C897B1917F8C5007F9A5E /* XHBaseTabBarController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHBaseTabBarController.h; sourceTree = ""; }; - 746C897C1917F8C5007F9A5E /* XHBaseTabBarController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHBaseTabBarController.m; sourceTree = ""; }; - 746C89851917F8EA007F9A5E /* XHBaseTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHBaseTableViewController.h; sourceTree = ""; }; - 746C89861917F8EA007F9A5E /* XHBaseTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHBaseTableViewController.m; sourceTree = ""; }; - 748245011908C730008EC388 /* MessageDisplayExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MessageDisplayExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 748245041908C730008EC388 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - 748245061908C730008EC388 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; - 748245081908C730008EC388 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; - 7482450C1908C730008EC388 /* MessageDisplayExample-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "MessageDisplayExample-Info.plist"; sourceTree = ""; }; - 7482450E1908C730008EC388 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - 748245101908C730008EC388 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 748245121908C730008EC388 /* MessageDisplayExample-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "MessageDisplayExample-Prefix.pch"; sourceTree = ""; }; - 748245131908C730008EC388 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - 748245141908C730008EC388 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - 7482451C1908C730008EC388 /* MessageDisplayExampleTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MessageDisplayExampleTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 7482451D1908C730008EC388 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - 748245251908C730008EC388 /* MessageDisplayExampleTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "MessageDisplayExampleTests-Info.plist"; sourceTree = ""; }; - 748245271908C730008EC388 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - 748245291908C730008EC388 /* MessageDisplayExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MessageDisplayExampleTests.m; sourceTree = ""; }; - 7482456919090C04008EC388 /* XHMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = XHMessage.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 7482456A19090C04008EC388 /* XHMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = XHMessage.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 7482457519090D6B008EC388 /* XHMessageModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; lineEnding = 0; path = XHMessageModel.h; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objcpp; }; - 7482457919091BBA008EC388 /* XHMacro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMacro.h; sourceTree = ""; }; - 74901A3D191D3B1C0049AFF9 /* XHProfileTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHProfileTableViewController.h; sourceTree = ""; }; - 74901A3E191D3B1C0049AFF9 /* XHProfileTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHProfileTableViewController.m; sourceTree = ""; }; - 74901A43191D4CD30049AFF9 /* XHBaseViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHBaseViewController.h; sourceTree = ""; }; - 74901A44191D4CD30049AFF9 /* XHBaseViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHBaseViewController.m; sourceTree = ""; }; - 74BBB01E190B8E9500093577 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/InfoPlist.strings"; sourceTree = ""; }; - 74BBB01F190B8E9500093577 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/InfoPlist.strings"; sourceTree = ""; }; - 74BBB021190B8EAB00093577 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/MessageDisplayKitString.strings; sourceTree = ""; }; - 74BBB023190B8EAD00093577 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MessageDisplayKitString.strings"; sourceTree = ""; }; - 74BBB02A190BE8C400093577 /* XHMessageRootViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageRootViewController.h; sourceTree = ""; }; - 74BBB02B190BE8C400093577 /* XHMessageRootViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageRootViewController.m; sourceTree = ""; }; - 74BBB030190C28CD00093577 /* XHDemoWeChatMessageTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHDemoWeChatMessageTableViewController.h; sourceTree = ""; }; - 74BBB031190C28CD00093577 /* XHDemoWeChatMessageTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = XHDemoWeChatMessageTableViewController.m; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.objc; }; - 74C3E7CF192919360053F4E1 /* XHAlbumTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHAlbumTableViewCell.h; sourceTree = ""; }; - 74C3E7D0192919360053F4E1 /* XHAlbumTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHAlbumTableViewCell.m; sourceTree = ""; }; - 74C3E7D4192919930053F4E1 /* XHAlbumRichTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHAlbumRichTextView.h; sourceTree = ""; }; - 74C3E7D5192919930053F4E1 /* XHAlbumRichTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHAlbumRichTextView.m; sourceTree = ""; }; - 74C3E7D919291A1A0053F4E1 /* XHAlbum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHAlbum.h; sourceTree = ""; }; - 74C3E7DA19291A1A0053F4E1 /* XHAlbum.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHAlbum.m; sourceTree = ""; }; - 74C3E7E419291F1B0053F4E1 /* AlbumHeaderBackgrounImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "AlbumHeaderBackgrounImage@2x.png"; sourceTree = ""; }; - 74D1C5C4190DFC1D003B1BCA /* XHFoundationCommon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHFoundationCommon.h; sourceTree = ""; }; - 74D1C5C5190DFC1D003B1BCA /* XHFoundationCommon.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHFoundationCommon.m; sourceTree = ""; }; - 74E5E9871921317B0084BCFA /* XHVoiceRecordHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHVoiceRecordHelper.h; sourceTree = ""; }; - 74E5E9881921317B0084BCFA /* XHVoiceRecordHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHVoiceRecordHelper.m; sourceTree = ""; }; - 74E5E9931921E90A0084BCFA /* XHVoiceRecordHUD.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHVoiceRecordHUD.h; sourceTree = ""; }; - 74E5E9941921E90A0084BCFA /* XHVoiceRecordHUD.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHVoiceRecordHUD.m; sourceTree = ""; }; - 74E5E9981921EC8C0084BCFA /* VoiceBtn_Black@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceBtn_Black@2x.png"; sourceTree = ""; }; - 74E5E9991921EC8C0084BCFA /* VoiceBtn_BlackHL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceBtn_BlackHL@2x.png"; sourceTree = ""; }; - 74E5E99F1921F7710084BCFA /* RecordingSignal001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal001@2x.png"; sourceTree = ""; }; - 74E5E9A01921F7710084BCFA /* RecordingSignal002@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal002@2x.png"; sourceTree = ""; }; - 74E5E9A11921F7710084BCFA /* RecordingSignal003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal003@2x.png"; sourceTree = ""; }; - 74E5E9A21921F7710084BCFA /* RecordingSignal004@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal004@2x.png"; sourceTree = ""; }; - 74E5E9A31921F7710084BCFA /* RecordingSignal005@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal005@2x.png"; sourceTree = ""; }; - 74E5E9A41921F7710084BCFA /* RecordingSignal006@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal006@2x.png"; sourceTree = ""; }; - 74E5E9A51921F7710084BCFA /* RecordingSignal007@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal007@2x.png"; sourceTree = ""; }; - 74E5E9A61921F7710084BCFA /* RecordingSignal008@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal008@2x.png"; sourceTree = ""; }; - 74E5E9A71921F7710084BCFA /* RecordingBkg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingBkg@2x.png"; sourceTree = ""; }; - 74E5E9A81921F7710084BCFA /* RecordCancel@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordCancel@2x.png"; sourceTree = ""; }; - 74E5EAA71924FFBE0084BCFA /* NSMutableAttributedString+Helper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSMutableAttributedString+Helper.h"; sourceTree = ""; }; - 74E5EAA81924FFBE0084BCFA /* NSMutableAttributedString+Helper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSMutableAttributedString+Helper.m"; sourceTree = ""; }; - 74E5EAA91924FFBE0084BCFA /* SECompatibility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SECompatibility.h; sourceTree = ""; }; - 74E5EAAA1924FFBE0084BCFA /* SECompatibility.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SECompatibility.m; sourceTree = ""; }; - 74E5EAAB1924FFBE0084BCFA /* SEConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SEConstants.h; sourceTree = ""; }; - 74E5EAAC1924FFBE0084BCFA /* SEConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SEConstants.m; sourceTree = ""; }; - 74E5EAAD1924FFBE0084BCFA /* SELineLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SELineLayout.h; sourceTree = ""; }; - 74E5EAAE1924FFBE0084BCFA /* SELineLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SELineLayout.m; sourceTree = ""; }; - 74E5EAAF1924FFBE0084BCFA /* SELinkText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SELinkText.h; sourceTree = ""; }; - 74E5EAB01924FFBE0084BCFA /* SELinkText.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SELinkText.m; sourceTree = ""; }; - 74E5EAB11924FFBE0084BCFA /* SESelectionGrabber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SESelectionGrabber.h; sourceTree = ""; }; - 74E5EAB21924FFBE0084BCFA /* SESelectionGrabber.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SESelectionGrabber.m; sourceTree = ""; }; - 74E5EAB31924FFBE0084BCFA /* SETextAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextAttachment.h; sourceTree = ""; }; - 74E5EAB41924FFBE0084BCFA /* SETextAttachment.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextAttachment.m; sourceTree = ""; }; - 74E5EAB51924FFBE0084BCFA /* SETextEditingCaret.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextEditingCaret.h; sourceTree = ""; }; - 74E5EAB61924FFBE0084BCFA /* SETextEditingCaret.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextEditingCaret.m; sourceTree = ""; }; - 74E5EAB71924FFBE0084BCFA /* SETextGeometry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextGeometry.h; sourceTree = ""; }; - 74E5EAB81924FFBE0084BCFA /* SETextGeometry.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextGeometry.m; sourceTree = ""; }; - 74E5EAB91924FFBE0084BCFA /* SETextInput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextInput.h; sourceTree = ""; }; - 74E5EABA1924FFBE0084BCFA /* SETextInput.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextInput.m; sourceTree = ""; }; - 74E5EABB1924FFBE0084BCFA /* SETextLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextLayout.h; sourceTree = ""; }; - 74E5EABC1924FFBE0084BCFA /* SETextLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextLayout.m; sourceTree = ""; }; - 74E5EABD1924FFBE0084BCFA /* SETextMagnifierCaret.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextMagnifierCaret.h; sourceTree = ""; }; - 74E5EABE1924FFBE0084BCFA /* SETextMagnifierCaret.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextMagnifierCaret.m; sourceTree = ""; }; - 74E5EABF1924FFBE0084BCFA /* SETextMagnifierRanged.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextMagnifierRanged.h; sourceTree = ""; }; - 74E5EAC01924FFBE0084BCFA /* SETextMagnifierRanged.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextMagnifierRanged.m; sourceTree = ""; }; - 74E5EAC11924FFBE0084BCFA /* SETextSelection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextSelection.h; sourceTree = ""; }; - 74E5EAC21924FFBE0084BCFA /* SETextSelection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextSelection.m; sourceTree = ""; }; - 74E5EAC31924FFBE0084BCFA /* SETextSelectionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextSelectionView.h; sourceTree = ""; }; - 74E5EAC41924FFBE0084BCFA /* SETextSelectionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextSelectionView.m; sourceTree = ""; }; - 74E5EAC51924FFBE0084BCFA /* SETextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextView.h; sourceTree = ""; }; - 74E5EAC61924FFBE0084BCFA /* SETextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextView.m; sourceTree = ""; }; - 74E9003119278F5C00D37C81 /* XHContactTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHContactTableViewController.h; sourceTree = ""; }; - 74E9003219278F5C00D37C81 /* XHContactTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHContactTableViewController.m; sourceTree = ""; }; - 74E9003619278F6700D37C81 /* XHDiscoverTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHDiscoverTableViewController.h; sourceTree = ""; }; - 74E9003719278F6700D37C81 /* XHDiscoverTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHDiscoverTableViewController.m; sourceTree = ""; }; - 74E9004F1927940000D37C81 /* ff_IconBottle@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ff_IconBottle@2x.png"; sourceTree = ""; }; - 74E900501927940000D37C81 /* ff_IconLocationService@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ff_IconLocationService@2x.png"; sourceTree = ""; }; - 74E900511927940000D37C81 /* ff_IconQRCode@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ff_IconQRCode@2x.png"; sourceTree = ""; }; - 74E900521927940000D37C81 /* ff_IconShake@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ff_IconShake@2x.png"; sourceTree = ""; }; - 74E900531927940000D37C81 /* ff_IconShowAlbum@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ff_IconShowAlbum@2x.png"; sourceTree = ""; }; - 74E900541927940000D37C81 /* MoreGame@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MoreGame@2x.png"; sourceTree = ""; }; - 74E900551927940000D37C81 /* IMG_1555.MOV */ = {isa = PBXFileReference; lastKnownFileType = video.quicktime; path = IMG_1555.MOV; sourceTree = ""; }; - 74E900581927940000D37C81 /* Contact@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Contact@2x.png"; sourceTree = ""; }; - 74E900591927940000D37C81 /* Profile@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Profile@2x.png"; sourceTree = ""; }; - 74E9005A1927940000D37C81 /* SNS@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SNS@2x.png"; sourceTree = ""; }; - 74E9005B1927940000D37C81 /* tabbarBkg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tabbarBkg@2x.png"; sourceTree = ""; }; - 74E9005C1927940000D37C81 /* WeChat@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "WeChat@2x.png"; sourceTree = ""; }; - 74E9005D1927940000D37C81 /* TableViewBackgroundImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "TableViewBackgroundImage@2x.png"; sourceTree = ""; }; - 74E900941927A81500D37C81 /* bottleButtonFish@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "bottleButtonFish@2x.png"; sourceTree = ""; }; - 74E900951927A81500D37C81 /* bottleButtonMine@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "bottleButtonMine@2x.png"; sourceTree = ""; }; - 74E900961927A81500D37C81 /* bottleButtonThrow@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "bottleButtonThrow@2x.png"; sourceTree = ""; }; - 74E900971927A81500D37C81 /* bottleNightBkg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "bottleNightBkg@2x.png"; sourceTree = ""; }; - 74E9009C1927A9C900D37C81 /* bottleBkg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "bottleBkg@2x.png"; sourceTree = ""; }; - 74E9009D1927A9C900D37C81 /* bottleBkgSpotLight@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "bottleBkgSpotLight@2x.png"; sourceTree = ""; }; - 74E9009E1927A9C900D37C81 /* bottleBoard@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "bottleBoard@2x.png"; sourceTree = ""; }; - 74E900A21927A9C900D37C81 /* bottleRecord@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "bottleRecord@2x.png"; sourceTree = ""; }; - 74E900A31927A9C900D37C81 /* bottleWriting@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "bottleWriting@2x.png"; sourceTree = ""; }; - 74E900A41927A9C900D37C81 /* bottleStarfish@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "bottleStarfish@2x.png"; sourceTree = ""; }; - 74E900A81927ABF800D37C81 /* fishwater@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "fishwater@2x.png"; sourceTree = ""; }; - 74E900A91927ABF800D37C81 /* fishwater2@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "fishwater2@2x.png"; sourceTree = ""; }; - 74E900AA1927ABF800D37C81 /* fishwater3@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "fishwater3@2x.png"; sourceTree = ""; }; - 74E900B11928F3D100D37C81 /* XHStoreManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHStoreManager.h; sourceTree = ""; }; - 74E900B21928F3D100D37C81 /* XHStoreManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHStoreManager.m; sourceTree = ""; }; - 7D06CA6F192B3D9B00DF8C04 /* XHBaseTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHBaseTableViewCell.h; sourceTree = ""; }; - 7D06CA70192B3D9B00DF8C04 /* XHBaseTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHBaseTableViewCell.m; sourceTree = ""; }; - 7D08C21D192C7A5E00B26D93 /* MeIcon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MeIcon@2x.png"; sourceTree = ""; }; - 7D08C21F192CA06B00B26D93 /* CoreMedia.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreMedia.framework; path = System/Library/Frameworks/CoreMedia.framework; sourceTree = SDKROOT; }; - 7D0AAFE41943179A00988FC3 /* XHPopMenu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHPopMenu.h; sourceTree = ""; }; - 7D0AAFE51943179A00988FC3 /* XHPopMenu.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHPopMenu.m; sourceTree = ""; }; - 7D0AAFE9194319A500988FC3 /* XHPopMenuItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHPopMenuItem.h; sourceTree = ""; }; - 7D0AAFEA194319A500988FC3 /* XHPopMenuItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHPopMenuItem.m; sourceTree = ""; }; - 7D0AAFEE19431A9400988FC3 /* XHPopMenuItemView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHPopMenuItemView.h; sourceTree = ""; }; - 7D0AAFEF19431A9400988FC3 /* XHPopMenuItemView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHPopMenuItemView.m; sourceTree = ""; }; - 7D0AAFF41943231400988FC3 /* MoreFunctionFrame@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MoreFunctionFrame@2x.png"; sourceTree = ""; }; - 7D13FC43192C4F4000A23413 /* XHImageViewer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHImageViewer.h; sourceTree = ""; }; - 7D13FC44192C4F4000A23413 /* XHImageViewer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHImageViewer.m; sourceTree = ""; }; - 7D13FC45192C4F4000A23413 /* XHViewState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHViewState.h; sourceTree = ""; }; - 7D13FC46192C4F4000A23413 /* XHViewState.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHViewState.m; sourceTree = ""; }; - 7D13FC47192C4F4000A23413 /* XHZoomingImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHZoomingImageView.h; sourceTree = ""; }; - 7D13FC48192C4F4000A23413 /* XHZoomingImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHZoomingImageView.m; sourceTree = ""; }; - 7D149FF8192DEB5D004B4D3B /* XHContactTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHContactTableViewCell.h; sourceTree = ""; }; - 7D149FF9192DEB5D004B4D3B /* XHContactTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHContactTableViewCell.m; sourceTree = ""; }; - 7D149FFD192DF2CA004B4D3B /* XHFoundationMacro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHFoundationMacro.h; sourceTree = ""; }; - 7D149FFF192DF30C004B4D3B /* XHUIKitMacro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHUIKitMacro.h; sourceTree = ""; }; - 7D14A002192EF8FD004B4D3B /* XHContactDetailTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHContactDetailTableViewController.h; sourceTree = ""; }; - 7D14A003192EF8FD004B4D3B /* XHContactDetailTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHContactDetailTableViewController.m; sourceTree = ""; }; - 7D14A007192EFD33004B4D3B /* XHContactView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHContactView.h; sourceTree = ""; }; - 7D14A008192EFD33004B4D3B /* XHContactView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHContactView.m; sourceTree = ""; }; - 7D20B9B5196295660043A2BA /* CoreVideo.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreVideo.framework; path = System/Library/Frameworks/CoreVideo.framework; sourceTree = SDKROOT; }; - 7D20B9B7196295730043A2BA /* Accelerate.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Accelerate.framework; path = System/Library/Frameworks/Accelerate.framework; sourceTree = SDKROOT; }; - 7D23E40D192C58E300B717B7 /* MediaPlayer.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MediaPlayer.framework; path = System/Library/Frameworks/MediaPlayer.framework; sourceTree = SDKROOT; }; - 7D23E40F192C58F000B717B7 /* AudioToolbox.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioToolbox.framework; path = System/Library/Frameworks/AudioToolbox.framework; sourceTree = SDKROOT; }; - 7D23E411192C590900B717B7 /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; }; - 7D23E413192C590F00B717B7 /* AVFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AVFoundation.framework; path = System/Library/Frameworks/AVFoundation.framework; sourceTree = SDKROOT; }; - 7D23E415192C591600B717B7 /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; - 7D23E417192C594800B717B7 /* CoreText.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreText.framework; path = System/Library/Frameworks/CoreText.framework; sourceTree = SDKROOT; }; - 7DA2EC3319455EF000B009FC /* MLLetterIndexNavigationItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MLLetterIndexNavigationItem.h; sourceTree = ""; }; - 7DA2EC3419455EF000B009FC /* MLLetterIndexNavigationItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MLLetterIndexNavigationItem.m; sourceTree = ""; }; - 7DA2EC3519455EF000B009FC /* MLLetterIndexNavigationView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MLLetterIndexNavigationView.h; sourceTree = ""; }; - 7DA2EC3619455EF000B009FC /* MLLetterIndexNavigationView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MLLetterIndexNavigationView.m; sourceTree = ""; }; - 7DA2EC3819455EF100B009FC /* MultiSelectedPanel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultiSelectedPanel.h; sourceTree = ""; }; - 7DA2EC3919455EF100B009FC /* MultiSelectedPanel.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MultiSelectedPanel.m; sourceTree = ""; }; - 7DA2EC3A19455EF100B009FC /* MultiSelectedPanel.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MultiSelectedPanel.xib; sourceTree = ""; }; - 7DA2EC3B19455EF100B009FC /* MultiSelectItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultiSelectItem.h; sourceTree = ""; }; - 7DA2EC3C19455EF100B009FC /* MultiSelectItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MultiSelectItem.m; sourceTree = ""; }; - 7DA2EC3D19455EF100B009FC /* MultiSelectSearchResultTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultiSelectSearchResultTableViewCell.h; sourceTree = ""; }; - 7DA2EC3E19455EF100B009FC /* MultiSelectSearchResultTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MultiSelectSearchResultTableViewCell.m; sourceTree = ""; }; - 7DA2EC3F19455EF100B009FC /* MultiSelectSearchResultTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MultiSelectSearchResultTableViewCell.xib; sourceTree = ""; }; - 7DA2EC4019455EF100B009FC /* MultiSelectTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultiSelectTableViewCell.h; sourceTree = ""; }; - 7DA2EC4119455EF100B009FC /* MultiSelectTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MultiSelectTableViewCell.m; sourceTree = ""; }; - 7DA2EC4219455EF100B009FC /* MultiSelectTableViewCell.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MultiSelectTableViewCell.xib; sourceTree = ""; }; - 7DA2EC4319455EF100B009FC /* MultiSelectViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultiSelectViewController.h; sourceTree = ""; }; - 7DA2EC4419455EF100B009FC /* MultiSelectViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MultiSelectViewController.m; sourceTree = ""; }; - 7DA2EC4519455EF100B009FC /* UIView+Convenience.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+Convenience.h"; sourceTree = ""; }; - 7DA2EC4619455EF100B009FC /* UIView+Convenience.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+Convenience.m"; sourceTree = ""; }; - 7DA2EC7C19455F5700B009FC /* AddGroupMemberBtn@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "AddGroupMemberBtn@2x.png"; sourceTree = ""; }; - 7DA2EC7D19455F5700B009FC /* AddGroupMemberBtnHL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "AddGroupMemberBtnHL@2x.png"; sourceTree = ""; }; - 7DA2EC7F19455F5700B009FC /* CellBlueSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "CellBlueSelected@2x.png"; sourceTree = ""; }; - 7DA2EC8019455F5700B009FC /* CellGraySelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "CellGraySelected@2x.png"; sourceTree = ""; }; - 7DA2EC8119455F5700B009FC /* CellNotSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "CellNotSelected@2x.png"; sourceTree = ""; }; - 7DA2EC8219455F5700B009FC /* CellRedSelected@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "CellRedSelected@2x.png"; sourceTree = ""; }; - 7DA2EC8319455F5700B009FC /* ContactsPanelDotRect@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ContactsPanelDotRect@2x.png"; sourceTree = ""; }; - 7DA2EC8419455F5700B009FC /* MultiSelectedPanelBkg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MultiSelectedPanelBkg@2x.png"; sourceTree = ""; }; - 7DA2EC8519455F5700B009FC /* MultiSelectedPanelConfirmBtnbKG@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MultiSelectedPanelConfirmBtnbKG@2x.png"; sourceTree = ""; }; - 7DA2EC8619455F5700B009FC /* SearchIcon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SearchIcon@2x.png"; sourceTree = ""; }; - 7DA2EC93194577EA00B009FC /* FLAnimatedImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FLAnimatedImage.h; sourceTree = ""; }; - 7DA2EC94194577EA00B009FC /* FLAnimatedImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FLAnimatedImage.m; sourceTree = ""; }; - 7DA2EC95194577EA00B009FC /* FLAnimatedImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FLAnimatedImageView.h; sourceTree = ""; }; - 7DA2EC96194577EA00B009FC /* FLAnimatedImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FLAnimatedImageView.m; sourceTree = ""; }; - 7DA2EC9E19457A2D00B009FC /* emotion1.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion1.gif; sourceTree = ""; }; - 7DA2EC9F19457A2D00B009FC /* emotion10.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion10.gif; sourceTree = ""; }; - 7DA2ECA019457A2D00B009FC /* emotion11.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion11.gif; sourceTree = ""; }; - 7DA2ECA119457A2D00B009FC /* emotion12.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion12.gif; sourceTree = ""; }; - 7DA2ECA219457A2D00B009FC /* emotion13.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion13.gif; sourceTree = ""; }; - 7DA2ECA319457A2D00B009FC /* emotion14.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion14.gif; sourceTree = ""; }; - 7DA2ECA419457A2D00B009FC /* emotion15.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion15.gif; sourceTree = ""; }; - 7DA2ECA519457A2D00B009FC /* emotion16.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion16.gif; sourceTree = ""; }; - 7DA2ECA619457A2D00B009FC /* emotion0.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion0.gif; sourceTree = ""; }; - 7DA2ECA719457A2D00B009FC /* emotion2.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion2.gif; sourceTree = ""; }; - 7DA2ECA819457A2D00B009FC /* emotion3.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion3.gif; sourceTree = ""; }; - 7DA2ECA919457A2D00B009FC /* emotion4.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion4.gif; sourceTree = ""; }; - 7DA2ECAA19457A2D00B009FC /* emotion5.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion5.gif; sourceTree = ""; }; - 7DA2ECAB19457A2D00B009FC /* emotion6.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion6.gif; sourceTree = ""; }; - 7DA2ECAC19457A2D00B009FC /* emotion7.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion7.gif; sourceTree = ""; }; - 7DA2ECAD19457A2D00B009FC /* emotion8.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion8.gif; sourceTree = ""; }; - 7DA2ECAE19457A2D00B009FC /* emotion9.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion9.gif; sourceTree = ""; }; - AB02A9F3192D8DC5004AA23D /* XHBaseSearchTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHBaseSearchTableViewController.h; sourceTree = ""; }; - AB02A9F4192D8DC5004AA23D /* XHBaseSearchTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHBaseSearchTableViewController.m; sourceTree = ""; }; - AB0C4AD01943B6BB00D346FF /* contacts_add_friend@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "contacts_add_friend@2x.png"; sourceTree = ""; }; - AB0C4AD11943B6BB00D346FF /* contacts_add_newmessage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "contacts_add_newmessage@2x.png"; sourceTree = ""; }; - AB0C4AD21943B6BB00D346FF /* contacts_add_photo@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "contacts_add_photo@2x.png"; sourceTree = ""; }; - AB0C4AD31943B6BB00D346FF /* contacts_add_scan@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "contacts_add_scan@2x.png"; sourceTree = ""; }; - AB0C4AD41943B6BB00D346FF /* contacts_add_voip@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "contacts_add_voip@2x.png"; sourceTree = ""; }; - AB3728F1192EC62C0084D7B5 /* XHAlbumTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHAlbumTableViewController.h; sourceTree = ""; }; - AB3728F2192EC62C0084D7B5 /* XHAlbumTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHAlbumTableViewController.m; sourceTree = ""; }; - AB3728F4192EC62C0084D7B5 /* XHBottleViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHBottleViewController.h; sourceTree = ""; }; - AB3728F5192EC62C0084D7B5 /* XHBottleViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHBottleViewController.m; sourceTree = ""; }; - AB3728F7192EC62C0084D7B5 /* XHLocationServiceTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHLocationServiceTableViewController.h; sourceTree = ""; }; - AB3728F8192EC62C0084D7B5 /* XHLocationServiceTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHLocationServiceTableViewController.m; sourceTree = ""; }; - AB3728FA192EC62C0084D7B5 /* XHMoreGameTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMoreGameTableViewController.h; sourceTree = ""; }; - AB3728FB192EC62C0084D7B5 /* XHMoreGameTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMoreGameTableViewController.m; sourceTree = ""; }; - AB3728FD192EC62C0084D7B5 /* XHQRCodeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHQRCodeViewController.h; sourceTree = ""; }; - AB3728FE192EC62C0084D7B5 /* XHQRCodeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHQRCodeViewController.m; sourceTree = ""; }; - AB372900192EC62C0084D7B5 /* XHShakeViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHShakeViewController.h; sourceTree = ""; }; - AB372901192EC62C0084D7B5 /* XHShakeViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHShakeViewController.m; sourceTree = ""; }; - AB372915192EC6800084D7B5 /* XHDisplayEmotionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHDisplayEmotionViewController.h; sourceTree = ""; }; - AB372916192EC6800084D7B5 /* XHDisplayEmotionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHDisplayEmotionViewController.m; sourceTree = ""; }; - AB372918192EC6800084D7B5 /* XHDisplayLocationViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHDisplayLocationViewController.h; sourceTree = ""; }; - AB372919192EC6800084D7B5 /* XHDisplayLocationViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHDisplayLocationViewController.m; sourceTree = ""; }; - AB37291B192EC6800084D7B5 /* XHDisplayMediaViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHDisplayMediaViewController.h; sourceTree = ""; }; - AB37291C192EC6800084D7B5 /* XHDisplayMediaViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHDisplayMediaViewController.m; sourceTree = ""; }; - AB37291E192EC6800084D7B5 /* XHDisplayTextViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHDisplayTextViewController.h; sourceTree = ""; }; - AB37291F192EC6800084D7B5 /* XHDisplayTextViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHDisplayTextViewController.m; sourceTree = ""; }; - AB406DD7199AE5CC00669D05 /* SECoreTextView.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = SECoreTextView.bundle; sourceTree = ""; }; - AB41A571194273150095C12C /* XHMessageAvatorFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageAvatorFactory.h; sourceTree = ""; }; - AB41A572194273150095C12C /* XHMessageAvatorFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageAvatorFactory.m; sourceTree = ""; }; - AB41A573194273150095C12C /* XHMessageBubbleFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageBubbleFactory.h; sourceTree = ""; }; - AB41A574194273150095C12C /* XHMessageBubbleFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageBubbleFactory.m; sourceTree = ""; }; - AB41A575194273150095C12C /* XHMessageVideoConverPhotoFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageVideoConverPhotoFactory.h; sourceTree = ""; }; - AB41A576194273150095C12C /* XHMessageVideoConverPhotoFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageVideoConverPhotoFactory.m; sourceTree = ""; }; - AB41A577194273150095C12C /* XHMessageVoiceFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageVoiceFactory.h; sourceTree = ""; }; - AB41A578194273150095C12C /* XHMessageVoiceFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageVoiceFactory.m; sourceTree = ""; }; - AB41A579194273150095C12C /* XHVideoOutputSampleBufferFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHVideoOutputSampleBufferFactory.h; sourceTree = ""; }; - AB41A57A194273150095C12C /* XHVideoOutputSampleBufferFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHVideoOutputSampleBufferFactory.m; sourceTree = ""; }; - AB41A58A194274240095C12C /* XHPullRefreshTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHPullRefreshTableViewController.h; sourceTree = ""; }; - AB41A58B194274240095C12C /* XHPullRefreshTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHPullRefreshTableViewController.m; sourceTree = ""; }; - AB41A590194274950095C12C /* XHRefreshCircleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHRefreshCircleView.h; sourceTree = ""; }; - AB41A591194274950095C12C /* XHRefreshCircleView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHRefreshCircleView.m; sourceTree = ""; }; - AB41A595194274AC0095C12C /* XHRefreshView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHRefreshView.h; sourceTree = ""; }; - AB41A596194274AC0095C12C /* XHRefreshView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHRefreshView.m; sourceTree = ""; }; - AB41A59A194279380095C12C /* XHLoadMoreView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHLoadMoreView.h; sourceTree = ""; }; - AB41A59B194279380095C12C /* XHLoadMoreView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHLoadMoreView.m; sourceTree = ""; }; - AB439971192C278400EC5E0D /* XHAlbumCollectionViewFlowLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHAlbumCollectionViewFlowLayout.h; sourceTree = ""; }; - AB439972192C278400EC5E0D /* XHAlbumCollectionViewFlowLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHAlbumCollectionViewFlowLayout.m; sourceTree = ""; }; - AB44D419192D8BB50069A210 /* XHContact.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHContact.h; sourceTree = ""; }; - AB44D41A192D8BB50069A210 /* XHContact.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHContact.m; sourceTree = ""; }; - AB4F12F51932AC1300693BD5 /* AlbumFlagMark@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "AlbumFlagMark@2x.png"; sourceTree = ""; }; - AB5493941931102E001F2FCC /* XHContactPhotosTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHContactPhotosTableViewCell.h; sourceTree = ""; }; - AB5493951931102E001F2FCC /* XHContactPhotosTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHContactPhotosTableViewCell.m; sourceTree = ""; }; - AB549399193110BD001F2FCC /* XHContactPhotosView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHContactPhotosView.h; sourceTree = ""; }; - AB54939A193110BD001F2FCC /* XHContactPhotosView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHContactPhotosView.m; sourceTree = ""; }; - AB569AA5193179CC0007DB0B /* Shake_icon_music@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Shake_icon_music@2x.png"; sourceTree = ""; }; - AB569AA6193179CC0007DB0B /* Shake_icon_musicHL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Shake_icon_musicHL@2x.png"; sourceTree = ""; }; - AB569AA7193179CC0007DB0B /* Shake_icon_people@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Shake_icon_people@2x.png"; sourceTree = ""; }; - AB569AA8193179CC0007DB0B /* Shake_icon_peopleHL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Shake_icon_peopleHL@2x.png"; sourceTree = ""; }; - AB569AA9193179CC0007DB0B /* Shake_Line_Down@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Shake_Line_Down@2x.png"; sourceTree = ""; }; - AB569AAA193179CC0007DB0B /* Shake_Line_Up@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Shake_Line_Up@2x.png"; sourceTree = ""; }; - AB569AAB193179CC0007DB0B /* Shake_Logo_Down@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Shake_Logo_Down@2x.png"; sourceTree = ""; }; - AB569AAC193179CC0007DB0B /* Shake_Logo_Up@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Shake_Logo_Up@2x.png"; sourceTree = ""; }; - AB63BF151936B35400B6C977 /* XHNewsTemplateTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHNewsTemplateTableViewCell.h; sourceTree = ""; }; - AB63BF161936B35400B6C977 /* XHNewsTemplateTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHNewsTemplateTableViewCell.m; sourceTree = ""; }; - AB63BF1A1936B4C800B6C977 /* XHNewsTemplateContainerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHNewsTemplateContainerView.h; sourceTree = ""; }; - AB63BF1B1936B4C800B6C977 /* XHNewsTemplateContainerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHNewsTemplateContainerView.m; sourceTree = ""; }; - AB63BF201936B58E00B6C977 /* NewsBackgroundImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "NewsBackgroundImage@2x.png"; sourceTree = ""; }; - AB63BF231936B66400B6C977 /* XHNewsTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHNewsTableViewController.h; sourceTree = ""; }; - AB63BF241936B66400B6C977 /* XHNewsTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHNewsTableViewController.m; sourceTree = ""; }; - AB63BF281936BE5400B6C977 /* XHNewsContainerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHNewsContainerView.h; sourceTree = ""; }; - AB63BF291936BE5400B6C977 /* XHNewsContainerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHNewsContainerView.m; sourceTree = ""; }; - AB6AB482193C03D600AFE823 /* NSString+MessageInputView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+MessageInputView.h"; sourceTree = ""; }; - AB6AB483193C03D600AFE823 /* NSString+MessageInputView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+MessageInputView.m"; sourceTree = ""; }; - AB6AB484193C03D600AFE823 /* NSString+XHMD5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+XHMD5.h"; sourceTree = ""; }; - AB6AB485193C03D600AFE823 /* NSString+XHMD5.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+XHMD5.m"; sourceTree = ""; }; - AB6AB487193C03D600AFE823 /* UIButton+XHButtonTitlePosition.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIButton+XHButtonTitlePosition.h"; sourceTree = ""; }; - AB6AB488193C03D600AFE823 /* UIButton+XHButtonTitlePosition.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIButton+XHButtonTitlePosition.m"; sourceTree = ""; }; - AB6AB48A193C03D600AFE823 /* UIImage+Alpha.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+Alpha.h"; sourceTree = ""; }; - AB6AB48B193C03D600AFE823 /* UIImage+Alpha.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+Alpha.m"; sourceTree = ""; }; - AB6AB48C193C03D600AFE823 /* UIImage+Resize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+Resize.h"; sourceTree = ""; }; - AB6AB48D193C03D600AFE823 /* UIImage+Resize.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+Resize.m"; sourceTree = ""; }; - AB6AB48E193C03D600AFE823 /* UIImage+RoundedCorner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+RoundedCorner.h"; sourceTree = ""; }; - AB6AB48F193C03D600AFE823 /* UIImage+RoundedCorner.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+RoundedCorner.m"; sourceTree = ""; }; - AB6AB490193C03D600AFE823 /* UIImage+Utility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+Utility.h"; sourceTree = ""; }; - AB6AB491193C03D600AFE823 /* UIImage+Utility.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+Utility.m"; sourceTree = ""; }; - AB6AB492193C03D600AFE823 /* UIImage+XHAnimatedFaceGif.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+XHAnimatedFaceGif.h"; sourceTree = ""; }; - AB6AB493193C03D600AFE823 /* UIImage+XHAnimatedFaceGif.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+XHAnimatedFaceGif.m"; sourceTree = ""; }; - AB6AB494193C03D600AFE823 /* UIImage+XHRounded.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+XHRounded.h"; sourceTree = ""; }; - AB6AB495193C03D600AFE823 /* UIImage+XHRounded.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+XHRounded.m"; sourceTree = ""; }; - AB6AB497193C03D600AFE823 /* UIScrollView+XHkeyboardControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+XHkeyboardControl.h"; sourceTree = ""; }; - AB6AB498193C03D600AFE823 /* UIScrollView+XHkeyboardControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+XHkeyboardControl.m"; sourceTree = ""; }; - AB6AB49A193C03D600AFE823 /* UIView+XHBadgeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+XHBadgeView.h"; sourceTree = ""; }; - AB6AB49B193C03D600AFE823 /* UIView+XHBadgeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+XHBadgeView.m"; sourceTree = ""; }; - AB6AB49C193C03D600AFE823 /* UIView+XHRemoteImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+XHRemoteImage.h"; sourceTree = ""; }; - AB6AB49D193C03D600AFE823 /* UIView+XHRemoteImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+XHRemoteImage.m"; sourceTree = ""; }; - AB71383F193195A3009792B5 /* shake_match.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = shake_match.wav; sourceTree = ""; }; - AB713840193195A3009792B5 /* shake_nomatch.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = shake_nomatch.wav; sourceTree = ""; }; - AB713841193195A3009792B5 /* shake_sound_male.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = shake_sound_male.wav; sourceTree = ""; }; - AB726381193281CA00AA738F /* XHCaptureHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHCaptureHelper.h; sourceTree = ""; }; - AB726382193281CA00AA738F /* XHCaptureHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHCaptureHelper.m; sourceTree = ""; }; - AB72638719328D9A00AA738F /* XHLocationServiceTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHLocationServiceTableViewCell.h; sourceTree = ""; }; - AB72638819328D9A00AA738F /* XHLocationServiceTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHLocationServiceTableViewCell.m; sourceTree = ""; }; - AB72638C193293DC00AA738F /* barbuttonicon_more@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "barbuttonicon_more@2x.png"; sourceTree = ""; }; - AB72638D193293DC00AA738F /* barbuttonicon_set@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "barbuttonicon_set@2x.png"; sourceTree = ""; }; - AB7263901932944400AA738F /* Shake_Logo_Female_Down@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Shake_Logo_Female_Down@2x.png"; sourceTree = ""; }; - AB7263911932944400AA738F /* Shake_Logo_Female_Up@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Shake_Logo_Female_Up@2x.png"; sourceTree = ""; }; - AB726394193296EE00AA738F /* album_add_photo@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "album_add_photo@2x.png"; sourceTree = ""; }; - AB73B1631932463E009665E3 /* XHScanningView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHScanningView.h; sourceTree = ""; }; - AB73B1641932463E009665E3 /* XHScanningView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHScanningView.m; sourceTree = ""; }; - AB79A207192C0A6400A9B951 /* XHPathCover.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHPathCover.h; sourceTree = ""; }; - AB79A208192C0A6400A9B951 /* XHPathCover.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHPathCover.m; sourceTree = ""; }; - AB79A209192C0A6400A9B951 /* XHSoundManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHSoundManager.h; sourceTree = ""; }; - AB79A20A192C0A6400A9B951 /* XHSoundManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHSoundManager.m; sourceTree = ""; }; - AB79A20B192C0A6400A9B951 /* XHWaterDropRefresh.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHWaterDropRefresh.h; sourceTree = ""; }; - AB79A20C192C0A6400A9B951 /* XHWaterDropRefresh.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHWaterDropRefresh.m; sourceTree = ""; }; - AB79A216192C0B1500A9B951 /* circle@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "circle@2x.png"; sourceTree = ""; }; - AB79A217192C0B1500A9B951 /* pullrefresh.aif */ = {isa = PBXFileReference; lastKnownFileType = file; path = pullrefresh.aif; sourceTree = ""; }; - AB79A21B192C22F500A9B951 /* XHBaseCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHBaseCollectionViewCell.h; sourceTree = ""; }; - AB79A21C192C22F500A9B951 /* XHBaseCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHBaseCollectionViewCell.m; sourceTree = ""; }; - AB79A220192C231C00A9B951 /* XHAlbumPhotoCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHAlbumPhotoCollectionViewCell.h; sourceTree = ""; }; - AB79A221192C231C00A9B951 /* XHAlbumPhotoCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHAlbumPhotoCollectionViewCell.m; sourceTree = ""; }; - AB84B5CD1937EEB30069A10C /* XHExpressionDetailTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHExpressionDetailTableViewController.h; sourceTree = ""; }; - AB84B5CE1937EEB30069A10C /* XHExpressionDetailTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHExpressionDetailTableViewController.m; sourceTree = ""; }; - AB89EAE41947ED19000930AE /* avator@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "avator@2x.png"; sourceTree = ""; }; - AB89EAE51947ED19000930AE /* placeholderImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "placeholderImage@2x.png"; sourceTree = ""; }; - AB8ACCDA192EB04400FA1C80 /* MoreExpressionShops@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MoreExpressionShops@2x.png"; sourceTree = ""; }; - AB8ACCDB192EB04400FA1C80 /* MoreMyAlbum@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MoreMyAlbum@2x.png"; sourceTree = ""; }; - AB8ACCDC192EB04400FA1C80 /* MoreMyBankCard@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MoreMyBankCard@2x.png"; sourceTree = ""; }; - AB8ACCDD192EB04400FA1C80 /* MoreMyFavorites@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MoreMyFavorites@2x.png"; sourceTree = ""; }; - AB8ACCDE192EB04400FA1C80 /* MoreSetting@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MoreSetting@2x.png"; sourceTree = ""; }; - AB8ACCE5192EB0A400FA1C80 /* XHMultipleSectionTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMultipleSectionTableViewController.h; sourceTree = ""; }; - AB8ACCE6192EB0A400FA1C80 /* XHMultipleSectionTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMultipleSectionTableViewController.m; sourceTree = ""; }; - AB8ACCF0192EBF0C00FA1C80 /* XHMoreExpressionShopsTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMoreExpressionShopsTableViewController.h; sourceTree = ""; }; - AB8ACCF1192EBF0C00FA1C80 /* XHMoreExpressionShopsTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMoreExpressionShopsTableViewController.m; sourceTree = ""; }; - AB8ACCF5192EBF1700FA1C80 /* XHMoreMyAlbumTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMoreMyAlbumTableViewController.h; sourceTree = ""; }; - AB8ACCF6192EBF1700FA1C80 /* XHMoreMyAlbumTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMoreMyAlbumTableViewController.m; sourceTree = ""; }; - AB8ACCFA192EBF2100FA1C80 /* XHMoreMyBankCardTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMoreMyBankCardTableViewController.h; sourceTree = ""; }; - AB8ACCFB192EBF2100FA1C80 /* XHMoreMyBankCardTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMoreMyBankCardTableViewController.m; sourceTree = ""; }; - AB8ACCFF192EBF2C00FA1C80 /* XHMoreMyFavoritesTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMoreMyFavoritesTableViewController.h; sourceTree = ""; }; - AB8ACD00192EBF2C00FA1C80 /* XHMoreMyFavoritesTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMoreMyFavoritesTableViewController.m; sourceTree = ""; }; - AB8ACD04192EBF3600FA1C80 /* XHMoreMyProfileDetailTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMoreMyProfileDetailTableViewController.h; sourceTree = ""; }; - AB8ACD05192EBF3600FA1C80 /* XHMoreMyProfileDetailTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMoreMyProfileDetailTableViewController.m; sourceTree = ""; }; - AB8ACD09192EBF3F00FA1C80 /* XHMoreSettingTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMoreSettingTableViewController.h; sourceTree = ""; }; - AB8ACD0A192EBF3F00FA1C80 /* XHMoreSettingTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMoreSettingTableViewController.m; sourceTree = ""; }; - AB8C80FA1936A6F7006CDA9B /* LKBadgeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LKBadgeView.h; sourceTree = ""; }; - AB8C80FB1936A6F7006CDA9B /* LKBadgeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LKBadgeView.m; sourceTree = ""; }; - AB94CDBA194688FB0010F0D7 /* XHOperationNetworkKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHOperationNetworkKit.h; sourceTree = ""; }; - AB94CDBB194688FB0010F0D7 /* XHOperationNetworkKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHOperationNetworkKit.m; sourceTree = ""; }; - AB9B0F56193A8630004FA35D /* XHHorizontalGridView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHHorizontalGridView.h; sourceTree = ""; }; - AB9B0F57193A8630004FA35D /* XHHorizontalGridView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHHorizontalGridView.m; sourceTree = ""; }; - AB9B0F5B193A8649004FA35D /* XHHorizontalGridItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHHorizontalGridItem.h; sourceTree = ""; }; - AB9B0F5C193A8649004FA35D /* XHHorizontalGridItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHHorizontalGridItem.m; sourceTree = ""; }; - AB9B0F60193A88AD004FA35D /* XHHorizontalGridItemView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHHorizontalGridItemView.h; sourceTree = ""; }; - AB9B0F61193A88AD004FA35D /* XHHorizontalGridItemView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHHorizontalGridItemView.m; sourceTree = ""; }; - ABA8846D193D00BA00413CEC /* XHMessageBubbleHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageBubbleHelper.h; sourceTree = ""; }; - ABA8846E193D00BA00413CEC /* XHMessageBubbleHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageBubbleHelper.m; sourceTree = ""; }; - ABB494021930086C000A2680 /* XHContactCommunicationView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHContactCommunicationView.h; sourceTree = ""; }; - ABB494031930086C000A2680 /* XHContactCommunicationView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHContactCommunicationView.m; sourceTree = ""; }; - ABB5472619394D47000D3C9C /* XHCacheManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHCacheManager.h; sourceTree = ""; }; - ABB5472719394D47000D3C9C /* XHCacheManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHCacheManager.m; sourceTree = ""; }; - ABB5472819394D47000D3C9C /* XHFileAttribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHFileAttribute.h; sourceTree = ""; }; - ABB5472919394D47000D3C9C /* XHFileAttribute.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHFileAttribute.m; sourceTree = ""; }; - ABB5473119394D7C000D3C9C /* XHHTTPClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHHTTPClient.h; sourceTree = ""; }; - ABB5473219394D7C000D3C9C /* XHHTTPClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHHTTPClient.m; sourceTree = ""; }; - ABB76E281937ED7300E62A2E /* emotionShopOne@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "emotionShopOne@2x.png"; sourceTree = ""; }; - ABB76E291937ED7300E62A2E /* emotionShopTwo@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "emotionShopTwo@2x.png"; sourceTree = ""; }; - ABB76E2A1937ED7300E62A2E /* emotionShopOther@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "emotionShopOther@2x.png"; sourceTree = ""; }; - ABB7771A1932A7D700F4ACAF /* Contact_Female@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Contact_Female@2x.png"; sourceTree = ""; }; - ABB7771B1932A7D700F4ACAF /* Contact_Male@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Contact_Male@2x.png"; sourceTree = ""; }; - ABB839E7193CCACA003DEE7A /* NSString+XHDiskSizeTransfrom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+XHDiskSizeTransfrom.h"; sourceTree = ""; }; - ABB839E8193CCACA003DEE7A /* NSString+XHDiskSizeTransfrom.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+XHDiskSizeTransfrom.m"; sourceTree = ""; }; - ABBA5D0A19427D96008BA06D /* XHRefreshControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHRefreshControl.h; sourceTree = ""; }; - ABBA5D0B19427D96008BA06D /* XHRefreshControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHRefreshControl.m; sourceTree = ""; }; - ABCB356719342DFA002F9938 /* VoiceSearchBtn@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchBtn@2x.png"; sourceTree = ""; }; - ABCB356819342DFA002F9938 /* VoiceSearchBtn_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchBtn_ios7@2x.png"; sourceTree = ""; }; - ABCB356919342DFA002F9938 /* VoiceSearchBtnHL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchBtnHL@2x.png"; sourceTree = ""; }; - ABCB356A19342DFA002F9938 /* VoiceSearchBtnHL_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchBtnHL_ios7@2x.png"; sourceTree = ""; }; - ABCB356B19342DFA002F9938 /* VoiceSearchFeedback003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback003@2x.png"; sourceTree = ""; }; - ABCB356C19342DFA002F9938 /* VoiceSearchFeedback003_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback003_ios7@2x.png"; sourceTree = ""; }; - ABCB356D19342DFA002F9938 /* VoiceSearchFeedback004@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback004@2x.png"; sourceTree = ""; }; - ABCB356E19342DFA002F9938 /* VoiceSearchFeedback004_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback004_ios7@2x.png"; sourceTree = ""; }; - ABCB356F19342DFA002F9938 /* VoiceSearchFeedback005@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback005@2x.png"; sourceTree = ""; }; - ABCB357019342DFA002F9938 /* VoiceSearchFeedback005_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback005_ios7@2x.png"; sourceTree = ""; }; - ABCB357119342DFA002F9938 /* VoiceSearchFeedback006@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback006@2x.png"; sourceTree = ""; }; - ABCB357219342DFA002F9938 /* VoiceSearchFeedback006_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback006_ios7@2x.png"; sourceTree = ""; }; - ABCB357319342DFA002F9938 /* VoiceSearchFeedback007@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback007@2x.png"; sourceTree = ""; }; - ABCB357419342DFA002F9938 /* VoiceSearchFeedback007_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback007_ios7@2x.png"; sourceTree = ""; }; - ABCB357519342DFA002F9938 /* VoiceSearchFeedback008@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback008@2x.png"; sourceTree = ""; }; - ABCB357619342DFA002F9938 /* VoiceSearchFeedback008_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback008_ios7@2x.png"; sourceTree = ""; }; - ABCB357719342DFA002F9938 /* VoiceSearchFeedback009@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback009@2x.png"; sourceTree = ""; }; - ABCB357819342DFA002F9938 /* VoiceSearchFeedback009_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback009_ios7@2x.png"; sourceTree = ""; }; - ABCB357919342DFA002F9938 /* VoiceSearchFeedback010@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback010@2x.png"; sourceTree = ""; }; - ABCB357A19342DFA002F9938 /* VoiceSearchFeedback010_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback010_ios7@2x.png"; sourceTree = ""; }; - ABCB357B19342DFA002F9938 /* VoiceSearchFeedback011@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback011@2x.png"; sourceTree = ""; }; - ABCB357C19342DFA002F9938 /* VoiceSearchFeedback011_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback011_ios7@2x.png"; sourceTree = ""; }; - ABCB357D19342DFA002F9938 /* VoiceSearchFeedback012@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback012@2x.png"; sourceTree = ""; }; - ABCB357E19342DFA002F9938 /* VoiceSearchFeedback012_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback012_ios7@2x.png"; sourceTree = ""; }; - ABCB357F19342DFA002F9938 /* VoiceSearchFeedback013@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback013@2x.png"; sourceTree = ""; }; - ABCB358019342DFA002F9938 /* VoiceSearchFeedback013_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback013_ios7@2x.png"; sourceTree = ""; }; - ABCB358119342DFA002F9938 /* VoiceSearchFeedback014@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback014@2x.png"; sourceTree = ""; }; - ABCB358219342DFA002F9938 /* VoiceSearchFeedback014_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback014_ios7@2x.png"; sourceTree = ""; }; - ABCB358319342DFA002F9938 /* VoiceSearchFeedback015@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback015@2x.png"; sourceTree = ""; }; - ABCB358419342DFA002F9938 /* VoiceSearchFeedback015_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback015_ios7@2x.png"; sourceTree = ""; }; - ABCB358519342DFA002F9938 /* VoiceSearchFeedback016@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback016@2x.png"; sourceTree = ""; }; - ABCB358619342DFA002F9938 /* VoiceSearchFeedback016_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback016_ios7@2x.png"; sourceTree = ""; }; - ABCB358719342DFA002F9938 /* VoiceSearchFeedback017@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback017@2x.png"; sourceTree = ""; }; - ABCB358819342DFA002F9938 /* VoiceSearchFeedback017_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback017_ios7@2x.png"; sourceTree = ""; }; - ABCB358919342DFA002F9938 /* VoiceSearchFeedback018@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback018@2x.png"; sourceTree = ""; }; - ABCB358A19342DFA002F9938 /* VoiceSearchFeedback018_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback018_ios7@2x.png"; sourceTree = ""; }; - ABCB358B19342DFA002F9938 /* VoiceSearchFeedback019@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback019@2x.png"; sourceTree = ""; }; - ABCB358C19342DFA002F9938 /* VoiceSearchFeedback019_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback019_ios7@2x.png"; sourceTree = ""; }; - ABCB358D19342DFA002F9938 /* VoiceSearchFeedback020@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback020@2x.png"; sourceTree = ""; }; - ABCB358E19342DFA002F9938 /* VoiceSearchFeedback020_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback020_ios7@2x.png"; sourceTree = ""; }; - ABCB358F19342DFA002F9938 /* VoiceSearchIcon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchIcon@2x.png"; sourceTree = ""; }; - ABCB359019342DFA002F9938 /* VoiceSearchIcon_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchIcon_ios7@2x.png"; sourceTree = ""; }; - ABCB359119342DFA002F9938 /* VoiceSearchIconHL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchIconHL@2x.png"; sourceTree = ""; }; - ABCB359219342DFA002F9938 /* VoiceSearchIconHL_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchIconHL_ios7@2x.png"; sourceTree = ""; }; - ABCB359319342DFA002F9938 /* VoiceSearchLoading001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading001@2x.png"; sourceTree = ""; }; - ABCB359419342DFA002F9938 /* VoiceSearchLoading001_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading001_ios7@2x.png"; sourceTree = ""; }; - ABCB359519342DFA002F9938 /* VoiceSearchLoading002@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading002@2x.png"; sourceTree = ""; }; - ABCB359619342DFA002F9938 /* VoiceSearchLoading002_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading002_ios7@2x.png"; sourceTree = ""; }; - ABCB359719342DFA002F9938 /* VoiceSearchLoading003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading003@2x.png"; sourceTree = ""; }; - ABCB359819342DFA002F9938 /* VoiceSearchLoading003_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading003_ios7@2x.png"; sourceTree = ""; }; - ABCB359919342DFA002F9938 /* VoiceSearchLoading004@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading004@2x.png"; sourceTree = ""; }; - ABCB359A19342DFA002F9938 /* VoiceSearchLoading004_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading004_ios7@2x.png"; sourceTree = ""; }; - ABCB359B19342DFA002F9938 /* VoiceSearchLoading005@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading005@2x.png"; sourceTree = ""; }; - ABCB359C19342DFA002F9938 /* VoiceSearchLoading005_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading005_ios7@2x.png"; sourceTree = ""; }; - ABCB359D19342DFA002F9938 /* VoiceSearchLoading006@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading006@2x.png"; sourceTree = ""; }; - ABCB359E19342DFA002F9938 /* VoiceSearchLoading006_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading006_ios7@2x.png"; sourceTree = ""; }; - ABCB359F19342DFA002F9938 /* VoiceSearchLoading007@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading007@2x.png"; sourceTree = ""; }; - ABCB35A019342DFA002F9938 /* VoiceSearchLoading007_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading007_ios7@2x.png"; sourceTree = ""; }; - ABCB35A119342DFA002F9938 /* VoiceSearchLoading008@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading008@2x.png"; sourceTree = ""; }; - ABCB35A219342DFA002F9938 /* VoiceSearchLoading008_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading008_ios7@2x.png"; sourceTree = ""; }; - ABCB35A319342DFA002F9938 /* VoiceSearchLoading009@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading009@2x.png"; sourceTree = ""; }; - ABCB35A419342DFA002F9938 /* VoiceSearchLoading009_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading009_ios7@2x.png"; sourceTree = ""; }; - ABCB35A519342DFA002F9938 /* VoiceSearchLoading010@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading010@2x.png"; sourceTree = ""; }; - ABCB35A619342DFA002F9938 /* VoiceSearchLoading010_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading010_ios7@2x.png"; sourceTree = ""; }; - ABCB35A719342DFA002F9938 /* VoiceSearchOff.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = VoiceSearchOff.wav; sourceTree = ""; }; - ABCB35A819342DFA002F9938 /* VoiceSearchOn.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = VoiceSearchOn.wav; sourceTree = ""; }; - ABCB35A919342DFA002F9938 /* VoiceSearchStartBtn@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchStartBtn@2x.png"; sourceTree = ""; }; - ABCB35AA19342DFA002F9938 /* VoiceSearchStartBtnHL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchStartBtnHL@2x.png"; sourceTree = ""; }; - ABE83CC41937DD5D00BBF653 /* XHMoreExpressionShopsTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMoreExpressionShopsTableViewCell.h; sourceTree = ""; }; - ABE83CC51937DD5D00BBF653 /* XHMoreExpressionShopsTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMoreExpressionShopsTableViewCell.m; sourceTree = ""; }; - ABE83CCA1937E00E00BBF653 /* EmotionDownload@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "EmotionDownload@2x.png"; sourceTree = ""; }; - ABE83CCB1937E00E00BBF653 /* EmotionListNewTips@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "EmotionListNewTips@2x.png"; sourceTree = ""; }; - ABE83CCC1937E00E00BBF653 /* GreenBtn@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "GreenBtn@2x.png"; sourceTree = ""; }; - ABE83CD01937E4FF00BBF653 /* EmoStoreDownloadBtn@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "EmoStoreDownloadBtn@2x.png"; sourceTree = ""; }; - ABE83CD11937E4FF00BBF653 /* EmoStoreDownloadBtnHL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "EmoStoreDownloadBtnHL@2x.png"; sourceTree = ""; }; - ABE83CD41937E57F00BBF653 /* EmotionDownloadComplete@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "EmotionDownloadComplete@2x.png"; sourceTree = ""; }; - ABE87CD2192D6D7F00EC1E49 /* AlbumOperateMore@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "AlbumOperateMore@2x.png"; sourceTree = ""; }; - ABE87CD3192D6D7F00EC1E49 /* AlbumOperateMoreHL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "AlbumOperateMoreHL@2x.png"; sourceTree = ""; }; - ABEC512B193A8497004954E3 /* dgame1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = dgame1.png; sourceTree = ""; }; - ABEC512C193A8497004954E3 /* dgame2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = dgame2.png; sourceTree = ""; }; - ABEC512D193A8497004954E3 /* dgame0.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = dgame0.png; sourceTree = ""; }; - ABEC512E193A8497004954E3 /* game1.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = game1.png; sourceTree = ""; }; - ABEC512F193A8497004954E3 /* game2.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = game2.png; sourceTree = ""; }; - ABEC5130193A8497004954E3 /* game3.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = game3.png; sourceTree = ""; }; - ABF9EC0319324D64003B95DC /* ScanBook@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ScanBook@2x.png"; sourceTree = ""; }; - ABF9EC0419324D64003B95DC /* ScanBook_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ScanBook_HL@2x.png"; sourceTree = ""; }; - ABF9EC0519324D64003B95DC /* ScanQR1@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ScanQR1@2x.png"; sourceTree = ""; }; - ABF9EC0619324D64003B95DC /* ScanQR2@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ScanQR2@2x.png"; sourceTree = ""; }; - ABF9EC0719324D64003B95DC /* ScanQR3@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ScanQR3@2x.png"; sourceTree = ""; }; - ABF9EC0819324D64003B95DC /* ScanQR4@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ScanQR4@2x.png"; sourceTree = ""; }; - ABF9EC0919324D64003B95DC /* ScanQRCode@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ScanQRCode@2x.png"; sourceTree = ""; }; - ABF9EC0A19324D64003B95DC /* ScanQRCode_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ScanQRCode_HL@2x.png"; sourceTree = ""; }; - ABF9EC0B19324D64003B95DC /* ScanStreet@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ScanStreet@2x.png"; sourceTree = ""; }; - ABF9EC0C19324D64003B95DC /* ScanStreet_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ScanStreet_HL@2x.png"; sourceTree = ""; }; - ABF9EC0D19324D64003B95DC /* ScanWord@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ScanWord@2x.png"; sourceTree = ""; }; - ABF9EC0E19324D64003B95DC /* ScanWord_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ScanWord_HL@2x.png"; sourceTree = ""; }; - E1664DBE1934789A003F4C5B /* XHAudioPlayerHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHAudioPlayerHelper.h; sourceTree = ""; }; - E1664DBF1934789A003F4C5B /* XHAudioPlayerHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHAudioPlayerHelper.m; sourceTree = ""; }; - E1664DC119347916003F4C5B /* XHVoiceCommonHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHVoiceCommonHelper.h; sourceTree = ""; }; - E1664DC219347916003F4C5B /* XHVoiceCommonHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHVoiceCommonHelper.m; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 74180BD1190F447100A35C82 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 74180BE2190F447100A35C82 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 74180BE6190F447100A35C82 /* XCTest.framework in Frameworks */, - 74180BE8190F447100A35C82 /* UIKit.framework in Frameworks */, - 74180BE7190F447100A35C82 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 748244FE1908C730008EC388 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 7D20B9B8196295730043A2BA /* Accelerate.framework in Frameworks */, - 7D20B9B6196295660043A2BA /* CoreVideo.framework in Frameworks */, - 7D08C220192CA06B00B26D93 /* CoreMedia.framework in Frameworks */, - 7D23E418192C594800B717B7 /* CoreText.framework in Frameworks */, - 7D23E416192C591600B717B7 /* CoreLocation.framework in Frameworks */, - 7D23E414192C590F00B717B7 /* AVFoundation.framework in Frameworks */, - 7D23E412192C590900B717B7 /* MobileCoreServices.framework in Frameworks */, - 7D23E410192C58F000B717B7 /* AudioToolbox.framework in Frameworks */, - 7D23E40E192C58E300B717B7 /* MediaPlayer.framework in Frameworks */, - 748245071908C730008EC388 /* CoreGraphics.framework in Frameworks */, - 748245091908C730008EC388 /* UIKit.framework in Frameworks */, - 748245051908C730008EC388 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 748245191908C730008EC388 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 7482451E1908C730008EC388 /* XCTest.framework in Frameworks */, - 748245201908C730008EC388 /* UIKit.framework in Frameworks */, - 7482451F1908C730008EC388 /* Foundation.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 74180BD7190F447100A35C82 /* MessageDisplayFramework */ = { - isa = PBXGroup; - children = ( - 74180BD8190F447100A35C82 /* Supporting Files */, - ); - path = MessageDisplayFramework; - sourceTree = ""; - }; - 74180BD8190F447100A35C82 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 74180BD9190F447100A35C82 /* MessageDisplayFramework-Info.plist */, - 74180BDA190F447100A35C82 /* InfoPlist.strings */, - 74180BDD190F447100A35C82 /* MessageDisplayFramework-Prefix.pch */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 74180BEC190F447100A35C82 /* MessageDisplayFrameworkTests */ = { - isa = PBXGroup; - children = ( - 74180BF2190F447100A35C82 /* MessageDisplayFrameworkTests.m */, - 74180BED190F447100A35C82 /* Supporting Files */, - ); - path = MessageDisplayFrameworkTests; - sourceTree = ""; - }; - 74180BED190F447100A35C82 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 74180BEE190F447100A35C82 /* MessageDisplayFrameworkTests-Info.plist */, - 74180BEF190F447100A35C82 /* InfoPlist.strings */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 74585F39191B937C00F5E8C8 /* VideoPlayImages */ = { - isa = PBXGroup; - children = ( - 74585F3A191B939800F5E8C8 /* MessageVideoPlay@2x.png */, - ); - name = VideoPlayImages; - sourceTree = ""; - }; - 746C87F41916B511007F9A5E /* BubbleImages */ = { - isa = PBXGroup; - children = ( - 746C87F51916B520007F9A5E /* WeChat */, - ); - name = BubbleImages; - sourceTree = ""; - }; - 746C87F51916B520007F9A5E /* WeChat */ = { - isa = PBXGroup; - children = ( - AB89EAE31947ECDE000930AE /* DefaultPlaceholderImage */, - 74585F39191B937C00F5E8C8 /* VideoPlayImages */, - 746C87FB1916B56D007F9A5E /* BubbleMessageCellImages */, - 746C87F91916B53C007F9A5E /* ShareImages */, - 746C87F81916B536007F9A5E /* VoiceAnimationImages */, - 746C87F71916B530007F9A5E /* LocalPositionImages */, - 746C87F61916B529007F9A5E /* EmotionImages */, - ); - name = WeChat; - sourceTree = ""; - }; - 746C87F61916B529007F9A5E /* EmotionImages */ = { - isa = PBXGroup; - children = ( - 746C88601916B625007F9A5E /* Section0 */, - ); - name = EmotionImages; - sourceTree = ""; - }; - 746C87F71916B530007F9A5E /* LocalPositionImages */ = { - isa = PBXGroup; - children = ( - 746C88811916B64E007F9A5E /* Fav_Cell_Loc@2x.png */, - ); - name = LocalPositionImages; - sourceTree = ""; - }; - 746C87F81916B536007F9A5E /* VoiceAnimationImages */ = { - isa = PBXGroup; - children = ( - 746C88381916B607007F9A5E /* ReceiverVoiceNodePlaying@2x.png */, - 746C88391916B607007F9A5E /* ReceiverVoiceNodePlaying000@2x.png */, - 746C883A1916B607007F9A5E /* ReceiverVoiceNodePlaying001@2x.png */, - 746C883B1916B607007F9A5E /* ReceiverVoiceNodePlaying002@2x.png */, - 746C883C1916B607007F9A5E /* ReceiverVoiceNodePlaying003@2x.png */, - 746C883D1916B607007F9A5E /* SenderVoiceNodePlaying@2x.png */, - 746C883E1916B607007F9A5E /* SenderVoiceNodePlaying000@2x.png */, - 746C883F1916B607007F9A5E /* SenderVoiceNodePlaying001@2x.png */, - 746C88401916B607007F9A5E /* SenderVoiceNodePlaying002@2x.png */, - 746C88411916B607007F9A5E /* SenderVoiceNodePlaying003@2x.png */, - ); - name = VoiceAnimationImages; - sourceTree = ""; - }; - 746C87F91916B53C007F9A5E /* ShareImages */ = { - isa = PBXGroup; - children = ( - 746C884C1916B612007F9A5E /* sharemore_friendcard@2x.png */, - 746C884D1916B612007F9A5E /* sharemore_location@2x.png */, - 746C884E1916B612007F9A5E /* sharemore_myfav@2x.png */, - 746C884F1916B612007F9A5E /* sharemore_openapi@2x.png */, - 746C88501916B612007F9A5E /* sharemore_pic@2x.png */, - 746C88511916B612007F9A5E /* sharemore_video@2x.png */, - 746C88521916B612007F9A5E /* sharemore_videovoip@2x.png */, - 746C88531916B612007F9A5E /* sharemore_voiceinput@2x.png */, - 746C88541916B612007F9A5E /* sharemore_voipvoice@2x.png */, - 746C88551916B612007F9A5E /* sharemore_wxtalk@2x.png */, - ); - name = ShareImages; - sourceTree = ""; - }; - 746C87FB1916B56D007F9A5E /* BubbleMessageCellImages */ = { - isa = PBXGroup; - children = ( - 746C88301916B5FE007F9A5E /* weChatBubble_Receiving_Cavern@2x.png */, - 746C88311916B5FE007F9A5E /* weChatBubble_Receiving_Solid@2x.png */, - 746C88321916B5FE007F9A5E /* weChatBubble_Sending_Cavern@2x.png */, - 746C88331916B5FE007F9A5E /* weChatBubble_Sending_Solid@2x.png */, - ); - name = BubbleMessageCellImages; - sourceTree = ""; - }; - 746C87FC1916B57D007F9A5E /* InputViewImages */ = { - isa = PBXGroup; - children = ( - 746C87FE1916B58B007F9A5E /* ToolButtons */, - 746C87FD1916B585007F9A5E /* BackgroundBarImages */, - ); - name = InputViewImages; - sourceTree = ""; - }; - 746C87FD1916B585007F9A5E /* BackgroundBarImages */ = { - isa = PBXGroup; - children = ( - 746C88241916B5EE007F9A5E /* input-bar-background.png */, - 746C88251916B5EE007F9A5E /* input-bar-background@2x.png */, - 746C88261916B5EE007F9A5E /* input-bar-flat.png */, - 746C88271916B5EE007F9A5E /* input-bar-flat@2x.png */, - 746C88281916B5EE007F9A5E /* input-field-cover.png */, - 746C88291916B5EE007F9A5E /* input-field-cover@2x.png */, - ); - name = BackgroundBarImages; - sourceTree = ""; - }; - 746C87FE1916B58B007F9A5E /* ToolButtons */ = { - isa = PBXGroup; - children = ( - 74E5E9981921EC8C0084BCFA /* VoiceBtn_Black@2x.png */, - 74E5E9991921EC8C0084BCFA /* VoiceBtn_BlackHL@2x.png */, - 746C88121916B5D6007F9A5E /* face_HL@2x.png */, - 746C88131916B5D6007F9A5E /* face@2x.png */, - 746C88151916B5D6007F9A5E /* keyborad_HL@2x.png */, - 746C88161916B5D6007F9A5E /* keyborad@2x.png */, - 746C88171916B5D6007F9A5E /* multiMedia_HL@2x.png */, - 746C88181916B5D6007F9A5E /* multiMedia@2x.png */, - 746C88191916B5D6007F9A5E /* voice_HL@2x.png */, - 746C881A1916B5D6007F9A5E /* voice@2x.png */, - ); - name = ToolButtons; - sourceTree = ""; - }; - 746C88601916B625007F9A5E /* Section0 */ = { - isa = PBXGroup; - children = ( - 746C88611916B62D007F9A5E /* section0_emotion0@2x.png */, - 746C88621916B62D007F9A5E /* section0_emotion1@2x.png */, - 746C88631916B62D007F9A5E /* section0_emotion2@2x.png */, - 746C88641916B62D007F9A5E /* section0_emotion3@2x.png */, - 746C88651916B62D007F9A5E /* section0_emotion4@2x.png */, - 746C88661916B62D007F9A5E /* section0_emotion5@2x.png */, - 746C88671916B62D007F9A5E /* section0_emotion6@2x.png */, - 746C88681916B62D007F9A5E /* section0_emotion7@2x.png */, - 746C88691916B62D007F9A5E /* section0_emotion8@2x.png */, - 746C886A1916B62D007F9A5E /* section0_emotion9@2x.png */, - 746C886B1916B62D007F9A5E /* section0_emotion10@2x.png */, - 746C886C1916B62D007F9A5E /* section0_emotion11@2x.png */, - 746C886D1916B62D007F9A5E /* section0_emotion12@2x.png */, - 746C886E1916B62D007F9A5E /* section0_emotion13@2x.png */, - 746C886F1916B62D007F9A5E /* section0_emotion14@2x.png */, - 746C88701916B62D007F9A5E /* section0_emotion15@2x.png */, - ); - name = Section0; - sourceTree = ""; - }; - 746C89131917F691007F9A5E /* Views */ = { - isa = PBXGroup; - children = ( - AB79A21A192C22B500A9B951 /* BaseCollectionViewCell */, - 7D06CA6E192B3D8A00DF8C04 /* BaseTableViewCell */, - 746C89141917F691007F9A5E /* MessageContentViews */, - 746C891F1917F691007F9A5E /* MessageInputView */, - 746C89241917F691007F9A5E /* MessageMenuViews */, - 7D149FF7192DEB49004B4D3B /* ContactViews */, - 74C3E7CE1929191E0053F4E1 /* AlbumContentViews */, - AB73B16219324630009665E3 /* ScanningView */, - AB72638619328D8000AA738F /* LocationServiceViews */, - AB63BF141936B33A00B6C977 /* NewsTemplateView */, - ABE83CC31937DD4A00BBF653 /* MoreExpressionShopsView */, - AB9B0F55193A8623004FA35D /* HorizontalGridView */, - AB41A58F194274840095C12C /* RefreshViews */, - 7D0AAFE31943178D00988FC3 /* PopMenu */, - ); - path = Views; - sourceTree = ""; - }; - 746C89141917F691007F9A5E /* MessageContentViews */ = { - isa = PBXGroup; - children = ( - 746C891B1917F691007F9A5E /* XHMessageTableView.h */, - 746C891C1917F691007F9A5E /* XHMessageTableView.m */, - 746C891D1917F691007F9A5E /* XHMessageTableViewCell.h */, - 746C891E1917F691007F9A5E /* XHMessageTableViewCell.m */, - 746C89171917F691007F9A5E /* XHMessageBubbleView.h */, - 746C89181917F691007F9A5E /* XHMessageBubbleView.m */, - 746C89151917F691007F9A5E /* XHBubblePhotoImageView.h */, - 746C89161917F691007F9A5E /* XHBubblePhotoImageView.m */, - 746C89191917F691007F9A5E /* XHMessageDisplayTextView.h */, - 746C891A1917F691007F9A5E /* XHMessageDisplayTextView.m */, - ); - path = MessageContentViews; - sourceTree = ""; - }; - 746C891F1917F691007F9A5E /* MessageInputView */ = { - isa = PBXGroup; - children = ( - 746C89201917F691007F9A5E /* XHMessageInputView.h */, - 746C89211917F691007F9A5E /* XHMessageInputView.m */, - 746C89221917F691007F9A5E /* XHMessageTextView.h */, - 746C89231917F691007F9A5E /* XHMessageTextView.m */, - 74E5E9931921E90A0084BCFA /* XHVoiceRecordHUD.h */, - 74E5E9941921E90A0084BCFA /* XHVoiceRecordHUD.m */, - ); - path = MessageInputView; - sourceTree = ""; - }; - 746C89241917F691007F9A5E /* MessageMenuViews */ = { - isa = PBXGroup; - children = ( - 746C892D1917F691007F9A5E /* XHShareMenuView.h */, - 746C892E1917F691007F9A5E /* XHShareMenuView.m */, - 746C89291917F691007F9A5E /* XHEmotionManagerView.h */, - 746C892A1917F691007F9A5E /* XHEmotionManagerView.m */, - 746C892B1917F691007F9A5E /* XHEmotionSectionBar.h */, - 746C892C1917F691007F9A5E /* XHEmotionSectionBar.m */, - 746C89251917F691007F9A5E /* XHEmotionCollectionViewCell.h */, - 746C89261917F691007F9A5E /* XHEmotionCollectionViewCell.m */, - 746C89271917F691007F9A5E /* XHEmotionCollectionViewFlowLayout.h */, - 746C89281917F691007F9A5E /* XHEmotionCollectionViewFlowLayout.m */, - ); - path = MessageMenuViews; - sourceTree = ""; - }; - 746C89531917F7B4007F9A5E /* Controllers */ = { - isa = PBXGroup; - children = ( - 746C89731917F89A007F9A5E /* XHBaseTabBarController */, - 746C89721917F89A007F9A5E /* XHBaseNavigationController */, - 74901A42191D4CD30049AFF9 /* XHBaseViewController */, - 746C89741917F89A007F9A5E /* XHBaseTableViewController */, - AB02A9F2192D8DA9004AA23D /* XHBaseSearchTableViewController */, - AB8ACCE4192EB09700FA1C80 /* XHMultipleSectionTableViewController */, - AB63BF221936B65100B6C977 /* XHNewsTableViewController */, - 746C89581917F7B4007F9A5E /* XHMessageTableViewController */, - 74E9002F19278F5200D37C81 /* XHContactTableViewController */, - 74E9003019278F5200D37C81 /* XHDiscoverTableViewController */, - 74901A3C191D3B090049AFF9 /* XHProfileTableViewController */, - ); - path = Controllers; - sourceTree = ""; - }; - 746C89581917F7B4007F9A5E /* XHMessageTableViewController */ = { - isa = PBXGroup; - children = ( - 746C89591917F7B4007F9A5E /* XHMessageTableViewController.h */, - 746C895A1917F7B4007F9A5E /* XHMessageTableViewController.m */, - AB372914192EC6800084D7B5 /* XHDisplayEmotionViewController */, - AB372917192EC6800084D7B5 /* XHDisplayLocationViewController */, - AB37291A192EC6800084D7B5 /* XHDisplayMediaViewController */, - AB37291D192EC6800084D7B5 /* XHDisplayTextViewController */, - ); - path = XHMessageTableViewController; - sourceTree = ""; - }; - 746C89721917F89A007F9A5E /* XHBaseNavigationController */ = { - isa = PBXGroup; - children = ( - 746C89761917F8B2007F9A5E /* XHBaseNavigationController.h */, - 746C89771917F8B2007F9A5E /* XHBaseNavigationController.m */, - ); - path = XHBaseNavigationController; - sourceTree = ""; - }; - 746C89731917F89A007F9A5E /* XHBaseTabBarController */ = { - isa = PBXGroup; - children = ( - 746C897B1917F8C5007F9A5E /* XHBaseTabBarController.h */, - 746C897C1917F8C5007F9A5E /* XHBaseTabBarController.m */, - ); - path = XHBaseTabBarController; - sourceTree = ""; - }; - 746C89741917F89A007F9A5E /* XHBaseTableViewController */ = { - isa = PBXGroup; - children = ( - 746C89851917F8EA007F9A5E /* XHBaseTableViewController.h */, - 746C89861917F8EA007F9A5E /* XHBaseTableViewController.m */, - AB41A58A194274240095C12C /* XHPullRefreshTableViewController.h */, - AB41A58B194274240095C12C /* XHPullRefreshTableViewController.m */, - ); - path = XHBaseTableViewController; - sourceTree = ""; - }; - 748244F81908C730008EC388 = { - isa = PBXGroup; - children = ( - 748245331908C73B008EC388 /* MessageDisplayKit */, - 7482450A1908C730008EC388 /* MessageDisplayExample */, - 748245231908C730008EC388 /* MessageDisplayExampleTests */, - 74180BD7190F447100A35C82 /* MessageDisplayFramework */, - 74180BEC190F447100A35C82 /* MessageDisplayFrameworkTests */, - 748245031908C730008EC388 /* Frameworks */, - 748245021908C730008EC388 /* Products */, - ); - sourceTree = ""; - }; - 748245021908C730008EC388 /* Products */ = { - isa = PBXGroup; - children = ( - 748245011908C730008EC388 /* MessageDisplayExample.app */, - 7482451C1908C730008EC388 /* MessageDisplayExampleTests.xctest */, - 74180BD6190F447100A35C82 /* MessageDisplayFramework.framework */, - 74180BE5190F447100A35C82 /* MessageDisplayFrameworkTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 748245031908C730008EC388 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 7D20B9B7196295730043A2BA /* Accelerate.framework */, - 7D20B9B5196295660043A2BA /* CoreVideo.framework */, - 7D08C21F192CA06B00B26D93 /* CoreMedia.framework */, - 7D23E417192C594800B717B7 /* CoreText.framework */, - 7D23E415192C591600B717B7 /* CoreLocation.framework */, - 7D23E413192C590F00B717B7 /* AVFoundation.framework */, - 7D23E411192C590900B717B7 /* MobileCoreServices.framework */, - 7D23E40F192C58F000B717B7 /* AudioToolbox.framework */, - 7D23E40D192C58E300B717B7 /* MediaPlayer.framework */, - 748245041908C730008EC388 /* Foundation.framework */, - 748245061908C730008EC388 /* CoreGraphics.framework */, - 748245081908C730008EC388 /* UIKit.framework */, - 7482451D1908C730008EC388 /* XCTest.framework */, - 74180CBB190F526100A35C82 /* CoreFoundation.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 7482450A1908C730008EC388 /* MessageDisplayExample */ = { - isa = PBXGroup; - children = ( - 748245131908C730008EC388 /* AppDelegate.h */, - 748245141908C730008EC388 /* AppDelegate.m */, - 74BBB02A190BE8C400093577 /* XHMessageRootViewController.h */, - 74BBB02B190BE8C400093577 /* XHMessageRootViewController.m */, - 74BBB030190C28CD00093577 /* XHDemoWeChatMessageTableViewController.h */, - 74BBB031190C28CD00093577 /* XHDemoWeChatMessageTableViewController.m */, - 7482450B1908C730008EC388 /* Supporting Files */, - ); - path = MessageDisplayExample; - sourceTree = ""; - }; - 7482450B1908C730008EC388 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 74E9004A1927940000D37C81 /* ExampleResources */, - 744FBDC61915EE7400FB4A65 /* Default-568h@2x.png */, - 744FBDC71915EE7400FB4A65 /* Default@2x.png */, - 7482450C1908C730008EC388 /* MessageDisplayExample-Info.plist */, - 7482450D1908C730008EC388 /* InfoPlist.strings */, - 748245101908C730008EC388 /* main.m */, - 748245121908C730008EC388 /* MessageDisplayExample-Prefix.pch */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 748245231908C730008EC388 /* MessageDisplayExampleTests */ = { - isa = PBXGroup; - children = ( - 748245291908C730008EC388 /* MessageDisplayExampleTests.m */, - 748245241908C730008EC388 /* Supporting Files */, - ); - path = MessageDisplayExampleTests; - sourceTree = ""; - }; - 748245241908C730008EC388 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 748245251908C730008EC388 /* MessageDisplayExampleTests-Info.plist */, - 748245261908C730008EC388 /* InfoPlist.strings */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 748245331908C73B008EC388 /* MessageDisplayKit */ = { - isa = PBXGroup; - children = ( - 7482454D190902DA008EC388 /* Classes */, - 74FAB0BA190A92CC005623D0 /* Resources */, - ); - name = MessageDisplayKit; - path = ../../MessageDisplayKit; - sourceTree = ""; - }; - 7482454D190902DA008EC388 /* Classes */ = { - isa = PBXGroup; - children = ( - 74E5EAA51924FFBE0084BCFA /* Vendor */, - ABB5472419394D47000D3C9C /* Core */, - 7482457819091BA2008EC388 /* Macro */, - AB41A570194273150095C12C /* Factorys */, - 748245941909F1F0008EC388 /* Common */, - AB6AB480193C03D600AFE823 /* Categorys */, - 74824554190902DA008EC388 /* Models */, - 746C89131917F691007F9A5E /* Views */, - 746C89531917F7B4007F9A5E /* Controllers */, - ); - path = Classes; - sourceTree = ""; - }; - 74824554190902DA008EC388 /* Models */ = { - isa = PBXGroup; - children = ( - 7482457519090D6B008EC388 /* XHMessageModel.h */, - 7482456919090C04008EC388 /* XHMessage.h */, - 7482456A19090C04008EC388 /* XHMessage.m */, - 74065FB719123E1C00E1CE95 /* XHShareMenuItem.h */, - 74065FB819123E1C00E1CE95 /* XHShareMenuItem.m */, - 740660BC1914D65600E1CE95 /* XHEmotion.h */, - 740660BD1914D65600E1CE95 /* XHEmotion.m */, - 740660CB1914E1F400E1CE95 /* XHEmotionManager.h */, - 740660CC1914E1F400E1CE95 /* XHEmotionManager.m */, - 74585FFB191D10CC00F5E8C8 /* XHAnnotation.h */, - 74585FFC191D10CC00F5E8C8 /* XHAnnotation.m */, - AB44D419192D8BB50069A210 /* XHContact.h */, - AB44D41A192D8BB50069A210 /* XHContact.m */, - 74C3E7D919291A1A0053F4E1 /* XHAlbum.h */, - 74C3E7DA19291A1A0053F4E1 /* XHAlbum.m */, - 74E900B11928F3D100D37C81 /* XHStoreManager.h */, - 74E900B21928F3D100D37C81 /* XHStoreManager.m */, - ); - path = Models; - sourceTree = ""; - }; - 7482457819091BA2008EC388 /* Macro */ = { - isa = PBXGroup; - children = ( - 7482457919091BBA008EC388 /* XHMacro.h */, - 7D149FFF192DF30C004B4D3B /* XHUIKitMacro.h */, - 7D149FFD192DF2CA004B4D3B /* XHFoundationMacro.h */, - ); - path = Macro; - sourceTree = ""; - }; - 748245941909F1F0008EC388 /* Common */ = { - isa = PBXGroup; - children = ( - 74D1C5C4190DFC1D003B1BCA /* XHFoundationCommon.h */, - 74D1C5C5190DFC1D003B1BCA /* XHFoundationCommon.m */, - 740660B21914CA0000E1CE95 /* XHPhotographyHelper.h */, - 740660B31914CA0000E1CE95 /* XHPhotographyHelper.m */, - 74585F3C191B999B00F5E8C8 /* XHLocationHelper.h */, - 74585F3D191B999B00F5E8C8 /* XHLocationHelper.m */, - 74E5E9871921317B0084BCFA /* XHVoiceRecordHelper.h */, - 74E5E9881921317B0084BCFA /* XHVoiceRecordHelper.m */, - E1664DBE1934789A003F4C5B /* XHAudioPlayerHelper.h */, - E1664DBF1934789A003F4C5B /* XHAudioPlayerHelper.m */, - E1664DC119347916003F4C5B /* XHVoiceCommonHelper.h */, - E1664DC219347916003F4C5B /* XHVoiceCommonHelper.m */, - AB726381193281CA00AA738F /* XHCaptureHelper.h */, - AB726382193281CA00AA738F /* XHCaptureHelper.m */, - ABA8846D193D00BA00413CEC /* XHMessageBubbleHelper.h */, - ABA8846E193D00BA00413CEC /* XHMessageBubbleHelper.m */, - ); - path = Common; - sourceTree = ""; - }; - 74901A3C191D3B090049AFF9 /* XHProfileTableViewController */ = { - isa = PBXGroup; - children = ( - 74901A3D191D3B1C0049AFF9 /* XHProfileTableViewController.h */, - 74901A3E191D3B1C0049AFF9 /* XHProfileTableViewController.m */, - AB8ACCEA192EBEF200FA1C80 /* XHMoreExpressionShopsTableViewController */, - AB8ACCEB192EBEF200FA1C80 /* XHMoreMyAlbumTableViewController */, - AB8ACCEC192EBEF200FA1C80 /* XHMoreMyBankCardTableViewController */, - AB8ACCED192EBEF200FA1C80 /* XHMoreMyFavoritesTableViewController */, - AB8ACCEE192EBEF200FA1C80 /* XHMoreMyProfileDetailTableViewController */, - AB8ACCEF192EBEF200FA1C80 /* XHMoreSettingTableViewController */, - ); - path = XHProfileTableViewController; - sourceTree = ""; - }; - 74901A42191D4CD30049AFF9 /* XHBaseViewController */ = { - isa = PBXGroup; - children = ( - 74901A43191D4CD30049AFF9 /* XHBaseViewController.h */, - 74901A44191D4CD30049AFF9 /* XHBaseViewController.m */, - ); - path = XHBaseViewController; - sourceTree = ""; - }; - 74C3E7CE1929191E0053F4E1 /* AlbumContentViews */ = { - isa = PBXGroup; - children = ( - 74C3E7CF192919360053F4E1 /* XHAlbumTableViewCell.h */, - 74C3E7D0192919360053F4E1 /* XHAlbumTableViewCell.m */, - 74C3E7D4192919930053F4E1 /* XHAlbumRichTextView.h */, - 74C3E7D5192919930053F4E1 /* XHAlbumRichTextView.m */, - AB79A220192C231C00A9B951 /* XHAlbumPhotoCollectionViewCell.h */, - AB79A221192C231C00A9B951 /* XHAlbumPhotoCollectionViewCell.m */, - AB439971192C278400EC5E0D /* XHAlbumCollectionViewFlowLayout.h */, - AB439972192C278400EC5E0D /* XHAlbumCollectionViewFlowLayout.m */, - ); - path = AlbumContentViews; - sourceTree = ""; - }; - 74C3E7E319291F1B0053F4E1 /* AlbumImages */ = { - isa = PBXGroup; - children = ( - AB4F12F51932AC1300693BD5 /* AlbumFlagMark@2x.png */, - ABE87CD2192D6D7F00EC1E49 /* AlbumOperateMore@2x.png */, - ABE87CD3192D6D7F00EC1E49 /* AlbumOperateMoreHL@2x.png */, - AB79A216192C0B1500A9B951 /* circle@2x.png */, - AB79A217192C0B1500A9B951 /* pullrefresh.aif */, - 74C3E7E419291F1B0053F4E1 /* AlbumHeaderBackgrounImage@2x.png */, - AB726394193296EE00AA738F /* album_add_photo@2x.png */, - ); - path = AlbumImages; - sourceTree = ""; - }; - 74E5E99E1921F7580084BCFA /* VoiceRecordHUDImages */ = { - isa = PBXGroup; - children = ( - 74E5E99F1921F7710084BCFA /* RecordingSignal001@2x.png */, - 74E5E9A01921F7710084BCFA /* RecordingSignal002@2x.png */, - 74E5E9A11921F7710084BCFA /* RecordingSignal003@2x.png */, - 74E5E9A21921F7710084BCFA /* RecordingSignal004@2x.png */, - 74E5E9A31921F7710084BCFA /* RecordingSignal005@2x.png */, - 74E5E9A41921F7710084BCFA /* RecordingSignal006@2x.png */, - 74E5E9A51921F7710084BCFA /* RecordingSignal007@2x.png */, - 74E5E9A61921F7710084BCFA /* RecordingSignal008@2x.png */, - 74E5E9A71921F7710084BCFA /* RecordingBkg@2x.png */, - 74E5E9A81921F7710084BCFA /* RecordCancel@2x.png */, - ); - name = VoiceRecordHUDImages; - sourceTree = ""; - }; - 74E5EAA51924FFBE0084BCFA /* Vendor */ = { - isa = PBXGroup; - children = ( - 7DA2EC92194577EA00B009FC /* FLAnimatedImageView */, - 7DA2EC2519455EF000B009FC /* MultiSelectTableViewController */, - AB8C80F91936A6F7006CDA9B /* LKBadgeView */, - 7D13FC38192C4F4000A23413 /* XHImageViewer */, - AB79A206192C0A6400A9B951 /* XHPathCover */, - 74E5EAA61924FFBE0084BCFA /* SECoreTextView */, - ); - path = Vendor; - sourceTree = ""; - }; - 74E5EAA61924FFBE0084BCFA /* SECoreTextView */ = { - isa = PBXGroup; - children = ( - 74E5EAA71924FFBE0084BCFA /* NSMutableAttributedString+Helper.h */, - 74E5EAA81924FFBE0084BCFA /* NSMutableAttributedString+Helper.m */, - 74E5EAA91924FFBE0084BCFA /* SECompatibility.h */, - 74E5EAAA1924FFBE0084BCFA /* SECompatibility.m */, - 74E5EAAB1924FFBE0084BCFA /* SEConstants.h */, - 74E5EAAC1924FFBE0084BCFA /* SEConstants.m */, - 74E5EAAD1924FFBE0084BCFA /* SELineLayout.h */, - 74E5EAAE1924FFBE0084BCFA /* SELineLayout.m */, - 74E5EAAF1924FFBE0084BCFA /* SELinkText.h */, - 74E5EAB01924FFBE0084BCFA /* SELinkText.m */, - 74E5EAB11924FFBE0084BCFA /* SESelectionGrabber.h */, - 74E5EAB21924FFBE0084BCFA /* SESelectionGrabber.m */, - 74E5EAB31924FFBE0084BCFA /* SETextAttachment.h */, - 74E5EAB41924FFBE0084BCFA /* SETextAttachment.m */, - 74E5EAB51924FFBE0084BCFA /* SETextEditingCaret.h */, - 74E5EAB61924FFBE0084BCFA /* SETextEditingCaret.m */, - 74E5EAB71924FFBE0084BCFA /* SETextGeometry.h */, - 74E5EAB81924FFBE0084BCFA /* SETextGeometry.m */, - 74E5EAB91924FFBE0084BCFA /* SETextInput.h */, - 74E5EABA1924FFBE0084BCFA /* SETextInput.m */, - 74E5EABB1924FFBE0084BCFA /* SETextLayout.h */, - 74E5EABC1924FFBE0084BCFA /* SETextLayout.m */, - 74E5EABD1924FFBE0084BCFA /* SETextMagnifierCaret.h */, - 74E5EABE1924FFBE0084BCFA /* SETextMagnifierCaret.m */, - 74E5EABF1924FFBE0084BCFA /* SETextMagnifierRanged.h */, - 74E5EAC01924FFBE0084BCFA /* SETextMagnifierRanged.m */, - 74E5EAC11924FFBE0084BCFA /* SETextSelection.h */, - 74E5EAC21924FFBE0084BCFA /* SETextSelection.m */, - 74E5EAC31924FFBE0084BCFA /* SETextSelectionView.h */, - 74E5EAC41924FFBE0084BCFA /* SETextSelectionView.m */, - 74E5EAC51924FFBE0084BCFA /* SETextView.h */, - 74E5EAC61924FFBE0084BCFA /* SETextView.m */, - ); - path = SECoreTextView; - sourceTree = ""; - }; - 74E9002F19278F5200D37C81 /* XHContactTableViewController */ = { - isa = PBXGroup; - children = ( - 74E9003119278F5C00D37C81 /* XHContactTableViewController.h */, - 74E9003219278F5C00D37C81 /* XHContactTableViewController.m */, - 7D14A001192EF8DE004B4D3B /* XHContactDetailTableViewController */, - ); - path = XHContactTableViewController; - sourceTree = ""; - }; - 74E9003019278F5200D37C81 /* XHDiscoverTableViewController */ = { - isa = PBXGroup; - children = ( - 74E9003619278F6700D37C81 /* XHDiscoverTableViewController.h */, - 74E9003719278F6700D37C81 /* XHDiscoverTableViewController.m */, - AB3728F0192EC62C0084D7B5 /* XHAlbumTableViewController */, - AB3728F3192EC62C0084D7B5 /* XHBottleViewController */, - AB3728F6192EC62C0084D7B5 /* XHLocationServiceTableViewController */, - AB3728F9192EC62C0084D7B5 /* XHMoreGameTableViewController */, - AB3728FC192EC62C0084D7B5 /* XHQRCodeViewController */, - AB3728FF192EC62C0084D7B5 /* XHShakeViewController */, - ); - path = XHDiscoverTableViewController; - sourceTree = ""; - }; - 74E9004A1927940000D37C81 /* ExampleResources */ = { - isa = PBXGroup; - children = ( - 7D08C21D192C7A5E00B26D93 /* MeIcon@2x.png */, - ABEC512A193A8497004954E3 /* GameImages */, - ABE83CC91937E00E00BBF653 /* EmotionImages */, - AB63BF1F1936B58600B6C977 /* NewsTemplateImages */, - ABB777191932A7D700F4ACAF /* ContactImages */, - 74E9004E1927940000D37C81 /* DisconverImages */, - AB8ACCD9192EB04400FA1C80 /* ProfileImages */, - 74E900551927940000D37C81 /* IMG_1555.MOV */, - 74E900571927940000D37C81 /* TabbarImages */, - 74E9005D1927940000D37C81 /* TableViewBackgroundImage@2x.png */, - ); - path = ExampleResources; - sourceTree = ""; - }; - 74E9004E1927940000D37C81 /* DisconverImages */ = { - isa = PBXGroup; - children = ( - 74E900531927940000D37C81 /* ff_IconShowAlbum@2x.png */, - 74E900511927940000D37C81 /* ff_IconQRCode@2x.png */, - 74E900521927940000D37C81 /* ff_IconShake@2x.png */, - 74E900501927940000D37C81 /* ff_IconLocationService@2x.png */, - 74E9004F1927940000D37C81 /* ff_IconBottle@2x.png */, - AB72638C193293DC00AA738F /* barbuttonicon_more@2x.png */, - AB72638D193293DC00AA738F /* barbuttonicon_set@2x.png */, - ABF9EC0219324D64003B95DC /* ScanningImages */, - 74C3E7E319291F1B0053F4E1 /* AlbumImages */, - AB569AA4193179CC0007DB0B /* ShakeImages */, - 74E900931927A81500D37C81 /* BottleImages */, - 74E900541927940000D37C81 /* MoreGame@2x.png */, - ); - path = DisconverImages; - sourceTree = ""; - }; - 74E900571927940000D37C81 /* TabbarImages */ = { - isa = PBXGroup; - children = ( - 74E900581927940000D37C81 /* Contact@2x.png */, - 74E900591927940000D37C81 /* Profile@2x.png */, - 74E9005A1927940000D37C81 /* SNS@2x.png */, - 74E9005B1927940000D37C81 /* tabbarBkg@2x.png */, - 74E9005C1927940000D37C81 /* WeChat@2x.png */, - ); - path = TabbarImages; - sourceTree = ""; - }; - 74E900931927A81500D37C81 /* BottleImages */ = { - isa = PBXGroup; - children = ( - 74E900A81927ABF800D37C81 /* fishwater@2x.png */, - 74E900A91927ABF800D37C81 /* fishwater2@2x.png */, - 74E900AA1927ABF800D37C81 /* fishwater3@2x.png */, - 74E9009E1927A9C900D37C81 /* bottleBoard@2x.png */, - 74E900A21927A9C900D37C81 /* bottleRecord@2x.png */, - 74E900A31927A9C900D37C81 /* bottleWriting@2x.png */, - 74E900A41927A9C900D37C81 /* bottleStarfish@2x.png */, - 74E900941927A81500D37C81 /* bottleButtonFish@2x.png */, - 74E900951927A81500D37C81 /* bottleButtonMine@2x.png */, - 74E900961927A81500D37C81 /* bottleButtonThrow@2x.png */, - 74E9009C1927A9C900D37C81 /* bottleBkg@2x.png */, - 74E900971927A81500D37C81 /* bottleNightBkg@2x.png */, - 74E9009D1927A9C900D37C81 /* bottleBkgSpotLight@2x.png */, - ); - path = BottleImages; - sourceTree = ""; - }; - 74FAB0BA190A92CC005623D0 /* Resources */ = { - isa = PBXGroup; - children = ( - 7DA2EC7B19455F4100B009FC /* MultiSelectImages */, - 7D0AAFF3194322FE00988FC3 /* PopMenuImages */, - 74E5E99E1921F7580084BCFA /* VoiceRecordHUDImages */, - 746C87FC1916B57D007F9A5E /* InputViewImages */, - 746C87F41916B511007F9A5E /* BubbleImages */, - 74BBB022190B8EAB00093577 /* MessageDisplayKitString.strings */, - AB406DD7199AE5CC00669D05 /* SECoreTextView.bundle */, - ); - path = Resources; - sourceTree = ""; - }; - 7D06CA6E192B3D8A00DF8C04 /* BaseTableViewCell */ = { - isa = PBXGroup; - children = ( - 7D06CA6F192B3D9B00DF8C04 /* XHBaseTableViewCell.h */, - 7D06CA70192B3D9B00DF8C04 /* XHBaseTableViewCell.m */, - ); - path = BaseTableViewCell; - sourceTree = ""; - }; - 7D0AAFE31943178D00988FC3 /* PopMenu */ = { - isa = PBXGroup; - children = ( - 7D0AAFE9194319A500988FC3 /* XHPopMenuItem.h */, - 7D0AAFEA194319A500988FC3 /* XHPopMenuItem.m */, - 7D0AAFE41943179A00988FC3 /* XHPopMenu.h */, - 7D0AAFE51943179A00988FC3 /* XHPopMenu.m */, - 7D0AAFEE19431A9400988FC3 /* XHPopMenuItemView.h */, - 7D0AAFEF19431A9400988FC3 /* XHPopMenuItemView.m */, - ); - path = PopMenu; - sourceTree = ""; - }; - 7D0AAFF3194322FE00988FC3 /* PopMenuImages */ = { - isa = PBXGroup; - children = ( - 7D0AAFF41943231400988FC3 /* MoreFunctionFrame@2x.png */, - AB0C4AD01943B6BB00D346FF /* contacts_add_friend@2x.png */, - AB0C4AD11943B6BB00D346FF /* contacts_add_newmessage@2x.png */, - AB0C4AD21943B6BB00D346FF /* contacts_add_photo@2x.png */, - AB0C4AD31943B6BB00D346FF /* contacts_add_scan@2x.png */, - AB0C4AD41943B6BB00D346FF /* contacts_add_voip@2x.png */, - ); - name = PopMenuImages; - sourceTree = ""; - }; - 7D13FC38192C4F4000A23413 /* XHImageViewer */ = { - isa = PBXGroup; - children = ( - 7D13FC43192C4F4000A23413 /* XHImageViewer.h */, - 7D13FC44192C4F4000A23413 /* XHImageViewer.m */, - 7D13FC45192C4F4000A23413 /* XHViewState.h */, - 7D13FC46192C4F4000A23413 /* XHViewState.m */, - 7D13FC47192C4F4000A23413 /* XHZoomingImageView.h */, - 7D13FC48192C4F4000A23413 /* XHZoomingImageView.m */, - ); - path = XHImageViewer; - sourceTree = ""; - }; - 7D149FF7192DEB49004B4D3B /* ContactViews */ = { - isa = PBXGroup; - children = ( - 7D149FF8192DEB5D004B4D3B /* XHContactTableViewCell.h */, - 7D149FF9192DEB5D004B4D3B /* XHContactTableViewCell.m */, - 7D14A007192EFD33004B4D3B /* XHContactView.h */, - 7D14A008192EFD33004B4D3B /* XHContactView.m */, - AB5493941931102E001F2FCC /* XHContactPhotosTableViewCell.h */, - AB5493951931102E001F2FCC /* XHContactPhotosTableViewCell.m */, - AB549399193110BD001F2FCC /* XHContactPhotosView.h */, - AB54939A193110BD001F2FCC /* XHContactPhotosView.m */, - ABB494021930086C000A2680 /* XHContactCommunicationView.h */, - ABB494031930086C000A2680 /* XHContactCommunicationView.m */, - ); - path = ContactViews; - sourceTree = ""; - }; - 7D14A001192EF8DE004B4D3B /* XHContactDetailTableViewController */ = { - isa = PBXGroup; - children = ( - 7D14A002192EF8FD004B4D3B /* XHContactDetailTableViewController.h */, - 7D14A003192EF8FD004B4D3B /* XHContactDetailTableViewController.m */, - ); - path = XHContactDetailTableViewController; - sourceTree = ""; - }; - 7DA2EC2519455EF000B009FC /* MultiSelectTableViewController */ = { - isa = PBXGroup; - children = ( - 7DA2EC3219455EF000B009FC /* LetterIndex */, - 7DA2EC3719455EF000B009FC /* MultiSelect */, - 7DA2EC4519455EF100B009FC /* UIView+Convenience.h */, - 7DA2EC4619455EF100B009FC /* UIView+Convenience.m */, - ); - path = MultiSelectTableViewController; - sourceTree = ""; - }; - 7DA2EC3219455EF000B009FC /* LetterIndex */ = { - isa = PBXGroup; - children = ( - 7DA2EC3319455EF000B009FC /* MLLetterIndexNavigationItem.h */, - 7DA2EC3419455EF000B009FC /* MLLetterIndexNavigationItem.m */, - 7DA2EC3519455EF000B009FC /* MLLetterIndexNavigationView.h */, - 7DA2EC3619455EF000B009FC /* MLLetterIndexNavigationView.m */, - ); - path = LetterIndex; - sourceTree = ""; - }; - 7DA2EC3719455EF000B009FC /* MultiSelect */ = { - isa = PBXGroup; - children = ( - 7DA2EC3819455EF100B009FC /* MultiSelectedPanel.h */, - 7DA2EC3919455EF100B009FC /* MultiSelectedPanel.m */, - 7DA2EC3A19455EF100B009FC /* MultiSelectedPanel.xib */, - 7DA2EC3B19455EF100B009FC /* MultiSelectItem.h */, - 7DA2EC3C19455EF100B009FC /* MultiSelectItem.m */, - 7DA2EC3D19455EF100B009FC /* MultiSelectSearchResultTableViewCell.h */, - 7DA2EC3E19455EF100B009FC /* MultiSelectSearchResultTableViewCell.m */, - 7DA2EC3F19455EF100B009FC /* MultiSelectSearchResultTableViewCell.xib */, - 7DA2EC4019455EF100B009FC /* MultiSelectTableViewCell.h */, - 7DA2EC4119455EF100B009FC /* MultiSelectTableViewCell.m */, - 7DA2EC4219455EF100B009FC /* MultiSelectTableViewCell.xib */, - 7DA2EC4319455EF100B009FC /* MultiSelectViewController.h */, - 7DA2EC4419455EF100B009FC /* MultiSelectViewController.m */, - ); - path = MultiSelect; - sourceTree = ""; - }; - 7DA2EC7B19455F4100B009FC /* MultiSelectImages */ = { - isa = PBXGroup; - children = ( - 7DA2EC7C19455F5700B009FC /* AddGroupMemberBtn@2x.png */, - 7DA2EC7D19455F5700B009FC /* AddGroupMemberBtnHL@2x.png */, - 7DA2EC7F19455F5700B009FC /* CellBlueSelected@2x.png */, - 7DA2EC8019455F5700B009FC /* CellGraySelected@2x.png */, - 7DA2EC8119455F5700B009FC /* CellNotSelected@2x.png */, - 7DA2EC8219455F5700B009FC /* CellRedSelected@2x.png */, - 7DA2EC8319455F5700B009FC /* ContactsPanelDotRect@2x.png */, - 7DA2EC8419455F5700B009FC /* MultiSelectedPanelBkg@2x.png */, - 7DA2EC8519455F5700B009FC /* MultiSelectedPanelConfirmBtnbKG@2x.png */, - 7DA2EC8619455F5700B009FC /* SearchIcon@2x.png */, - ); - name = MultiSelectImages; - sourceTree = ""; - }; - 7DA2EC92194577EA00B009FC /* FLAnimatedImageView */ = { - isa = PBXGroup; - children = ( - 7DA2EC93194577EA00B009FC /* FLAnimatedImage.h */, - 7DA2EC94194577EA00B009FC /* FLAnimatedImage.m */, - 7DA2EC95194577EA00B009FC /* FLAnimatedImageView.h */, - 7DA2EC96194577EA00B009FC /* FLAnimatedImageView.m */, - ); - path = FLAnimatedImageView; - sourceTree = ""; - }; - 7DA2EC9D19457A2D00B009FC /* emoticons */ = { - isa = PBXGroup; - children = ( - 7DA2ECA619457A2D00B009FC /* emotion0.gif */, - 7DA2EC9E19457A2D00B009FC /* emotion1.gif */, - 7DA2ECA719457A2D00B009FC /* emotion2.gif */, - 7DA2ECA819457A2D00B009FC /* emotion3.gif */, - 7DA2ECA919457A2D00B009FC /* emotion4.gif */, - 7DA2ECAA19457A2D00B009FC /* emotion5.gif */, - 7DA2ECAB19457A2D00B009FC /* emotion6.gif */, - 7DA2ECAC19457A2D00B009FC /* emotion7.gif */, - 7DA2ECAD19457A2D00B009FC /* emotion8.gif */, - 7DA2ECAE19457A2D00B009FC /* emotion9.gif */, - 7DA2EC9F19457A2D00B009FC /* emotion10.gif */, - 7DA2ECA019457A2D00B009FC /* emotion11.gif */, - 7DA2ECA119457A2D00B009FC /* emotion12.gif */, - 7DA2ECA219457A2D00B009FC /* emotion13.gif */, - 7DA2ECA319457A2D00B009FC /* emotion14.gif */, - 7DA2ECA419457A2D00B009FC /* emotion15.gif */, - 7DA2ECA519457A2D00B009FC /* emotion16.gif */, - ); - path = emoticons; - sourceTree = ""; - }; - AB02A9F2192D8DA9004AA23D /* XHBaseSearchTableViewController */ = { - isa = PBXGroup; - children = ( - AB02A9F3192D8DC5004AA23D /* XHBaseSearchTableViewController.h */, - AB02A9F4192D8DC5004AA23D /* XHBaseSearchTableViewController.m */, - ); - path = XHBaseSearchTableViewController; - sourceTree = ""; - }; - AB3728F0192EC62C0084D7B5 /* XHAlbumTableViewController */ = { - isa = PBXGroup; - children = ( - AB3728F1192EC62C0084D7B5 /* XHAlbumTableViewController.h */, - AB3728F2192EC62C0084D7B5 /* XHAlbumTableViewController.m */, - ); - path = XHAlbumTableViewController; - sourceTree = ""; - }; - AB3728F3192EC62C0084D7B5 /* XHBottleViewController */ = { - isa = PBXGroup; - children = ( - AB3728F4192EC62C0084D7B5 /* XHBottleViewController.h */, - AB3728F5192EC62C0084D7B5 /* XHBottleViewController.m */, - ); - path = XHBottleViewController; - sourceTree = ""; - }; - AB3728F6192EC62C0084D7B5 /* XHLocationServiceTableViewController */ = { - isa = PBXGroup; - children = ( - AB3728F7192EC62C0084D7B5 /* XHLocationServiceTableViewController.h */, - AB3728F8192EC62C0084D7B5 /* XHLocationServiceTableViewController.m */, - ); - path = XHLocationServiceTableViewController; - sourceTree = ""; - }; - AB3728F9192EC62C0084D7B5 /* XHMoreGameTableViewController */ = { - isa = PBXGroup; - children = ( - AB3728FA192EC62C0084D7B5 /* XHMoreGameTableViewController.h */, - AB3728FB192EC62C0084D7B5 /* XHMoreGameTableViewController.m */, - ); - path = XHMoreGameTableViewController; - sourceTree = ""; - }; - AB3728FC192EC62C0084D7B5 /* XHQRCodeViewController */ = { - isa = PBXGroup; - children = ( - AB3728FD192EC62C0084D7B5 /* XHQRCodeViewController.h */, - AB3728FE192EC62C0084D7B5 /* XHQRCodeViewController.m */, - ); - path = XHQRCodeViewController; - sourceTree = ""; - }; - AB3728FF192EC62C0084D7B5 /* XHShakeViewController */ = { - isa = PBXGroup; - children = ( - AB372900192EC62C0084D7B5 /* XHShakeViewController.h */, - AB372901192EC62C0084D7B5 /* XHShakeViewController.m */, - ); - path = XHShakeViewController; - sourceTree = ""; - }; - AB372914192EC6800084D7B5 /* XHDisplayEmotionViewController */ = { - isa = PBXGroup; - children = ( - AB372915192EC6800084D7B5 /* XHDisplayEmotionViewController.h */, - AB372916192EC6800084D7B5 /* XHDisplayEmotionViewController.m */, - ); - path = XHDisplayEmotionViewController; - sourceTree = ""; - }; - AB372917192EC6800084D7B5 /* XHDisplayLocationViewController */ = { - isa = PBXGroup; - children = ( - AB372918192EC6800084D7B5 /* XHDisplayLocationViewController.h */, - AB372919192EC6800084D7B5 /* XHDisplayLocationViewController.m */, - ); - path = XHDisplayLocationViewController; - sourceTree = ""; - }; - AB37291A192EC6800084D7B5 /* XHDisplayMediaViewController */ = { - isa = PBXGroup; - children = ( - AB37291B192EC6800084D7B5 /* XHDisplayMediaViewController.h */, - AB37291C192EC6800084D7B5 /* XHDisplayMediaViewController.m */, - ); - path = XHDisplayMediaViewController; - sourceTree = ""; - }; - AB37291D192EC6800084D7B5 /* XHDisplayTextViewController */ = { - isa = PBXGroup; - children = ( - AB37291E192EC6800084D7B5 /* XHDisplayTextViewController.h */, - AB37291F192EC6800084D7B5 /* XHDisplayTextViewController.m */, - ); - path = XHDisplayTextViewController; - sourceTree = ""; - }; - AB41A570194273150095C12C /* Factorys */ = { - isa = PBXGroup; - children = ( - AB41A571194273150095C12C /* XHMessageAvatorFactory.h */, - AB41A572194273150095C12C /* XHMessageAvatorFactory.m */, - AB41A573194273150095C12C /* XHMessageBubbleFactory.h */, - AB41A574194273150095C12C /* XHMessageBubbleFactory.m */, - AB41A575194273150095C12C /* XHMessageVideoConverPhotoFactory.h */, - AB41A576194273150095C12C /* XHMessageVideoConverPhotoFactory.m */, - AB41A577194273150095C12C /* XHMessageVoiceFactory.h */, - AB41A578194273150095C12C /* XHMessageVoiceFactory.m */, - AB41A579194273150095C12C /* XHVideoOutputSampleBufferFactory.h */, - AB41A57A194273150095C12C /* XHVideoOutputSampleBufferFactory.m */, - ); - path = Factorys; - sourceTree = ""; - }; - AB41A58F194274840095C12C /* RefreshViews */ = { - isa = PBXGroup; - children = ( - ABBA5D0A19427D96008BA06D /* XHRefreshControl.h */, - ABBA5D0B19427D96008BA06D /* XHRefreshControl.m */, - AB41A595194274AC0095C12C /* XHRefreshView.h */, - AB41A596194274AC0095C12C /* XHRefreshView.m */, - AB41A590194274950095C12C /* XHRefreshCircleView.h */, - AB41A591194274950095C12C /* XHRefreshCircleView.m */, - AB41A59A194279380095C12C /* XHLoadMoreView.h */, - AB41A59B194279380095C12C /* XHLoadMoreView.m */, - ); - path = RefreshViews; - sourceTree = ""; - }; - AB569AA4193179CC0007DB0B /* ShakeImages */ = { - isa = PBXGroup; - children = ( - AB569AA5193179CC0007DB0B /* Shake_icon_music@2x.png */, - AB569AA6193179CC0007DB0B /* Shake_icon_musicHL@2x.png */, - AB569AA7193179CC0007DB0B /* Shake_icon_people@2x.png */, - AB569AA8193179CC0007DB0B /* Shake_icon_peopleHL@2x.png */, - AB569AA9193179CC0007DB0B /* Shake_Line_Down@2x.png */, - AB569AAA193179CC0007DB0B /* Shake_Line_Up@2x.png */, - AB7263901932944400AA738F /* Shake_Logo_Female_Down@2x.png */, - AB7263911932944400AA738F /* Shake_Logo_Female_Up@2x.png */, - AB569AAB193179CC0007DB0B /* Shake_Logo_Down@2x.png */, - AB569AAC193179CC0007DB0B /* Shake_Logo_Up@2x.png */, - AB71383F193195A3009792B5 /* shake_match.wav */, - AB713840193195A3009792B5 /* shake_nomatch.wav */, - AB713841193195A3009792B5 /* shake_sound_male.wav */, - ); - path = ShakeImages; - sourceTree = ""; - }; - AB63BF141936B33A00B6C977 /* NewsTemplateView */ = { - isa = PBXGroup; - children = ( - AB63BF151936B35400B6C977 /* XHNewsTemplateTableViewCell.h */, - AB63BF161936B35400B6C977 /* XHNewsTemplateTableViewCell.m */, - AB63BF1A1936B4C800B6C977 /* XHNewsTemplateContainerView.h */, - AB63BF1B1936B4C800B6C977 /* XHNewsTemplateContainerView.m */, - AB63BF281936BE5400B6C977 /* XHNewsContainerView.h */, - AB63BF291936BE5400B6C977 /* XHNewsContainerView.m */, - ); - path = NewsTemplateView; - sourceTree = ""; - }; - AB63BF1F1936B58600B6C977 /* NewsTemplateImages */ = { - isa = PBXGroup; - children = ( - AB63BF201936B58E00B6C977 /* NewsBackgroundImage@2x.png */, - ); - path = NewsTemplateImages; - sourceTree = ""; - }; - AB63BF221936B65100B6C977 /* XHNewsTableViewController */ = { - isa = PBXGroup; - children = ( - AB63BF231936B66400B6C977 /* XHNewsTableViewController.h */, - AB63BF241936B66400B6C977 /* XHNewsTableViewController.m */, - ); - path = XHNewsTableViewController; - sourceTree = ""; - }; - AB6AB480193C03D600AFE823 /* Categorys */ = { - isa = PBXGroup; - children = ( - AB6AB481193C03D600AFE823 /* NSString */, - AB6AB486193C03D600AFE823 /* UIButton */, - AB6AB489193C03D600AFE823 /* UIImage */, - AB6AB496193C03D600AFE823 /* UIScrollView */, - AB6AB499193C03D600AFE823 /* UIView */, - ); - path = Categorys; - sourceTree = ""; - }; - AB6AB481193C03D600AFE823 /* NSString */ = { - isa = PBXGroup; - children = ( - AB6AB482193C03D600AFE823 /* NSString+MessageInputView.h */, - AB6AB483193C03D600AFE823 /* NSString+MessageInputView.m */, - AB6AB484193C03D600AFE823 /* NSString+XHMD5.h */, - AB6AB485193C03D600AFE823 /* NSString+XHMD5.m */, - ABB839E7193CCACA003DEE7A /* NSString+XHDiskSizeTransfrom.h */, - ABB839E8193CCACA003DEE7A /* NSString+XHDiskSizeTransfrom.m */, - ); - path = NSString; - sourceTree = ""; - }; - AB6AB486193C03D600AFE823 /* UIButton */ = { - isa = PBXGroup; - children = ( - AB6AB487193C03D600AFE823 /* UIButton+XHButtonTitlePosition.h */, - AB6AB488193C03D600AFE823 /* UIButton+XHButtonTitlePosition.m */, - ); - path = UIButton; - sourceTree = ""; - }; - AB6AB489193C03D600AFE823 /* UIImage */ = { - isa = PBXGroup; - children = ( - AB6AB48A193C03D600AFE823 /* UIImage+Alpha.h */, - AB6AB48B193C03D600AFE823 /* UIImage+Alpha.m */, - AB6AB48C193C03D600AFE823 /* UIImage+Resize.h */, - AB6AB48D193C03D600AFE823 /* UIImage+Resize.m */, - AB6AB48E193C03D600AFE823 /* UIImage+RoundedCorner.h */, - AB6AB48F193C03D600AFE823 /* UIImage+RoundedCorner.m */, - AB6AB490193C03D600AFE823 /* UIImage+Utility.h */, - AB6AB491193C03D600AFE823 /* UIImage+Utility.m */, - AB6AB492193C03D600AFE823 /* UIImage+XHAnimatedFaceGif.h */, - AB6AB493193C03D600AFE823 /* UIImage+XHAnimatedFaceGif.m */, - AB6AB494193C03D600AFE823 /* UIImage+XHRounded.h */, - AB6AB495193C03D600AFE823 /* UIImage+XHRounded.m */, - ); - path = UIImage; - sourceTree = ""; - }; - AB6AB496193C03D600AFE823 /* UIScrollView */ = { - isa = PBXGroup; - children = ( - AB6AB497193C03D600AFE823 /* UIScrollView+XHkeyboardControl.h */, - AB6AB498193C03D600AFE823 /* UIScrollView+XHkeyboardControl.m */, - ); - path = UIScrollView; - sourceTree = ""; - }; - AB6AB499193C03D600AFE823 /* UIView */ = { - isa = PBXGroup; - children = ( - AB6AB49A193C03D600AFE823 /* UIView+XHBadgeView.h */, - AB6AB49B193C03D600AFE823 /* UIView+XHBadgeView.m */, - AB6AB49C193C03D600AFE823 /* UIView+XHRemoteImage.h */, - AB6AB49D193C03D600AFE823 /* UIView+XHRemoteImage.m */, - ); - path = UIView; - sourceTree = ""; - }; - AB72638619328D8000AA738F /* LocationServiceViews */ = { - isa = PBXGroup; - children = ( - AB72638719328D9A00AA738F /* XHLocationServiceTableViewCell.h */, - AB72638819328D9A00AA738F /* XHLocationServiceTableViewCell.m */, - ); - path = LocationServiceViews; - sourceTree = ""; - }; - AB73B16219324630009665E3 /* ScanningView */ = { - isa = PBXGroup; - children = ( - AB73B1631932463E009665E3 /* XHScanningView.h */, - AB73B1641932463E009665E3 /* XHScanningView.m */, - ); - path = ScanningView; - sourceTree = ""; - }; - AB79A206192C0A6400A9B951 /* XHPathCover */ = { - isa = PBXGroup; - children = ( - AB79A207192C0A6400A9B951 /* XHPathCover.h */, - AB79A208192C0A6400A9B951 /* XHPathCover.m */, - AB79A209192C0A6400A9B951 /* XHSoundManager.h */, - AB79A20A192C0A6400A9B951 /* XHSoundManager.m */, - AB79A20B192C0A6400A9B951 /* XHWaterDropRefresh.h */, - AB79A20C192C0A6400A9B951 /* XHWaterDropRefresh.m */, - ); - path = XHPathCover; - sourceTree = ""; - }; - AB79A21A192C22B500A9B951 /* BaseCollectionViewCell */ = { - isa = PBXGroup; - children = ( - AB79A21B192C22F500A9B951 /* XHBaseCollectionViewCell.h */, - AB79A21C192C22F500A9B951 /* XHBaseCollectionViewCell.m */, - ); - path = BaseCollectionViewCell; - sourceTree = ""; - }; - AB89EAE31947ECDE000930AE /* DefaultPlaceholderImage */ = { - isa = PBXGroup; - children = ( - AB89EAE41947ED19000930AE /* avator@2x.png */, - AB89EAE51947ED19000930AE /* placeholderImage@2x.png */, - ); - name = DefaultPlaceholderImage; - sourceTree = ""; - }; - AB8ACCD9192EB04400FA1C80 /* ProfileImages */ = { - isa = PBXGroup; - children = ( - AB8ACCDA192EB04400FA1C80 /* MoreExpressionShops@2x.png */, - AB8ACCDB192EB04400FA1C80 /* MoreMyAlbum@2x.png */, - AB8ACCDC192EB04400FA1C80 /* MoreMyBankCard@2x.png */, - AB8ACCDD192EB04400FA1C80 /* MoreMyFavorites@2x.png */, - AB8ACCDE192EB04400FA1C80 /* MoreSetting@2x.png */, - ); - path = ProfileImages; - sourceTree = ""; - }; - AB8ACCE4192EB09700FA1C80 /* XHMultipleSectionTableViewController */ = { - isa = PBXGroup; - children = ( - AB8ACCE5192EB0A400FA1C80 /* XHMultipleSectionTableViewController.h */, - AB8ACCE6192EB0A400FA1C80 /* XHMultipleSectionTableViewController.m */, - ); - path = XHMultipleSectionTableViewController; - sourceTree = ""; - }; - AB8ACCEA192EBEF200FA1C80 /* XHMoreExpressionShopsTableViewController */ = { - isa = PBXGroup; - children = ( - AB8ACCF0192EBF0C00FA1C80 /* XHMoreExpressionShopsTableViewController.h */, - AB8ACCF1192EBF0C00FA1C80 /* XHMoreExpressionShopsTableViewController.m */, - AB84B5CD1937EEB30069A10C /* XHExpressionDetailTableViewController.h */, - AB84B5CE1937EEB30069A10C /* XHExpressionDetailTableViewController.m */, - ); - path = XHMoreExpressionShopsTableViewController; - sourceTree = ""; - }; - AB8ACCEB192EBEF200FA1C80 /* XHMoreMyAlbumTableViewController */ = { - isa = PBXGroup; - children = ( - AB8ACCF5192EBF1700FA1C80 /* XHMoreMyAlbumTableViewController.h */, - AB8ACCF6192EBF1700FA1C80 /* XHMoreMyAlbumTableViewController.m */, - ); - path = XHMoreMyAlbumTableViewController; - sourceTree = ""; - }; - AB8ACCEC192EBEF200FA1C80 /* XHMoreMyBankCardTableViewController */ = { - isa = PBXGroup; - children = ( - AB8ACCFA192EBF2100FA1C80 /* XHMoreMyBankCardTableViewController.h */, - AB8ACCFB192EBF2100FA1C80 /* XHMoreMyBankCardTableViewController.m */, - ); - path = XHMoreMyBankCardTableViewController; - sourceTree = ""; - }; - AB8ACCED192EBEF200FA1C80 /* XHMoreMyFavoritesTableViewController */ = { - isa = PBXGroup; - children = ( - AB8ACCFF192EBF2C00FA1C80 /* XHMoreMyFavoritesTableViewController.h */, - AB8ACD00192EBF2C00FA1C80 /* XHMoreMyFavoritesTableViewController.m */, - ); - path = XHMoreMyFavoritesTableViewController; - sourceTree = ""; - }; - AB8ACCEE192EBEF200FA1C80 /* XHMoreMyProfileDetailTableViewController */ = { - isa = PBXGroup; - children = ( - AB8ACD04192EBF3600FA1C80 /* XHMoreMyProfileDetailTableViewController.h */, - AB8ACD05192EBF3600FA1C80 /* XHMoreMyProfileDetailTableViewController.m */, - ); - path = XHMoreMyProfileDetailTableViewController; - sourceTree = ""; - }; - AB8ACCEF192EBEF200FA1C80 /* XHMoreSettingTableViewController */ = { - isa = PBXGroup; - children = ( - AB8ACD09192EBF3F00FA1C80 /* XHMoreSettingTableViewController.h */, - AB8ACD0A192EBF3F00FA1C80 /* XHMoreSettingTableViewController.m */, - ); - path = XHMoreSettingTableViewController; - sourceTree = ""; - }; - AB8C80F91936A6F7006CDA9B /* LKBadgeView */ = { - isa = PBXGroup; - children = ( - AB8C80FA1936A6F7006CDA9B /* LKBadgeView.h */, - AB8C80FB1936A6F7006CDA9B /* LKBadgeView.m */, - ); - path = LKBadgeView; - sourceTree = ""; - }; - AB9B0F55193A8623004FA35D /* HorizontalGridView */ = { - isa = PBXGroup; - children = ( - AB9B0F56193A8630004FA35D /* XHHorizontalGridView.h */, - AB9B0F57193A8630004FA35D /* XHHorizontalGridView.m */, - AB9B0F5B193A8649004FA35D /* XHHorizontalGridItem.h */, - AB9B0F5C193A8649004FA35D /* XHHorizontalGridItem.m */, - AB9B0F60193A88AD004FA35D /* XHHorizontalGridItemView.h */, - AB9B0F61193A88AD004FA35D /* XHHorizontalGridItemView.m */, - ); - path = HorizontalGridView; - sourceTree = ""; - }; - ABB5472419394D47000D3C9C /* Core */ = { - isa = PBXGroup; - children = ( - ABB5472519394D47000D3C9C /* Cache */, - ABB5472A19394D47000D3C9C /* Network */, - ); - path = Core; - sourceTree = ""; - }; - ABB5472519394D47000D3C9C /* Cache */ = { - isa = PBXGroup; - children = ( - ABB5472619394D47000D3C9C /* XHCacheManager.h */, - ABB5472719394D47000D3C9C /* XHCacheManager.m */, - ABB5472819394D47000D3C9C /* XHFileAttribute.h */, - ABB5472919394D47000D3C9C /* XHFileAttribute.m */, - ); - path = Cache; - sourceTree = ""; - }; - ABB5472A19394D47000D3C9C /* Network */ = { - isa = PBXGroup; - children = ( - ABB5473119394D7C000D3C9C /* XHHTTPClient.h */, - ABB5473219394D7C000D3C9C /* XHHTTPClient.m */, - AB94CDBA194688FB0010F0D7 /* XHOperationNetworkKit.h */, - AB94CDBB194688FB0010F0D7 /* XHOperationNetworkKit.m */, - ); - path = Network; - sourceTree = ""; - }; - ABB777191932A7D700F4ACAF /* ContactImages */ = { - isa = PBXGroup; - children = ( - ABB7771A1932A7D700F4ACAF /* Contact_Female@2x.png */, - ABB7771B1932A7D700F4ACAF /* Contact_Male@2x.png */, - ABCB356619342DFA002F9938 /* VoiceImages */, - ); - path = ContactImages; - sourceTree = ""; - }; - ABCB356619342DFA002F9938 /* VoiceImages */ = { - isa = PBXGroup; - children = ( - ABCB356719342DFA002F9938 /* VoiceSearchBtn@2x.png */, - ABCB356819342DFA002F9938 /* VoiceSearchBtn_ios7@2x.png */, - ABCB356919342DFA002F9938 /* VoiceSearchBtnHL@2x.png */, - ABCB356A19342DFA002F9938 /* VoiceSearchBtnHL_ios7@2x.png */, - ABCB356B19342DFA002F9938 /* VoiceSearchFeedback003@2x.png */, - ABCB356C19342DFA002F9938 /* VoiceSearchFeedback003_ios7@2x.png */, - ABCB356D19342DFA002F9938 /* VoiceSearchFeedback004@2x.png */, - ABCB356E19342DFA002F9938 /* VoiceSearchFeedback004_ios7@2x.png */, - ABCB356F19342DFA002F9938 /* VoiceSearchFeedback005@2x.png */, - ABCB357019342DFA002F9938 /* VoiceSearchFeedback005_ios7@2x.png */, - ABCB357119342DFA002F9938 /* VoiceSearchFeedback006@2x.png */, - ABCB357219342DFA002F9938 /* VoiceSearchFeedback006_ios7@2x.png */, - ABCB357319342DFA002F9938 /* VoiceSearchFeedback007@2x.png */, - ABCB357419342DFA002F9938 /* VoiceSearchFeedback007_ios7@2x.png */, - ABCB357519342DFA002F9938 /* VoiceSearchFeedback008@2x.png */, - ABCB357619342DFA002F9938 /* VoiceSearchFeedback008_ios7@2x.png */, - ABCB357719342DFA002F9938 /* VoiceSearchFeedback009@2x.png */, - ABCB357819342DFA002F9938 /* VoiceSearchFeedback009_ios7@2x.png */, - ABCB357919342DFA002F9938 /* VoiceSearchFeedback010@2x.png */, - ABCB357A19342DFA002F9938 /* VoiceSearchFeedback010_ios7@2x.png */, - ABCB357B19342DFA002F9938 /* VoiceSearchFeedback011@2x.png */, - ABCB357C19342DFA002F9938 /* VoiceSearchFeedback011_ios7@2x.png */, - ABCB357D19342DFA002F9938 /* VoiceSearchFeedback012@2x.png */, - ABCB357E19342DFA002F9938 /* VoiceSearchFeedback012_ios7@2x.png */, - ABCB357F19342DFA002F9938 /* VoiceSearchFeedback013@2x.png */, - ABCB358019342DFA002F9938 /* VoiceSearchFeedback013_ios7@2x.png */, - ABCB358119342DFA002F9938 /* VoiceSearchFeedback014@2x.png */, - ABCB358219342DFA002F9938 /* VoiceSearchFeedback014_ios7@2x.png */, - ABCB358319342DFA002F9938 /* VoiceSearchFeedback015@2x.png */, - ABCB358419342DFA002F9938 /* VoiceSearchFeedback015_ios7@2x.png */, - ABCB358519342DFA002F9938 /* VoiceSearchFeedback016@2x.png */, - ABCB358619342DFA002F9938 /* VoiceSearchFeedback016_ios7@2x.png */, - ABCB358719342DFA002F9938 /* VoiceSearchFeedback017@2x.png */, - ABCB358819342DFA002F9938 /* VoiceSearchFeedback017_ios7@2x.png */, - ABCB358919342DFA002F9938 /* VoiceSearchFeedback018@2x.png */, - ABCB358A19342DFA002F9938 /* VoiceSearchFeedback018_ios7@2x.png */, - ABCB358B19342DFA002F9938 /* VoiceSearchFeedback019@2x.png */, - ABCB358C19342DFA002F9938 /* VoiceSearchFeedback019_ios7@2x.png */, - ABCB358D19342DFA002F9938 /* VoiceSearchFeedback020@2x.png */, - ABCB358E19342DFA002F9938 /* VoiceSearchFeedback020_ios7@2x.png */, - ABCB358F19342DFA002F9938 /* VoiceSearchIcon@2x.png */, - ABCB359019342DFA002F9938 /* VoiceSearchIcon_ios7@2x.png */, - ABCB359119342DFA002F9938 /* VoiceSearchIconHL@2x.png */, - ABCB359219342DFA002F9938 /* VoiceSearchIconHL_ios7@2x.png */, - ABCB359319342DFA002F9938 /* VoiceSearchLoading001@2x.png */, - ABCB359419342DFA002F9938 /* VoiceSearchLoading001_ios7@2x.png */, - ABCB359519342DFA002F9938 /* VoiceSearchLoading002@2x.png */, - ABCB359619342DFA002F9938 /* VoiceSearchLoading002_ios7@2x.png */, - ABCB359719342DFA002F9938 /* VoiceSearchLoading003@2x.png */, - ABCB359819342DFA002F9938 /* VoiceSearchLoading003_ios7@2x.png */, - ABCB359919342DFA002F9938 /* VoiceSearchLoading004@2x.png */, - ABCB359A19342DFA002F9938 /* VoiceSearchLoading004_ios7@2x.png */, - ABCB359B19342DFA002F9938 /* VoiceSearchLoading005@2x.png */, - ABCB359C19342DFA002F9938 /* VoiceSearchLoading005_ios7@2x.png */, - ABCB359D19342DFA002F9938 /* VoiceSearchLoading006@2x.png */, - ABCB359E19342DFA002F9938 /* VoiceSearchLoading006_ios7@2x.png */, - ABCB359F19342DFA002F9938 /* VoiceSearchLoading007@2x.png */, - ABCB35A019342DFA002F9938 /* VoiceSearchLoading007_ios7@2x.png */, - ABCB35A119342DFA002F9938 /* VoiceSearchLoading008@2x.png */, - ABCB35A219342DFA002F9938 /* VoiceSearchLoading008_ios7@2x.png */, - ABCB35A319342DFA002F9938 /* VoiceSearchLoading009@2x.png */, - ABCB35A419342DFA002F9938 /* VoiceSearchLoading009_ios7@2x.png */, - ABCB35A519342DFA002F9938 /* VoiceSearchLoading010@2x.png */, - ABCB35A619342DFA002F9938 /* VoiceSearchLoading010_ios7@2x.png */, - ABCB35A719342DFA002F9938 /* VoiceSearchOff.wav */, - ABCB35A819342DFA002F9938 /* VoiceSearchOn.wav */, - ABCB35A919342DFA002F9938 /* VoiceSearchStartBtn@2x.png */, - ABCB35AA19342DFA002F9938 /* VoiceSearchStartBtnHL@2x.png */, - ); - path = VoiceImages; - sourceTree = ""; - }; - ABE83CC31937DD4A00BBF653 /* MoreExpressionShopsView */ = { - isa = PBXGroup; - children = ( - ABE83CC41937DD5D00BBF653 /* XHMoreExpressionShopsTableViewCell.h */, - ABE83CC51937DD5D00BBF653 /* XHMoreExpressionShopsTableViewCell.m */, - ); - path = MoreExpressionShopsView; - sourceTree = ""; - }; - ABE83CC91937E00E00BBF653 /* EmotionImages */ = { - isa = PBXGroup; - children = ( - 7DA2EC9D19457A2D00B009FC /* emoticons */, - ABB76E281937ED7300E62A2E /* emotionShopOne@2x.png */, - ABB76E291937ED7300E62A2E /* emotionShopTwo@2x.png */, - ABB76E2A1937ED7300E62A2E /* emotionShopOther@2x.png */, - ABE83CCA1937E00E00BBF653 /* EmotionDownload@2x.png */, - ABE83CD41937E57F00BBF653 /* EmotionDownloadComplete@2x.png */, - ABE83CCB1937E00E00BBF653 /* EmotionListNewTips@2x.png */, - ABE83CCC1937E00E00BBF653 /* GreenBtn@2x.png */, - ABE83CD01937E4FF00BBF653 /* EmoStoreDownloadBtn@2x.png */, - ABE83CD11937E4FF00BBF653 /* EmoStoreDownloadBtnHL@2x.png */, - ); - path = EmotionImages; - sourceTree = ""; - }; - ABEC512A193A8497004954E3 /* GameImages */ = { - isa = PBXGroup; - children = ( - ABEC512B193A8497004954E3 /* dgame1.png */, - ABEC512C193A8497004954E3 /* dgame2.png */, - ABEC512D193A8497004954E3 /* dgame0.png */, - ABEC512E193A8497004954E3 /* game1.png */, - ABEC512F193A8497004954E3 /* game2.png */, - ABEC5130193A8497004954E3 /* game3.png */, - ); - path = GameImages; - sourceTree = ""; - }; - ABF9EC0219324D64003B95DC /* ScanningImages */ = { - isa = PBXGroup; - children = ( - ABF9EC0319324D64003B95DC /* ScanBook@2x.png */, - ABF9EC0419324D64003B95DC /* ScanBook_HL@2x.png */, - ABF9EC0519324D64003B95DC /* ScanQR1@2x.png */, - ABF9EC0619324D64003B95DC /* ScanQR2@2x.png */, - ABF9EC0719324D64003B95DC /* ScanQR3@2x.png */, - ABF9EC0819324D64003B95DC /* ScanQR4@2x.png */, - ABF9EC0919324D64003B95DC /* ScanQRCode@2x.png */, - ABF9EC0A19324D64003B95DC /* ScanQRCode_HL@2x.png */, - ABF9EC0B19324D64003B95DC /* ScanStreet@2x.png */, - ABF9EC0C19324D64003B95DC /* ScanStreet_HL@2x.png */, - ABF9EC0D19324D64003B95DC /* ScanWord@2x.png */, - ABF9EC0E19324D64003B95DC /* ScanWord_HL@2x.png */, - ); - path = ScanningImages; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXHeadersBuildPhase section */ - 74180BD2190F447100A35C82 /* Headers */ = { - isa = PBXHeadersBuildPhase; - buildActionMask = 2147483647; - files = ( - 74180C0F190F44F600A35C82 /* XHFoundationCommon.h in Headers */, - 74180C13190F450200A35C82 /* XHMessageModel.h in Headers */, - 746C892F1917F691007F9A5E /* XHBubblePhotoImageView.h in Headers */, - 746C89351917F691007F9A5E /* XHMessageDisplayTextView.h in Headers */, - 746C893E1917F691007F9A5E /* XHMessageInputView.h in Headers */, - 746C89471917F691007F9A5E /* XHEmotionCollectionViewFlowLayout.h in Headers */, - 746C89321917F691007F9A5E /* XHMessageBubbleView.h in Headers */, - 746C89501917F691007F9A5E /* XHShareMenuView.h in Headers */, - 746C89381917F691007F9A5E /* XHMessageTableView.h in Headers */, - 746C89441917F691007F9A5E /* XHEmotionCollectionViewCell.h in Headers */, - 746C894D1917F691007F9A5E /* XHEmotionSectionBar.h in Headers */, - 746C894A1917F691007F9A5E /* XHEmotionManagerView.h in Headers */, - AB94CDBC194688FB0010F0D7 /* XHOperationNetworkKit.h in Headers */, - 746C89411917F691007F9A5E /* XHMessageTextView.h in Headers */, - 746C893B1917F691007F9A5E /* XHMessageTableViewCell.h in Headers */, - 74065FB919123E1C00E1CE95 /* XHShareMenuItem.h in Headers */, - 740660CD1914E1F400E1CE95 /* XHEmotionManager.h in Headers */, - 740660B41914CA0000E1CE95 /* XHPhotographyHelper.h in Headers */, - 746C89871917F8EA007F9A5E /* XHBaseTableViewController.h in Headers */, - 746C897D1917F8C5007F9A5E /* XHBaseTabBarController.h in Headers */, - 746C89781917F8B2007F9A5E /* XHBaseNavigationController.h in Headers */, - 740660BE1914D65600E1CE95 /* XHEmotion.h in Headers */, - 74E5E9891921317B0084BCFA /* XHVoiceRecordHelper.h in Headers */, - 746C895B1917F7B4007F9A5E /* XHMessageTableViewController.h in Headers */, - 74E5EAD61924FFBE0084BCFA /* SESelectionGrabber.h in Headers */, - 74E5EAEE1924FFBE0084BCFA /* SETextSelection.h in Headers */, - 74E5EAF11924FFBE0084BCFA /* SETextSelectionView.h in Headers */, - 74E5EAE51924FFBE0084BCFA /* SETextLayout.h in Headers */, - 74E5EACD1924FFBE0084BCFA /* SEConstants.h in Headers */, - 74E5EAE21924FFBE0084BCFA /* SETextInput.h in Headers */, - 74E5EAD31924FFBE0084BCFA /* SELinkText.h in Headers */, - 74E5EAF41924FFBE0084BCFA /* SETextView.h in Headers */, - 74E5EAD01924FFBE0084BCFA /* SELineLayout.h in Headers */, - 74E5EAEB1924FFBE0084BCFA /* SETextMagnifierRanged.h in Headers */, - 74E5EAD91924FFBE0084BCFA /* SETextAttachment.h in Headers */, - 74E5EACA1924FFBE0084BCFA /* SECompatibility.h in Headers */, - 74E5EAE81924FFBE0084BCFA /* SETextMagnifierCaret.h in Headers */, - 74E5EADF1924FFBE0084BCFA /* SETextGeometry.h in Headers */, - 74E5EADC1924FFBE0084BCFA /* SETextEditingCaret.h in Headers */, - 74E5EAC71924FFBE0084BCFA /* NSMutableAttributedString+Helper.h in Headers */, - 74901A3F191D3B1C0049AFF9 /* XHProfileTableViewController.h in Headers */, - 74180C14190F450400A35C82 /* XHMessage.h in Headers */, - 74E9003819278F6700D37C81 /* XHDiscoverTableViewController.h in Headers */, - 74C3E7D1192919360053F4E1 /* XHAlbumTableViewCell.h in Headers */, - 74E9003319278F5C00D37C81 /* XHContactTableViewController.h in Headers */, - 74C3E7DB19291A1A0053F4E1 /* XHAlbum.h in Headers */, - 74E900B31928F3D100D37C81 /* XHStoreManager.h in Headers */, - 74C3E7D6192919930053F4E1 /* XHAlbumRichTextView.h in Headers */, - 74585F3E191B999B00F5E8C8 /* XHLocationHelper.h in Headers */, - 74585FFD191D10CC00F5E8C8 /* XHAnnotation.h in Headers */, - 7D06CA71192B3D9B00DF8C04 /* XHBaseTableViewCell.h in Headers */, - AB79A21D192C22F500A9B951 /* XHBaseCollectionViewCell.h in Headers */, - AB79A222192C231C00A9B951 /* XHAlbumPhotoCollectionViewCell.h in Headers */, - AB79A213192C0A6400A9B951 /* XHWaterDropRefresh.h in Headers */, - AB79A20D192C0A6400A9B951 /* XHPathCover.h in Headers */, - 7D13FC5E192C4F4000A23413 /* XHZoomingImageView.h in Headers */, - 7D13FC5B192C4F4000A23413 /* XHViewState.h in Headers */, - 7D13FC58192C4F4000A23413 /* XHImageViewer.h in Headers */, - 7D149FFA192DEB5D004B4D3B /* XHContactTableViewCell.h in Headers */, - AB44D41B192D8BB50069A210 /* XHContact.h in Headers */, - AB02A9F5192D8DC5004AA23D /* XHBaseSearchTableViewController.h in Headers */, - AB439973192C278400EC5E0D /* XHAlbumCollectionViewFlowLayout.h in Headers */, - AB79A210192C0A6400A9B951 /* XHSoundManager.h in Headers */, - AB8ACD0B192EBF3F00FA1C80 /* XHMoreSettingTableViewController.h in Headers */, - AB8ACD06192EBF3600FA1C80 /* XHMoreMyProfileDetailTableViewController.h in Headers */, - AB8ACD01192EBF2C00FA1C80 /* XHMoreMyFavoritesTableViewController.h in Headers */, - AB8ACCFC192EBF2100FA1C80 /* XHMoreMyBankCardTableViewController.h in Headers */, - AB8ACCF2192EBF0C00FA1C80 /* XHMoreExpressionShopsTableViewController.h in Headers */, - AB8ACCF7192EBF1700FA1C80 /* XHMoreMyAlbumTableViewController.h in Headers */, - AB372905192EC62C0084D7B5 /* XHBottleViewController.h in Headers */, - AB37290B192EC62C0084D7B5 /* XHMoreGameTableViewController.h in Headers */, - AB37290E192EC62C0084D7B5 /* XHQRCodeViewController.h in Headers */, - AB372908192EC62C0084D7B5 /* XHLocationServiceTableViewController.h in Headers */, - AB372911192EC62C0084D7B5 /* XHShakeViewController.h in Headers */, - AB372902192EC62C0084D7B5 /* XHAlbumTableViewController.h in Headers */, - AB8ACCE7192EB0A400FA1C80 /* XHMultipleSectionTableViewController.h in Headers */, - 7D14A000192DF30C004B4D3B /* XHUIKitMacro.h in Headers */, - AB372923192EC6800084D7B5 /* XHDisplayLocationViewController.h in Headers */, - AB372929192EC6800084D7B5 /* XHDisplayTextViewController.h in Headers */, - AB372926192EC6800084D7B5 /* XHDisplayMediaViewController.h in Headers */, - AB372920192EC6800084D7B5 /* XHDisplayEmotionViewController.h in Headers */, - ABB494041930086C000A2680 /* XHContactCommunicationView.h in Headers */, - AB5493961931102E001F2FCC /* XHContactPhotosTableViewCell.h in Headers */, - 7D14A009192EFD33004B4D3B /* XHContactView.h in Headers */, - 7D149FFE192DF2CA004B4D3B /* XHFoundationMacro.h in Headers */, - 7D14A004192EF8FD004B4D3B /* XHContactDetailTableViewController.h in Headers */, - 74901A45191D4CD30049AFF9 /* XHBaseViewController.h in Headers */, - AB726383193281CA00AA738F /* XHCaptureHelper.h in Headers */, - AB73B1651932463E009665E3 /* XHScanningView.h in Headers */, - AB54939B193110BD001F2FCC /* XHContactPhotosView.h in Headers */, - AB84B5CF1937EEB30069A10C /* XHExpressionDetailTableViewController.h in Headers */, - AB63BF171936B35400B6C977 /* XHNewsTemplateTableViewCell.h in Headers */, - AB63BF2A1936BE5400B6C977 /* XHNewsContainerView.h in Headers */, - AB63BF251936B66400B6C977 /* XHNewsTableViewController.h in Headers */, - AB63BF1C1936B4C800B6C977 /* XHNewsTemplateContainerView.h in Headers */, - ABE83CC61937DD5D00BBF653 /* XHMoreExpressionShopsTableViewCell.h in Headers */, - AB8C80FC1936A6F7006CDA9B /* LKBadgeView.h in Headers */, - AB6AB4AA193C03D600AFE823 /* UIImage+Resize.h in Headers */, - AB6AB4B6193C03D600AFE823 /* UIImage+XHRounded.h in Headers */, - AB6AB4A7193C03D600AFE823 /* UIImage+Alpha.h in Headers */, - AB6AB4BC193C03D600AFE823 /* UIView+XHBadgeView.h in Headers */, - AB6AB4A4193C03D600AFE823 /* UIButton+XHButtonTitlePosition.h in Headers */, - AB6AB49E193C03D600AFE823 /* NSString+MessageInputView.h in Headers */, - AB6AB4B3193C03D600AFE823 /* UIImage+XHAnimatedFaceGif.h in Headers */, - AB6AB4BF193C03D600AFE823 /* UIView+XHRemoteImage.h in Headers */, - AB6AB4B9193C03D600AFE823 /* UIScrollView+XHkeyboardControl.h in Headers */, - AB6AB4B0193C03D600AFE823 /* UIImage+Utility.h in Headers */, - AB6AB4A1193C03D600AFE823 /* NSString+XHMD5.h in Headers */, - AB6AB4AD193C03D600AFE823 /* UIImage+RoundedCorner.h in Headers */, - AB41A57E194273150095C12C /* XHMessageBubbleFactory.h in Headers */, - ABA8846F193D00BA00413CEC /* XHMessageBubbleHelper.h in Headers */, - AB41A581194273150095C12C /* XHMessageVideoConverPhotoFactory.h in Headers */, - AB41A587194273150095C12C /* XHVideoOutputSampleBufferFactory.h in Headers */, - AB41A584194273150095C12C /* XHMessageVoiceFactory.h in Headers */, - AB41A57B194273150095C12C /* XHMessageAvatorFactory.h in Headers */, - ABB839E9193CCACA003DEE7A /* NSString+XHDiskSizeTransfrom.h in Headers */, - AB72638919328D9A00AA738F /* XHLocationServiceTableViewCell.h in Headers */, - 74E5E9951921E90A0084BCFA /* XHVoiceRecordHUD.h in Headers */, - 7DA2EC5D19455EF100B009FC /* MLLetterIndexNavigationItem.h in Headers */, - 7D0AAFE61943179A00988FC3 /* XHPopMenu.h in Headers */, - 7D0AAFEB194319A500988FC3 /* XHPopMenuItem.h in Headers */, - 7DA2EC6019455EF100B009FC /* MLLetterIndexNavigationView.h in Headers */, - 7DA2EC7519455EF100B009FC /* MultiSelectViewController.h in Headers */, - 7DA2EC6819455EF100B009FC /* MultiSelectItem.h in Headers */, - 7DA2EC7819455EF100B009FC /* UIView+Convenience.h in Headers */, - 7DA2EC7019455EF100B009FC /* MultiSelectTableViewCell.h in Headers */, - 7D0AAFF019431A9400988FC3 /* XHPopMenuItemView.h in Headers */, - 7DA2EC6B19455EF100B009FC /* MultiSelectSearchResultTableViewCell.h in Headers */, - 7DA2EC6319455EF100B009FC /* MultiSelectedPanel.h in Headers */, - ABB5472B19394D47000D3C9C /* XHCacheManager.h in Headers */, - ABBA5D0C19427D96008BA06D /* XHRefreshControl.h in Headers */, - AB41A592194274950095C12C /* XHRefreshCircleView.h in Headers */, - AB41A58C194274240095C12C /* XHPullRefreshTableViewController.h in Headers */, - AB41A597194274AC0095C12C /* XHRefreshView.h in Headers */, - AB41A59C194279380095C12C /* XHLoadMoreView.h in Headers */, - AB9B0F62193A88AD004FA35D /* XHHorizontalGridItemView.h in Headers */, - AB9B0F58193A8630004FA35D /* XHHorizontalGridView.h in Headers */, - 7DA2EC9A194577EA00B009FC /* FLAnimatedImageView.h in Headers */, - 7DA2EC97194577EA00B009FC /* FLAnimatedImage.h in Headers */, - AB9B0F5D193A8649004FA35D /* XHHorizontalGridItem.h in Headers */, - ABB5472E19394D47000D3C9C /* XHFileAttribute.h in Headers */, - ABB5473319394D7C000D3C9C /* XHHTTPClient.h in Headers */, - 74180C0C190F44ED00A35C82 /* XHMacro.h in Headers */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXHeadersBuildPhase section */ - -/* Begin PBXNativeTarget section */ - 74180BD5190F447100A35C82 /* MessageDisplayFramework */ = { - isa = PBXNativeTarget; - buildConfigurationList = 74180BF8190F447100A35C82 /* Build configuration list for PBXNativeTarget "MessageDisplayFramework" */; - buildPhases = ( - 74180BD0190F447100A35C82 /* Sources */, - 74180BD1190F447100A35C82 /* Frameworks */, - 74180BD2190F447100A35C82 /* Headers */, - 74180BD3190F447100A35C82 /* Resources */, - 74180BD4190F447100A35C82 /* ShellScript */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = MessageDisplayFramework; - productName = MessageDisplayFramework; - productReference = 74180BD6190F447100A35C82 /* MessageDisplayFramework.framework */; - productType = "com.apple.product-type.bundle"; - }; - 74180BE4190F447100A35C82 /* MessageDisplayFrameworkTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 74180BF9190F447100A35C82 /* Build configuration list for PBXNativeTarget "MessageDisplayFrameworkTests" */; - buildPhases = ( - 74180BE1190F447100A35C82 /* Sources */, - 74180BE2190F447100A35C82 /* Frameworks */, - 74180BE3190F447100A35C82 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 74180BEA190F447100A35C82 /* PBXTargetDependency */, - ); - name = MessageDisplayFrameworkTests; - productName = MessageDisplayFrameworkTests; - productReference = 74180BE5190F447100A35C82 /* MessageDisplayFrameworkTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; - 748245001908C730008EC388 /* MessageDisplayExample */ = { - isa = PBXNativeTarget; - buildConfigurationList = 7482452D1908C730008EC388 /* Build configuration list for PBXNativeTarget "MessageDisplayExample" */; - buildPhases = ( - 748244FD1908C730008EC388 /* Sources */, - 748244FF1908C730008EC388 /* Resources */, - 748244FE1908C730008EC388 /* Frameworks */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = MessageDisplayExample; - productName = MessageDisplayExample; - productReference = 748245011908C730008EC388 /* MessageDisplayExample.app */; - productType = "com.apple.product-type.application"; - }; - 7482451B1908C730008EC388 /* MessageDisplayExampleTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 748245301908C730008EC388 /* Build configuration list for PBXNativeTarget "MessageDisplayExampleTests" */; - buildPhases = ( - 748245181908C730008EC388 /* Sources */, - 748245191908C730008EC388 /* Frameworks */, - 7482451A1908C730008EC388 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 748245221908C730008EC388 /* PBXTargetDependency */, - ); - name = MessageDisplayExampleTests; - productName = MessageDisplayExampleTests; - productReference = 7482451C1908C730008EC388 /* MessageDisplayExampleTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 748244F91908C730008EC388 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0510; - ORGANIZATIONNAME = "曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668)."; - TargetAttributes = { - 74180BE4190F447100A35C82 = { - TestTargetID = 748245001908C730008EC388; - }; - 7482451B1908C730008EC388 = { - TestTargetID = 748245001908C730008EC388; - }; - }; - }; - buildConfigurationList = 748244FC1908C730008EC388 /* Build configuration list for PBXProject "MessageDisplayExample" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - "zh-Hans", - ); - mainGroup = 748244F81908C730008EC388; - productRefGroup = 748245021908C730008EC388 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 748245001908C730008EC388 /* MessageDisplayExample */, - 7482451B1908C730008EC388 /* MessageDisplayExampleTests */, - 74180BD5190F447100A35C82 /* MessageDisplayFramework */, - 74180BE4190F447100A35C82 /* MessageDisplayFrameworkTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 74180BD3190F447100A35C82 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 7DA2EC6F19455EF100B009FC /* MultiSelectSearchResultTableViewCell.xib in Resources */, - 74180BDC190F447100A35C82 /* InfoPlist.strings in Resources */, - 7DA2EC6719455EF100B009FC /* MultiSelectedPanel.xib in Resources */, - 7DA2EC7419455EF100B009FC /* MultiSelectTableViewCell.xib in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 74180BE3190F447100A35C82 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 74180BEB190F447100A35C82 /* MessageDisplayFramework.framework in Resources */, - 74180BF1190F447100A35C82 /* InfoPlist.strings in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 748244FF1908C730008EC388 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - ABCB35BF19342DFA002F9938 /* VoiceSearchFeedback011@2x.png in Resources */, - ABCB35BD19342DFA002F9938 /* VoiceSearchFeedback010@2x.png in Resources */, - ABF9EC1519324D64003B95DC /* ScanQRCode@2x.png in Resources */, - 74E5E9A91921F7710084BCFA /* RecordingSignal001@2x.png in Resources */, - 74E900A71927A9C900D37C81 /* bottleStarfish@2x.png in Resources */, - 7DA2EC9119455F5700B009FC /* SearchIcon@2x.png in Resources */, - 74E900A11927A9C900D37C81 /* bottleBoard@2x.png in Resources */, - 74585F3B191B939800F5E8C8 /* MessageVideoPlay@2x.png in Resources */, - 7DA2EC8D19455F5700B009FC /* CellRedSelected@2x.png in Resources */, - 74E900621927940000D37C81 /* ff_IconLocationService@2x.png in Resources */, - 74E9006C1927940000D37C81 /* tabbarBkg@2x.png in Resources */, - 746C88431916B607007F9A5E /* ReceiverVoiceNodePlaying000@2x.png in Resources */, - 74E9009F1927A9C900D37C81 /* bottleBkg@2x.png in Resources */, - 7DA2ECB119457A2D00B009FC /* emotion11.gif in Resources */, - 7DA2ECAF19457A2D00B009FC /* emotion1.gif in Resources */, - 746C885C1916B612007F9A5E /* sharemore_videovoip@2x.png in Resources */, - ABCB35BC19342DFA002F9938 /* VoiceSearchFeedback009_ios7@2x.png in Resources */, - ABCB35B319342DFA002F9938 /* VoiceSearchFeedback005@2x.png in Resources */, - 746C882B1916B5EE007F9A5E /* input-bar-background@2x.png in Resources */, - ABF9EC1619324D64003B95DC /* ScanQRCode_HL@2x.png in Resources */, - ABCB35B019342DFA002F9938 /* VoiceSearchFeedback003_ios7@2x.png in Resources */, - 74E9009B1927A81500D37C81 /* bottleNightBkg@2x.png in Resources */, - 7DA2ECB819457A2D00B009FC /* emotion2.gif in Resources */, - ABCB35D819342DFA002F9938 /* VoiceSearchLoading001_ios7@2x.png in Resources */, - ABCB35D519342DFA002F9938 /* VoiceSearchIconHL@2x.png in Resources */, - AB569AB3193179CC0007DB0B /* Shake_Line_Down@2x.png in Resources */, - ABB76E2C1937ED7300E62A2E /* emotionShopTwo@2x.png in Resources */, - 746C88711916B62D007F9A5E /* section0_emotion0@2x.png in Resources */, - 746C88581916B612007F9A5E /* sharemore_myfav@2x.png in Resources */, - 7DA2EC6619455EF100B009FC /* MultiSelectedPanel.xib in Resources */, - 74E9006B1927940000D37C81 /* SNS@2x.png in Resources */, - 746C88731916B62D007F9A5E /* section0_emotion2@2x.png in Resources */, - AB569AAF193179CC0007DB0B /* Shake_icon_music@2x.png in Resources */, - AB8ACCE1192EB04400FA1C80 /* MoreMyBankCard@2x.png in Resources */, - 746C88371916B5FE007F9A5E /* weChatBubble_Sending_Solid@2x.png in Resources */, - 746C881F1916B5D6007F9A5E /* keyborad@2x.png in Resources */, - ABCB35E119342DFA002F9938 /* VoiceSearchLoading006@2x.png in Resources */, - 7DA2ECBA19457A2D00B009FC /* emotion4.gif in Resources */, - 746C882C1916B5EE007F9A5E /* input-bar-flat.png in Resources */, - ABE83CD51937E57F00BBF653 /* EmotionDownloadComplete@2x.png in Resources */, - 746C887C1916B62D007F9A5E /* section0_emotion11@2x.png in Resources */, - AB7263931932944400AA738F /* Shake_Logo_Female_Up@2x.png in Resources */, - 7DA2ECB019457A2D00B009FC /* emotion10.gif in Resources */, - 74E900AC1927ABF800D37C81 /* fishwater2@2x.png in Resources */, - 746C88771916B62D007F9A5E /* section0_emotion6@2x.png in Resources */, - 74E900631927940000D37C81 /* ff_IconQRCode@2x.png in Resources */, - ABCB35CE19342DFA002F9938 /* VoiceSearchFeedback018_ios7@2x.png in Resources */, - 74E5E9AA1921F7710084BCFA /* RecordingSignal002@2x.png in Resources */, - AB713842193195A3009792B5 /* shake_match.wav in Resources */, - ABCB35E919342DFA002F9938 /* VoiceSearchLoading010@2x.png in Resources */, - ABCB35DB19342DFA002F9938 /* VoiceSearchLoading003@2x.png in Resources */, - ABF9EC1719324D64003B95DC /* ScanStreet@2x.png in Resources */, - ABCB35EE19342DFA002F9938 /* VoiceSearchStartBtnHL@2x.png in Resources */, - 7DA2EC8819455F5700B009FC /* AddGroupMemberBtnHL@2x.png in Resources */, - 74E5E9AD1921F7710084BCFA /* RecordingSignal005@2x.png in Resources */, - 7482450F1908C730008EC388 /* InfoPlist.strings in Resources */, - ABCB35D719342DFA002F9938 /* VoiceSearchLoading001@2x.png in Resources */, - 7DA2ECBD19457A2D00B009FC /* emotion7.gif in Resources */, - AB0C4AD61943B6BB00D346FF /* contacts_add_newmessage@2x.png in Resources */, - 74E900A01927A9C900D37C81 /* bottleBkgSpotLight@2x.png in Resources */, - ABF9EC1A19324D64003B95DC /* ScanWord_HL@2x.png in Resources */, - AB89EAE61947ED19000930AE /* avator@2x.png in Resources */, - 74E5E9B21921F7710084BCFA /* RecordCancel@2x.png in Resources */, - ABCB35CB19342DFA002F9938 /* VoiceSearchFeedback017@2x.png in Resources */, - 746C88441916B607007F9A5E /* ReceiverVoiceNodePlaying001@2x.png in Resources */, - ABCB35DA19342DFA002F9938 /* VoiceSearchLoading002_ios7@2x.png in Resources */, - AB79A219192C0B1500A9B951 /* pullrefresh.aif in Resources */, - 746C88721916B62D007F9A5E /* section0_emotion1@2x.png in Resources */, - ABCB35C719342DFA002F9938 /* VoiceSearchFeedback015@2x.png in Resources */, - AB8ACCDF192EB04400FA1C80 /* MoreExpressionShops@2x.png in Resources */, - 746C882D1916B5EE007F9A5E /* input-bar-flat@2x.png in Resources */, - ABCB35BA19342DFA002F9938 /* VoiceSearchFeedback008_ios7@2x.png in Resources */, - ABCB35EB19342DFA002F9938 /* VoiceSearchOff.wav in Resources */, - 746C887E1916B62D007F9A5E /* section0_emotion13@2x.png in Resources */, - ABEC5131193A8497004954E3 /* dgame1.png in Resources */, - ABCB35CF19342DFA002F9938 /* VoiceSearchFeedback019@2x.png in Resources */, - AB713843193195A3009792B5 /* shake_nomatch.wav in Resources */, - 7DA2ECB619457A2D00B009FC /* emotion16.gif in Resources */, - ABCB35DF19342DFA002F9938 /* VoiceSearchLoading005@2x.png in Resources */, - ABF9EC1819324D64003B95DC /* ScanStreet_HL@2x.png in Resources */, - ABCB35DC19342DFA002F9938 /* VoiceSearchLoading003_ios7@2x.png in Resources */, - ABCB35AF19342DFA002F9938 /* VoiceSearchFeedback003@2x.png in Resources */, - ABCB35B219342DFA002F9938 /* VoiceSearchFeedback004_ios7@2x.png in Resources */, - 7DA2ECB419457A2D00B009FC /* emotion14.gif in Resources */, - ABCB35D619342DFA002F9938 /* VoiceSearchIconHL_ios7@2x.png in Resources */, - 7DA2ECB519457A2D00B009FC /* emotion15.gif in Resources */, - 7DA2ECB319457A2D00B009FC /* emotion13.gif in Resources */, - 746C88211916B5D6007F9A5E /* multiMedia@2x.png in Resources */, - 746C88221916B5D6007F9A5E /* voice_HL@2x.png in Resources */, - 7DA2EC8B19455F5700B009FC /* CellGraySelected@2x.png in Resources */, - 746C882E1916B5EE007F9A5E /* input-field-cover.png in Resources */, - ABCB35CD19342DFA002F9938 /* VoiceSearchFeedback018@2x.png in Resources */, - ABCB35ED19342DFA002F9938 /* VoiceSearchStartBtn@2x.png in Resources */, - 7DA2EC8A19455F5700B009FC /* CellBlueSelected@2x.png in Resources */, - 746C88341916B5FE007F9A5E /* weChatBubble_Receiving_Cavern@2x.png in Resources */, - ABCB35DD19342DFA002F9938 /* VoiceSearchLoading004@2x.png in Resources */, - 746C887F1916B62D007F9A5E /* section0_emotion14@2x.png in Resources */, - 74E900AB1927ABF800D37C81 /* fishwater@2x.png in Resources */, - 746C88351916B5FE007F9A5E /* weChatBubble_Receiving_Solid@2x.png in Resources */, - ABCB35E219342DFA002F9938 /* VoiceSearchLoading006_ios7@2x.png in Resources */, - ABCB35C519342DFA002F9938 /* VoiceSearchFeedback014@2x.png in Resources */, - AB569AB5193179CC0007DB0B /* Shake_Logo_Down@2x.png in Resources */, - 746C88751916B62D007F9A5E /* section0_emotion4@2x.png in Resources */, - 746C88561916B612007F9A5E /* sharemore_friendcard@2x.png in Resources */, - 74E5E9B01921F7710084BCFA /* RecordingSignal008@2x.png in Resources */, - ABF9EC1019324D64003B95DC /* ScanBook_HL@2x.png in Resources */, - ABCB35E419342DFA002F9938 /* VoiceSearchLoading007_ios7@2x.png in Resources */, - ABE83CCF1937E00E00BBF653 /* GreenBtn@2x.png in Resources */, - 746C881E1916B5D6007F9A5E /* keyborad_HL@2x.png in Resources */, - 746C88741916B62D007F9A5E /* section0_emotion3@2x.png in Resources */, - AB72638F193293DC00AA738F /* barbuttonicon_set@2x.png in Resources */, - 746C884A1916B607007F9A5E /* SenderVoiceNodePlaying002@2x.png in Resources */, - 7DA2ECB219457A2D00B009FC /* emotion12.gif in Resources */, - ABF9EC1119324D64003B95DC /* ScanQR1@2x.png in Resources */, - 746C88481916B607007F9A5E /* SenderVoiceNodePlaying000@2x.png in Resources */, - ABCB35D219342DFA002F9938 /* VoiceSearchFeedback020_ios7@2x.png in Resources */, - ABCB35B119342DFA002F9938 /* VoiceSearchFeedback004@2x.png in Resources */, - 746C881C1916B5D6007F9A5E /* face@2x.png in Resources */, - ABE87CD5192D6D7F00EC1E49 /* AlbumOperateMoreHL@2x.png in Resources */, - ABEC5134193A8497004954E3 /* game1.png in Resources */, - 746C887B1916B62D007F9A5E /* section0_emotion10@2x.png in Resources */, - ABCB35D419342DFA002F9938 /* VoiceSearchIcon_ios7@2x.png in Resources */, - ABCB35AC19342DFA002F9938 /* VoiceSearchBtn_ios7@2x.png in Resources */, - 74E5E99B1921EC8C0084BCFA /* VoiceBtn_BlackHL@2x.png in Resources */, - 74E900651927940000D37C81 /* ff_IconShowAlbum@2x.png in Resources */, - ABE87CD4192D6D7F00EC1E49 /* AlbumOperateMore@2x.png in Resources */, - ABCB35C019342DFA002F9938 /* VoiceSearchFeedback011_ios7@2x.png in Resources */, - 746C88361916B5FE007F9A5E /* weChatBubble_Sending_Cavern@2x.png in Resources */, - 746C884B1916B607007F9A5E /* SenderVoiceNodePlaying003@2x.png in Resources */, - ABCB35AE19342DFA002F9938 /* VoiceSearchBtnHL_ios7@2x.png in Resources */, - ABF9EC1319324D64003B95DC /* ScanQR3@2x.png in Resources */, - ABCB35C919342DFA002F9938 /* VoiceSearchFeedback016@2x.png in Resources */, - 7DA2EC8C19455F5700B009FC /* CellNotSelected@2x.png in Resources */, - 746C88781916B62D007F9A5E /* section0_emotion7@2x.png in Resources */, - 7DA2EC7319455EF100B009FC /* MultiSelectTableViewCell.xib in Resources */, - 746C88801916B62D007F9A5E /* section0_emotion15@2x.png in Resources */, - ABCB35D919342DFA002F9938 /* VoiceSearchLoading002@2x.png in Resources */, - AB569AB4193179CC0007DB0B /* Shake_Line_Up@2x.png in Resources */, - AB0C4AD91943B6BB00D346FF /* contacts_add_voip@2x.png in Resources */, - ABCB35C319342DFA002F9938 /* VoiceSearchFeedback013@2x.png in Resources */, - ABF9EC1219324D64003B95DC /* ScanQR2@2x.png in Resources */, - ABB7771C1932A7D700F4ACAF /* Contact_Female@2x.png in Resources */, - 746C88461916B607007F9A5E /* ReceiverVoiceNodePlaying003@2x.png in Resources */, - ABCB35B519342DFA002F9938 /* VoiceSearchFeedback006@2x.png in Resources */, - ABCB35E519342DFA002F9938 /* VoiceSearchLoading008@2x.png in Resources */, - 744FBDC81915EE7400FB4A65 /* Default-568h@2x.png in Resources */, - 7DA2ECBF19457A2D00B009FC /* emotion9.gif in Resources */, - ABE83CCE1937E00E00BBF653 /* EmotionListNewTips@2x.png in Resources */, - 74BBB020190B8EAB00093577 /* MessageDisplayKitString.strings in Resources */, - ABB7771D1932A7D700F4ACAF /* Contact_Male@2x.png in Resources */, - AB0C4AD81943B6BB00D346FF /* contacts_add_scan@2x.png in Resources */, - AB0C4AD51943B6BB00D346FF /* contacts_add_friend@2x.png in Resources */, - 74E900A51927A9C900D37C81 /* bottleRecord@2x.png in Resources */, - 74E900661927940000D37C81 /* MoreGame@2x.png in Resources */, - 74E900611927940000D37C81 /* ff_IconBottle@2x.png in Resources */, - ABCB35C219342DFA002F9938 /* VoiceSearchFeedback012_ios7@2x.png in Resources */, - ABB76E2B1937ED7300E62A2E /* emotionShopOne@2x.png in Resources */, - ABE83CD31937E4FF00BBF653 /* EmoStoreDownloadBtnHL@2x.png in Resources */, - 7DA2ECBB19457A2D00B009FC /* emotion5.gif in Resources */, - 74E9009A1927A81500D37C81 /* bottleButtonThrow@2x.png in Resources */, - 7DA2EC9019455F5700B009FC /* MultiSelectedPanelConfirmBtnbKG@2x.png in Resources */, - ABCB35AB19342DFA002F9938 /* VoiceSearchBtn@2x.png in Resources */, - 746C88471916B607007F9A5E /* SenderVoiceNodePlaying@2x.png in Resources */, - ABCB35BB19342DFA002F9938 /* VoiceSearchFeedback009@2x.png in Resources */, - 74E9006A1927940000D37C81 /* Profile@2x.png in Resources */, - ABEC5132193A8497004954E3 /* dgame2.png in Resources */, - ABCB35B419342DFA002F9938 /* VoiceSearchFeedback005_ios7@2x.png in Resources */, - AB569AB2193179CC0007DB0B /* Shake_icon_peopleHL@2x.png in Resources */, - AB72638E193293DC00AA738F /* barbuttonicon_more@2x.png in Resources */, - AB713844193195A3009792B5 /* shake_sound_male.wav in Resources */, - 746C88821916B64E007F9A5E /* Fav_Cell_Loc@2x.png in Resources */, - ABCB35E619342DFA002F9938 /* VoiceSearchLoading008_ios7@2x.png in Resources */, - ABCB35EC19342DFA002F9938 /* VoiceSearchOn.wav in Resources */, - ABCB35E719342DFA002F9938 /* VoiceSearchLoading009@2x.png in Resources */, - ABF9EC0F19324D64003B95DC /* ScanBook@2x.png in Resources */, - 746C887A1916B62D007F9A5E /* section0_emotion9@2x.png in Resources */, - 7DA2ECB919457A2D00B009FC /* emotion3.gif in Resources */, - ABEC5135193A8497004954E3 /* game2.png in Resources */, - 7DA2ECBE19457A2D00B009FC /* emotion8.gif in Resources */, - 746C885A1916B612007F9A5E /* sharemore_pic@2x.png in Resources */, - ABF9EC1419324D64003B95DC /* ScanQR4@2x.png in Resources */, - 746C885F1916B612007F9A5E /* sharemore_wxtalk@2x.png in Resources */, - 74E5E9AF1921F7710084BCFA /* RecordingSignal007@2x.png in Resources */, - ABCB35B819342DFA002F9938 /* VoiceSearchFeedback007_ios7@2x.png in Resources */, - 74E900691927940000D37C81 /* Contact@2x.png in Resources */, - 746C88201916B5D6007F9A5E /* multiMedia_HL@2x.png in Resources */, - 74E9006E1927940000D37C81 /* TableViewBackgroundImage@2x.png in Resources */, - 74E5E9AB1921F7710084BCFA /* RecordingSignal003@2x.png in Resources */, - AB569AB1193179CC0007DB0B /* Shake_icon_people@2x.png in Resources */, - 74E900671927940000D37C81 /* IMG_1555.MOV in Resources */, - ABCB35C119342DFA002F9938 /* VoiceSearchFeedback012@2x.png in Resources */, - AB569AB6193179CC0007DB0B /* Shake_Logo_Up@2x.png in Resources */, - ABE83CD21937E4FF00BBF653 /* EmoStoreDownloadBtn@2x.png in Resources */, - AB79A218192C0B1500A9B951 /* circle@2x.png in Resources */, - ABEC5136193A8497004954E3 /* game3.png in Resources */, - 746C882A1916B5EE007F9A5E /* input-bar-background.png in Resources */, - ABCB35DE19342DFA002F9938 /* VoiceSearchLoading004_ios7@2x.png in Resources */, - AB0C4AD71943B6BB00D346FF /* contacts_add_photo@2x.png in Resources */, - 7DA2EC8719455F5700B009FC /* AddGroupMemberBtn@2x.png in Resources */, - ABE83CCD1937E00E00BBF653 /* EmotionDownload@2x.png in Resources */, - 746C88761916B62D007F9A5E /* section0_emotion5@2x.png in Resources */, - 746C885E1916B612007F9A5E /* sharemore_voipvoice@2x.png in Resources */, - 746C881B1916B5D6007F9A5E /* face_HL@2x.png in Resources */, - ABCB35AD19342DFA002F9938 /* VoiceSearchBtnHL@2x.png in Resources */, - 74E9006D1927940000D37C81 /* WeChat@2x.png in Resources */, - 746C88591916B612007F9A5E /* sharemore_openapi@2x.png in Resources */, - ABCB35B719342DFA002F9938 /* VoiceSearchFeedback007@2x.png in Resources */, - ABCB35D019342DFA002F9938 /* VoiceSearchFeedback019_ios7@2x.png in Resources */, - ABCB35B919342DFA002F9938 /* VoiceSearchFeedback008@2x.png in Resources */, - ABCB35CC19342DFA002F9938 /* VoiceSearchFeedback017_ios7@2x.png in Resources */, - 74E5E9AC1921F7710084BCFA /* RecordingSignal004@2x.png in Resources */, - 746C88791916B62D007F9A5E /* section0_emotion8@2x.png in Resources */, - 7DA2EC8E19455F5700B009FC /* ContactsPanelDotRect@2x.png in Resources */, - ABCB35C819342DFA002F9938 /* VoiceSearchFeedback015_ios7@2x.png in Resources */, - ABCB35E319342DFA002F9938 /* VoiceSearchLoading007@2x.png in Resources */, - AB569AB0193179CC0007DB0B /* Shake_icon_musicHL@2x.png in Resources */, - AB89EAE71947ED19000930AE /* placeholderImage@2x.png in Resources */, - 746C885D1916B612007F9A5E /* sharemore_voiceinput@2x.png in Resources */, - 74C3E7E519291F1B0053F4E1 /* AlbumHeaderBackgrounImage@2x.png in Resources */, - AB8ACCE0192EB04400FA1C80 /* MoreMyAlbum@2x.png in Resources */, - 74E900991927A81500D37C81 /* bottleButtonMine@2x.png in Resources */, - 746C88231916B5D6007F9A5E /* voice@2x.png in Resources */, - 746C88451916B607007F9A5E /* ReceiverVoiceNodePlaying002@2x.png in Resources */, - 746C887D1916B62D007F9A5E /* section0_emotion12@2x.png in Resources */, - 74E5E99A1921EC8C0084BCFA /* VoiceBtn_Black@2x.png in Resources */, - 74E900AD1927ABF800D37C81 /* fishwater3@2x.png in Resources */, - 74E900981927A81500D37C81 /* bottleButtonFish@2x.png in Resources */, - 7D08C21E192C7A5E00B26D93 /* MeIcon@2x.png in Resources */, - ABCB35C419342DFA002F9938 /* VoiceSearchFeedback013_ios7@2x.png in Resources */, - 746C88571916B612007F9A5E /* sharemore_location@2x.png in Resources */, - AB406DD8199AE5CC00669D05 /* SECoreTextView.bundle in Resources */, - ABF9EC1919324D64003B95DC /* ScanWord@2x.png in Resources */, - 74E900A61927A9C900D37C81 /* bottleWriting@2x.png in Resources */, - 7DA2ECB719457A2D00B009FC /* emotion0.gif in Resources */, - 74E5E9AE1921F7710084BCFA /* RecordingSignal006@2x.png in Resources */, - ABCB35BE19342DFA002F9938 /* VoiceSearchFeedback010_ios7@2x.png in Resources */, - ABCB35E019342DFA002F9938 /* VoiceSearchLoading005_ios7@2x.png in Resources */, - ABCB35B619342DFA002F9938 /* VoiceSearchFeedback006_ios7@2x.png in Resources */, - ABCB35EA19342DFA002F9938 /* VoiceSearchLoading010_ios7@2x.png in Resources */, - 7D0AAFF51943231400988FC3 /* MoreFunctionFrame@2x.png in Resources */, - 746C88491916B607007F9A5E /* SenderVoiceNodePlaying001@2x.png in Resources */, - AB726395193296EE00AA738F /* album_add_photo@2x.png in Resources */, - 74E5E9B11921F7710084BCFA /* RecordingBkg@2x.png in Resources */, - ABB76E2D1937ED7300E62A2E /* emotionShopOther@2x.png in Resources */, - ABCB35D119342DFA002F9938 /* VoiceSearchFeedback020@2x.png in Resources */, - AB4F12F61932AC1300693BD5 /* AlbumFlagMark@2x.png in Resources */, - ABCB35D319342DFA002F9938 /* VoiceSearchIcon@2x.png in Resources */, - 74E900641927940000D37C81 /* ff_IconShake@2x.png in Resources */, - 746C885B1916B612007F9A5E /* sharemore_video@2x.png in Resources */, - ABCB35CA19342DFA002F9938 /* VoiceSearchFeedback016_ios7@2x.png in Resources */, - ABCB35E819342DFA002F9938 /* VoiceSearchLoading009_ios7@2x.png in Resources */, - ABEC5133193A8497004954E3 /* dgame0.png in Resources */, - AB8ACCE3192EB04400FA1C80 /* MoreSetting@2x.png in Resources */, - 7DA2EC6E19455EF100B009FC /* MultiSelectSearchResultTableViewCell.xib in Resources */, - AB7263921932944400AA738F /* Shake_Logo_Female_Down@2x.png in Resources */, - 7DA2EC8F19455F5700B009FC /* MultiSelectedPanelBkg@2x.png in Resources */, - 746C882F1916B5EE007F9A5E /* input-field-cover@2x.png in Resources */, - 746C88421916B607007F9A5E /* ReceiverVoiceNodePlaying@2x.png in Resources */, - 744FBDC91915EE7400FB4A65 /* Default@2x.png in Resources */, - 7DA2ECBC19457A2D00B009FC /* emotion6.gif in Resources */, - AB63BF211936B58E00B6C977 /* NewsBackgroundImage@2x.png in Resources */, - ABCB35C619342DFA002F9938 /* VoiceSearchFeedback014_ios7@2x.png in Resources */, - AB8ACCE2192EB04400FA1C80 /* MoreMyFavorites@2x.png in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 7482451A1908C730008EC388 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 748245281908C730008EC388 /* InfoPlist.strings in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXShellScriptBuildPhase section */ - 74180BD4190F447100A35C82 /* ShellScript */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - ); - outputPaths = ( - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /usr/bin/python; - shellScript = "# TAG: BUILD SCRIPT (do not remove this comment)\n# Build script generated using https://github.com/kstenerud/iOS-Universal-Framework Mk 8 (beta 2012-06-16)\nimport logging\n\n\n##############################################################################\n#\n# Configuration\n#\n##############################################################################\n\n# Select which kind of framework to build.\n#\n# Note: Due to issues with Xcode's build process, if you select\n# 'embeddedframework', it will still show the regular framework\n# (as a symlink) along side of the embedded framework. Be sure to\n# instruct your users to copy/move the embedded framework in this case!\n#\n# If your framework contains resources such as images, nibs, momds, plists,\n# zipfiles and such, choose 'embeddedframework'.\n#\n# If your framework contains no resources, choose 'framework'.\n#\nconfig_framework_type = 'framework'\n#config_framework_type = 'embeddedframework'\n\n# Open the build directory in Finder when the universal framework is\n# successfully built.\n#\n# This value can be overridden by setting the UFW_OPEN_BUILD_DIR env variable\n# to True or False.\n#\n# Recommended setting: True\n#\nconfig_open_build_dir = True\n\n# If true, ensures that all public headers are stored in the framework under\n# the same directory hierarchy as they were in the source tree.\n#\n# Xcode by default places all headers at the same top level, but every other\n# build tool in the known universe preserves directory structure. For simple\n# libraries it doesn't really matter much, but for ports of existing software\n# packages or for bigger libraries, it makes sense to have more structure.\n#\n# The default is set to \"False\" since that's what most Xcode users are used to.\n#\n# Recommended setting: True for deep hierarchy projects, False otherwise.\n#\nconfig_deep_header_hierarchy = False\n\n# Specify where the top of the public header hierarchy is. This path is\n# relative to the project's dir (PROJECT_DIR). You can reference environment\n# variables using templating syntax (e.g. \"${TARGET_NAME}/Some/Subdir\")\n#\n# NOTE: Only used if config_deep_header_hierarchy is True.\n#\n# If this is set to None, the script will attempt to figure out for itself\n# where the top of the header hierarchy is by looking for common path prefixes\n# in the public header files. This process can fail if:\n# - You only have one public header file.\n# - Your source header files don't all have a common root.\n#\n# A common approach is to use \"${TARGET_NAME}\", working under the assumption\n# that all of your header files share the common root of a directory under\n# your project with the same name as your target (which is the Xcode default).\n#\n# Recommended setting: \"${TARGET_NAME}\"\n#\nconfig_deep_header_top = \"${TARGET_NAME}\"\n\n# Warn when \"DerivedData\" is detected in any of the header, library, or\n# framework search paths. In almost all cases, references to directories under\n# DerivedData are added as a result of an Xcode bug and must be manually\n# removed.\n#\n# Recommended setting: True\n#\nconfig_warn_derived_data = True\n\n# Warn if no headers were marked public in this framework.\n#\n# Recommended setting: True\n#\nconfig_warn_no_public_headers = True\n\n# Cause the build to fail if any warnings are issued.\n#\n# Recommended setting: True\n#\nconfig_fail_on_warnings = True\n\n# Minimum log level\n#\n# Recommended setting: logging.INFO\n#\nconfig_log_level = logging.INFO\n\n\n##############################################################################\n#\n# Don't touch anything below here unless you know what you're doing.\n#\n##############################################################################\n\nimport collections\nimport json\nimport os\nimport re\nimport shlex\nimport shutil\nimport string\nimport subprocess\nimport sys\nimport time\nimport traceback\n\n\n##############################################################################\n#\n# Globals\n#\n##############################################################################\n\nlog = logging.getLogger('UFW')\n\nissued_warnings = False\n\n\n##############################################################################\n#\n# Classes\n#\n##############################################################################\n\n# Allows the slave build to communicate with the master build.\n#\nclass BuildState:\n\n def __init__(self):\n self.reload()\n\n def reset(self):\n self.slave_platform = None\n self.slave_architectures = []\n self.slave_linked_archive_paths = []\n self.slave_built_fw_path = None\n self.slave_built_embedded_fw_path = None\n\n def set_slave_properties(self, architectures,\n linked_archive_paths,\n built_fw_path,\n built_embedded_fw_path):\n self.slave_platform = os.environ['PLATFORM_NAME']\n self.slave_architectures = architectures\n self.slave_linked_archive_paths = linked_archive_paths\n self.slave_built_fw_path = built_fw_path\n self.slave_built_embedded_fw_path = built_embedded_fw_path\n\n def get_save_path(self):\n return os.path.join(os.environ['PROJECT_TEMP_DIR'], \"ufw_build_state.json\")\n\n def persist(self):\n filename = self.get_save_path()\n parent = os.path.dirname(filename)\n if not os.path.isdir(parent):\n os.makedirs(parent)\n with open(filename, \"w\") as f:\n f.write(json.dumps(self.__dict__))\n\n def reload(self):\n self.reset()\n filename = self.get_save_path()\n if os.path.exists(filename):\n with open(filename, \"r\") as f:\n new_dict = json.loads(f.read())\n if new_dict is not None:\n self.__dict__ = dict(self.__dict__.items() + new_dict.items())\n\n\n# Holds information about the current project and build environment.\n#\nclass Project:\n\n def __init__(self, filename):\n sourcecode_types = ['sourcecode.c.c',\n 'sourcecode.c.objc',\n 'sourcecode.cpp.cpp',\n 'sourcecode.cpp.objcpp',\n 'sourcecode.asm.asm',\n 'sourcecode.asm.llvm',\n 'sourcecode.nasm']\n\n self.build_state = BuildState()\n self.project_data = self.load_from_file(filename)\n self.target = filter(lambda x: x['name'] == os.environ['TARGET_NAME'], self.project_data['targets'])[0]\n self.public_headers = self.get_build_phase_files('PBXHeadersBuildPhase', lambda x: x.get('settings', False) and x['settings'].get('ATTRIBUTES', False) and 'Public' in x['settings']['ATTRIBUTES'])\n self.static_libraries = self.get_build_phase_files('PBXFrameworksBuildPhase', lambda x: x['fileRef']['fileType'] == 'archive.ar' and x['fileRef']['sourceTree'] not in ['DEVELOPER_DIR', 'SDKROOT'])\n self.static_frameworks = self.get_build_phase_files('PBXFrameworksBuildPhase', lambda x: x['fileRef']['fileType'] == 'wrapper.framework' and x['fileRef']['sourceTree'] not in ['DEVELOPER_DIR', 'SDKROOT'])\n self.compilable_sources = self.get_build_phase_files('PBXSourcesBuildPhase', lambda x: x['fileRef']['fileType'] in sourcecode_types)\n self.header_paths = [os.path.join(*x['pathComponents']) for x in self.public_headers]\n\n self.headers_dir = os.path.join(os.environ['TARGET_BUILD_DIR'], os.environ['CONTENTS_FOLDER_PATH'], 'Headers')\n self.libtool_path = os.path.join(os.environ['DT_TOOLCHAIN_DIR'], 'usr', 'bin', 'libtool')\n self.project_filename = os.path.join(os.environ['PROJECT_FILE_PATH'], \"project.pbxproj\")\n self.local_exe_path = os.path.join(os.environ['TARGET_BUILD_DIR'], os.environ['EXECUTABLE_PATH'])\n self.local_architectures = os.environ['ARCHS'].split(' ')\n self.local_built_fw_path = os.path.join(os.environ['TARGET_BUILD_DIR'], os.environ['WRAPPER_NAME'])\n self.local_built_embedded_fw_path = os.path.splitext(self.local_built_fw_path)[0] + \".embeddedframework\"\n self.local_linked_archive_paths = [self.get_linked_ufw_archive_path(arch) for arch in self.local_architectures]\n self.local_platform = os.environ['PLATFORM_NAME']\n other_platforms = os.environ['SUPPORTED_PLATFORMS'].split(' ')\n other_platforms.remove(self.local_platform)\n self.other_platform = other_platforms[0]\n\n sdk_name = os.environ['SDK_NAME']\n if not sdk_name.startswith(self.local_platform):\n raise Exception(\"%s didn't start with %s\" % (sdk_name, self.local_platform))\n self.sdk_version = sdk_name[len(self.local_platform):]\n\n # Load an Xcode project file.\n #\n def load_from_file(self, filename):\n project_file = json.loads(subprocess.check_output([\"plutil\", \"-convert\", \"json\", \"-o\", \"-\", filename]))\n all_objects = project_file['objects']\n del project_file['objects']\n for obj in all_objects.values():\n self.fix_keys(obj)\n self.unpack_objects(self.build_dereference_list(all_objects, None, None, project_file))\n self.unpack_objects(self.build_dereference_list(all_objects, None, None, all_objects.values()))\n project_data = project_file['rootObject']\n self.build_full_paths(project_data, splitpath(os.environ['SOURCE_ROOT']))\n return project_data\n\n def is_key(self, obj): \n return isinstance(obj, basestring) and len(obj) == 24 and re.search('^[0-9a-fA-F]+$', obj) is not None\n \n def build_dereference_list(self, all_objects, parent, key, obj):\n deref_list = []\n if self.is_key(obj):\n dereferenced = all_objects.get(obj, obj)\n if dereferenced is not obj:\n deref_list.append((parent, key, obj, dereferenced))\n elif isinstance(obj, collections.Mapping):\n for k, v in obj.iteritems():\n deref_list += self.build_dereference_list(all_objects, obj, k, v)\n elif isinstance(obj, collections.Iterable) and not isinstance(obj, basestring):\n for item in obj:\n deref_list += self.build_dereference_list(all_objects, obj, None, item)\n return deref_list\n \n def unpack_objects(self, deref_list):\n for parent, key, orig, obj in deref_list:\n if key is None:\n parent.remove(orig)\n parent.append(obj)\n else:\n parent[key] = obj\n\n # Store the full path, separated into components, to a node inside the node\n # as \"pathComponents\". Also recurse into that node if it's a group.\n #\n def build_full_paths(self, node, base_path):\n # Some nodes are relative to a different source tree, specified as an\n # env variable.\n if node.get('sourceTree', '') != '':\n new_base_path = os.environ.get(node['sourceTree'], None)\n if new_base_path:\n base_path = splitpath(new_base_path)\n # Add the current node's path, if any.\n if node.get('path', False):\n base_path = base_path + splitpath(node['path'])\n node['pathComponents'] = base_path\n # Recurse if this is a group.\n if node['isa'] == 'PBXGroup':\n for child in node['children']:\n self.build_full_paths(child, base_path)\n elif node['isa'] == 'PBXProject':\n self.build_full_paths(node['mainGroup'], base_path)\n self.build_full_paths(node['productRefGroup'], base_path)\n for child in node['targets']:\n self.build_full_paths(child, base_path)\n projectRefs = node.get('projectReferences', None)\n if projectRefs is not None:\n for child in projectRefs[0].values():\n self.build_full_paths(child, base_path)\n\n # Fix up any inconvenient keys.\n #\n def fix_keys(self, obj):\n key_remappings = {'lastKnownFileType': 'fileType', 'explicitFileType': 'fileType'}\n for key in list(set(key_remappings.keys()) & set(obj.keys())):\n obj[key_remappings[key]] = obj[key]\n del obj[key]\n\n # Get the files from a build phase.\n #\n def get_build_phase_files(self, build_phase_name, filter_func):\n build_phase = filter(lambda x: x['isa'] == build_phase_name, self.target['buildPhases'])[0]\n build_files = filter(filter_func, build_phase['files'])\n return [x['fileRef'] for x in build_files]\n\n # Get the truncated paths of all headers that start with the specified\n # relative path. Paths are read and returned as fully separated lists.\n # e.g. ['Some', 'Path', 'To', 'A', 'Header'] with relative_path of\n # ['Some', 'Path'] gets truncated to ['To', 'A', 'Header']\n #\n def movable_headers_relative_to(self, relative_path):\n rel_path_length = len(relative_path)\n result = filter(lambda path: len(path) >= rel_path_length and\n path[:rel_path_length] == relative_path, self.header_paths)\n return [path[rel_path_length:] for path in result]\n\n # Get the full path to where a linkable archive (library or framework)\n # is supposed to be.\n #\n def get_linked_archive_path(self, architecture):\n return os.path.join(os.environ['OBJECT_FILE_DIR_%s' % os.environ['CURRENT_VARIANT']],\n architecture,\n os.environ['EXECUTABLE_NAME'])\n\n # Get the full path to our custom linked archive of the project.\n #\n def get_linked_ufw_archive_path(self, architecture):\n return self.get_linked_archive_path(architecture) + \".ufwbuild\"\n\n # Get the full path to the executable of an archive.\n #\n def get_exe_path(self, node):\n path = os.path.join(*node['pathComponents'])\n if node['fileType'] == 'wrapper.framework':\n # Frameworks are directories, so go one deeper\n path = os.path.join(path, os.path.splitext(node['pathComponents'][-1])[0])\n return path\n\n # Get the path to the directory containing the archive.\n #\n def get_containing_path(self, node):\n return os.path.join(*node['pathComponents'])\n \n def get_archive_search_paths(self):\n log.info(\"Search paths = %s\" % set([self.get_containing_path(fw) for fw in self.static_frameworks] + [self.get_containing_path(fw) for fw in self.static_libraries]))\n return set([self.get_containing_path(fw) for fw in self.static_frameworks] + [self.get_containing_path(fw) for fw in self.static_libraries])\n\n # Command to link all objects of a single architecture.\n #\n def get_single_arch_link_command(self, architecture):\n cmd = [self.libtool_path,\n \"-static\",\n \"-arch_only\", architecture,\n \"-syslibroot\", os.environ['SDKROOT'],\n \"-L%s\" % os.environ['TARGET_BUILD_DIR'],\n \"-filelist\", os.environ['LINK_FILE_LIST_%s_%s' % (os.environ['CURRENT_VARIANT'], architecture)]]\n if os.environ.get('OTHER_LDFLAGS', False):\n cmd += [os.environ['OTHER_LDFLAGS']]\n if os.environ.get('WARNING_LDFLAGS', False):\n cmd += [os.environ['WARNING_LDFLAGS']]\n# cmd += [\"-L%s\" % libpath for libpath in self.get_archive_search_paths()]\n cmd += [self.get_exe_path(fw) for fw in self.static_frameworks]\n cmd += [self.get_exe_path(lib) for lib in self.static_libraries]\n cmd += [\"-o\", self.get_linked_ufw_archive_path(architecture)]\n return cmd\n\n # Command to link all local architectures for the current configuration\n # into an archive. This reads all libraries + the UFW-built archives and\n # overwrites the final product.\n #\n def get_local_archs_link_command(self):\n cmd = [self.libtool_path,\n \"-static\"]\n cmd += self.local_linked_archive_paths\n cmd += [self.get_exe_path(fw) for fw in self.static_frameworks]\n cmd += [self.get_exe_path(lib) for lib in self.static_libraries]\n cmd += [\"-o\", os.path.join(os.environ['TARGET_BUILD_DIR'], os.environ['EXECUTABLE_PATH'])]\n return cmd\n\n # Command to link all architectures into a universal archive.\n # This reads all UFW-built archives and overwrites the final product.\n #\n def get_all_archs_link_command(self):\n cmd = [self.libtool_path,\n \"-static\"]\n cmd += self.local_linked_archive_paths + self.build_state.slave_linked_archive_paths\n cmd += [\"-o\", os.path.join(os.environ['TARGET_BUILD_DIR'], os.environ['EXECUTABLE_PATH'])]\n return cmd\n\n # Build up an environment for the slave process. This uses BUILD_ROOT\n # and TEMP_ROOT to convert all environment variables to values suitable\n # for the slave build environment so that xcodebuild doesn't try to build\n # in the project directory under \"build\".\n #\n def get_slave_environment(self):\n ignored = ['LD_MAP_FILE_PATH',\n 'HEADER_SEARCH_PATHS',\n 'LIBRARY_SEARCH_PATHS',\n 'FRAMEWORK_SEARCH_PATHS']\n build_root = os.environ['BUILD_ROOT']\n temp_root = os.environ['TEMP_ROOT']\n newenv = {}\n for key, value in os.environ.items():\n if key not in ignored and not key.startswith('LINK_FILE_LIST_') and not key.startswith('LD_DEPENDENCY_'):\n if build_root in value or temp_root in value:\n newenv[key] = value.replace(self.local_platform, self.other_platform)\n return newenv\n\n # Command to invoke xcodebuild on the slave platform.\n #\n def get_slave_project_build_command(self):\n cmd = [\"xcodebuild\",\n \"-project\",\n os.environ['PROJECT_FILE_PATH'],\n \"-target\",\n os.environ['TARGET_NAME'],\n \"-configuration\",\n os.environ['CONFIGURATION'],\n \"-sdk\",\n self.other_platform + self.sdk_version]\n cmd += [\"%s=%s\" % (key, value) for key, value in self.get_slave_environment().items()]\n cmd += [\"UFW_MASTER_PLATFORM=\" + os.environ['PLATFORM_NAME']]\n cmd += [os.environ['ACTION']]\n return cmd\n\n\n\n##############################################################################\n#\n# Utility Functions\n#\n##############################################################################\n\n# Split a path into a list of path components.\n#\ndef splitpath(path, maxdepth=20):\n (head, tail) = os.path.split(path)\n return splitpath(head, maxdepth - 1) + [tail] if maxdepth and head and head != path else [ head or tail ]\n\n# Remove all subdirectories under a path.\n#\ndef remove_subdirs(path, ignore_files):\n if os.path.exists(path):\n for filename in filter(lambda x: x not in ignore_files, os.listdir(path)):\n fullpath = os.path.join(path, filename)\n if os.path.isdir(fullpath):\n log.info(\"Remove %s\" % fullpath)\n shutil.rmtree(fullpath)\n\n# Make whatever parent paths are necessary for a path to exist.\n#\ndef ensure_path_exists(path):\n if not os.path.isdir(path):\n os.makedirs(path)\n\n# Make whatever parent paths are necessary for a path's parent to exist.\n#\ndef ensure_parent_exists(path):\n parent = os.path.dirname(path)\n if not os.path.isdir(parent):\n os.makedirs(parent)\n\n# Remove a file or dir if it exists.\n#\ndef remove_path(path):\n if os.path.exists(path):\n if os.path.isdir(path) and not os.path.islink(path):\n shutil.rmtree(path)\n else:\n os.remove(path)\n\n# Move a file or dir, replacing the destination if it exists.\n#\ndef move_file(src, dst):\n if src == dst or not os.path.isfile(src):\n return\n log.info(\"Move %s to %s\" % (src, dst))\n ensure_parent_exists(dst)\n remove_path(dst)\n shutil.move(src, dst)\n\n# Copy a file or dir, replacing the destination if it exists already.\n#\ndef copy_overwrite(src, dst):\n if src != dst:\n remove_path(dst)\n ensure_parent_exists(dst)\n shutil.copytree(src, dst, symlinks=True)\n\n# Attempt to symlink link_path -> link_to.\n# link_to must be a path relative to link_path's parent and must exist.\n# If link_path already exists, do nothing.\n#\ndef attempt_symlink(link_path, link_to):\n # Only allow linking to an existing file\n os.stat(os.path.abspath(os.path.join(link_path, \"..\", link_to)))\n\n # Only make the link if it hasn't already been made\n if not os.path.exists(link_path):\n log.info(\"Symlink %s -> %s\" % (link_path, link_to))\n os.symlink(link_to, link_path)\n\n# Takes the last entry in an array-based path and returns a normal path\n# relative to base_path.\n#\ndef top_level_file_path(base_path, path_list):\n return os.path.join(base_path, os.path.split(path_list[-1])[-1])\n\n# Takes all entries in an array-based path and returns a normal path\n# relative to base_path.\n#\ndef full_file_path(base_path, path_list):\n return os.path.join(*([base_path] + path_list))\n\n# Print a command before executing it.\n# Also print out all output from the command to STDOUT.\n#\ndef print_and_call(cmd):\n log.info(\"Cmd \" + \" \".join(cmd))\n p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)\n result = p.communicate()[0]\n if len(result) > 0:\n log.info(result)\n if p.returncode != 0:\n raise subprocess.CalledProcessError(p.returncode, cmd)\n\n# Special print-and-call command for the slave build that strips out\n# xcodebuild's spammy list of environment variables.\n#\ndef print_and_call_slave_build(cmd, other_platform):\n separator = '=== BUILD NATIVE TARGET '\n p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)\n result = p.communicate()[0].split(separator)\n if len(result) == 1:\n result = result[0]\n else:\n result = separator + result[1]\n log.info(\"Cmd \" + \" \".join(cmd) + \"\\n\" + result)\n if p.returncode != 0:\n raise subprocess.CalledProcessError(p.returncode, cmd)\n\n# Issue a warning and record that a warning has been issued.\n#\ndef issue_warning(msg, *args, **kwargs):\n global issued_warnings\n issued_warnings = True\n log.warn(msg, *args, **kwargs)\n\n\n\n##############################################################################\n#\n# Main Application\n#\n##############################################################################\n\n# Check if we are running as master.\n#\ndef is_master():\n return os.environ.get('UFW_MASTER_PLATFORM', os.environ['PLATFORM_NAME']) == os.environ['PLATFORM_NAME']\n\n# DerivedData should almost never appear in any framework, library, or header\n# search paths. However, Xcode will sometimes add them in, so we check to make\n# sure.\n#\ndef check_for_derived_data_in_search_paths(project):\n search_path_keys = [\"FRAMEWORK_SEARCH_PATHS\", \"LIBRARY_SEARCH_PATHS\", \"HEADER_SEARCH_PATHS\"]\n build_configs = project.target['buildConfigurationList']['buildConfigurations']\n build_settings = filter(lambda x: x['name'] == os.environ['CONFIGURATION'], build_configs)[0]['buildSettings']\n \n found_something = False\n for path_key in filter(lambda x: x in build_settings, search_path_keys):\n path = build_settings[path_key]\n if \"DerivedData\" in path:\n found_something = True\n log.warn(\"Derived data in %s\" % path)\n issue_warning(\"'%s' contains reference to 'DerivedData'.\" % path_key)\n if found_something:\n log.warn(\"Check your build settings and remove any entries that contain paths inside the DerivedData folder.\")\n log.warn(\"Otherwise you can disable this warning by changing 'config_warn_derived_data' in this script.\")\n\n# Link local architectures into their respective archives.\n#\ndef link_local_archs(project):\n for arch in project.local_architectures:\n print_and_call(project.get_single_arch_link_command(arch))\n\n# Link only the local architectures into the final product, not the slave\n# architectures. For iphoneos, this will be armv6, armv7. For simulator, this\n# will be i386.\n#\ndef link_combine_local_archs(project):\n print_and_call(project.get_local_archs_link_command())\n\n# Link all architectures into the final product.\n#\ndef link_combine_all_archs(project):\n print_and_call(project.get_all_archs_link_command())\n\n# Check if we should open the build directory after a successful build.\n#\ndef should_open_build_dir():\n env_setting = os.environ.get('UFW_OPEN_BUILD_DIR', None)\n if env_setting is not None:\n return env_setting\n\n return config_open_build_dir\n\n# Open the build dir in Finder.\n#\ndef open_build_dir():\n print_and_call(['open', os.environ['TARGET_BUILD_DIR']])\n\n# Check if the build was started by selecting \"Archive\" under \"Product\" in\n# Xcode.\n#\ndef is_archive_build():\n # ACTION is always 'build', but perhaps Apple will fix this someday?\n archive_build = os.environ['ACTION'] == 'archive'\n\n if not archive_build:\n # This can be passed in as an env variable when building from command line.\n archive_build = os.environ.get('UFW_ACTION', None) == 'archive'\n\n build_dir = splitpath(os.environ['BUILD_DIR'])\n if not archive_build:\n # This partial path is used when you select \"archive\" from within Xcode.\n archive_build = 'ArchiveIntermediates' in build_dir\n\n # It only counts as a full archive build if this target is being built into\n # its own build dir (not being built as a dependency of another target)\n if archive_build:\n archive_build = os.environ['TARGET_NAME'] in build_dir\n \n return archive_build\n\n# Xcode by default throws all public headers into the top level directory.\n# This function moves them to their expected deep hierarchy.\n#\ndef build_deep_header_hierarchy(project):\n header_path_top = config_deep_header_top\n if not header_path_top:\n header_path_top = os.path.commonprefix(project.header_paths)\n else:\n header_path_top = splitpath(header_path_top)\n\n built_headers_path = os.path.join(os.environ['TARGET_BUILD_DIR'], os.environ['PUBLIC_HEADERS_FOLDER_PATH'])\n movable_headers = project.movable_headers_relative_to(header_path_top)\n\n # Remove subdirs if they only contain files that have been rebuilt\n ignore_headers = filter(lambda x: not os.path.isfile(top_level_file_path(built_headers_path, x)), movable_headers)\n remove_subdirs(built_headers_path, [file[0] for file in ignore_headers])\n\n # Move rebuilt headers into their proper subdirs\n for header in movable_headers:\n move_file(top_level_file_path(built_headers_path, header), full_file_path(built_headers_path, header))\n\n# Add all symlinks needed to make a full framework structure:\n#\n# MyFramework.framework\n# |-- MyFramework -> Versions/Current/MyFramework\n# |-- Headers -> Versions/Current/Headers\n# |-- Resources -> Versions/Current/Resources\n# `-- Versions\n# |-- A\n# | |-- MyFramework\n# | |-- Headers\n# | | `-- MyFramework.h\n# | `-- Resources\n# | |-- Info.plist\n# | |-- MyViewController.nib\n# | `-- en.lproj\n# | `-- InfoPlist.strings\n# `-- Current -> A\n#\ndef add_symlinks_to_framework(project):\n base_dir = project.local_built_fw_path\n attempt_symlink(os.path.join(base_dir, \"Versions\", \"Current\"), os.environ['FRAMEWORK_VERSION'])\n if os.path.isdir(os.path.join(base_dir, \"Versions\", \"Current\", \"Headers\")):\n attempt_symlink(os.path.join(base_dir, \"Headers\"), os.path.join(\"Versions\", \"Current\", \"Headers\"))\n if os.path.isdir(os.path.join(base_dir, \"Versions\", \"Current\", \"Resources\")):\n attempt_symlink(os.path.join(base_dir, \"Resources\"), os.path.join(\"Versions\", \"Current\", \"Resources\"))\n attempt_symlink(os.path.join(base_dir, os.environ['EXECUTABLE_NAME']), os.path.join(\"Versions\", \"Current\", os.environ['EXECUTABLE_NAME']))\n\n# Build an embedded framework structure.\n# An embedded framework contains the actual framework, plus a \"Resources\"\n# directory containing symlinks to all resources found in the actual framework,\n# with the exception of \"Info.plist\" and anything ending in \".lproj\":\n#\n# MyFramework.embeddedframework\n# |-- MyFramework.framework\n# | |-- MyFramework -> Versions/Current/MyFramework\n# | |-- Headers -> Versions/Current/Headers\n# | |-- Resources -> Versions/Current/Resources\n# | `-- Versions\n# | |-- A\n# | | |-- MyFramework\n# | | |-- Headers\n# | | | `-- MyFramework.h\n# | | `-- Resources\n# | | |-- Info.plist\n# | | |-- MyViewController.nib\n# | | `-- en.lproj\n# | | `-- InfoPlist.strings\n# | `-- Current -> A\n# `-- Resources\n# `-- MyViewController.nib -> ../MyFramework.framework/Resources/MyViewController.nib\n#\ndef build_embedded_framework(project):\n fw_path = project.local_built_fw_path\n embedded_path = project.local_built_embedded_fw_path\n fw_name = os.environ['WRAPPER_NAME']\n\n if (os.path.islink(fw_path)):\n # If the framework path is a link, the build result already in embeddedframework.\n # Just recreate embeddedframework's Resources\n remove_path(os.path.join(embedded_path, \"Resources\"))\n else:\n remove_path(embedded_path)\n ensure_path_exists(embedded_path)\n copy_overwrite(fw_path, os.path.join(embedded_path, fw_name))\n\n # Create embeddedframework's Resources \n ensure_path_exists(os.path.join(embedded_path, \"Resources\"))\n symlink_source = os.path.join(\"..\", fw_name, \"Resources\")\n symlink_path = os.path.join(embedded_path, \"Resources\")\n if os.path.isdir(os.path.join(fw_path, \"Resources\")):\n for file in filter(lambda x: x != \"Info.plist\" and not x.endswith(\".lproj\"), os.listdir(os.path.join(fw_path, \"Resources\"))):\n attempt_symlink(os.path.join(symlink_path, file), os.path.join(symlink_source, file))\n\n # Remove the normal framework and replace it with a symlink to the copy\n # in the embedded framework. This is needed because Xcode runs its strip\n # phase AFTER the script runs.\n embed_fw_wrapper = os.path.splitext(os.environ['WRAPPER_NAME'])[0] + \".embeddedframework\"\n remove_path(fw_path)\n attempt_symlink(fw_path, os.path.join(embed_fw_wrapper, os.environ['WRAPPER_NAME']))\n\n\n# Run the build process in slave mode to build the other configuration\n# (device/simulator).\n#\ndef run_slave_build(project):\n print_and_call_slave_build(project.get_slave_project_build_command(), project.other_platform)\n\n# Run the build process.\n#\ndef run_build():\n project = Project(os.path.join(os.environ['PROJECT_FILE_PATH'], \"project.pbxproj\"))\n\n # Issue warnings only if we're master.\n if is_master():\n if len(project.compilable_sources) == 0:\n raise Exception(\"No compilable sources found. Please add at least one source file to build target %s.\" % os.environ['TARGET_NAME'])\n\n if config_warn_derived_data:\n check_for_derived_data_in_search_paths(project)\n if config_warn_no_public_headers and len(project.public_headers) == 0:\n issue_warning('No headers in build target %s were marked public. Please move at least one header to \"Public\" in the \"Copy Headers\" build phase.' % os.environ['TARGET_NAME'])\n\n # Only build slave if this is an archive build.\n if is_archive_build():\n if is_master():\n log.debug(\"Building as MASTER\")\n # The slave-side linker tries to include this (nonexistent) path as\n # a library path.\n ensure_path_exists(project.get_slave_environment()['BUILT_PRODUCTS_DIR'])\n project.build_state.persist()\n run_slave_build(project)\n project.build_state.reload()\n else:\n log.debug(\"Building as SLAVE\")\n project.build_state.reload()\n project.build_state.set_slave_properties(project.local_architectures,\n project.local_linked_archive_paths,\n project.local_built_fw_path,\n project.local_built_embedded_fw_path)\n project.build_state.persist()\n\n link_local_archs(project)\n \n # Only do a universal binary when building an archive.\n if is_archive_build() and is_master():\n link_combine_all_archs(project)\n else:\n link_combine_local_archs(project)\n\n if config_deep_header_hierarchy:\n build_deep_header_hierarchy(project)\n\n add_symlinks_to_framework(project)\n \n if is_master():\n if config_framework_type == 'embeddedframework':\n build_embedded_framework(project)\n elif config_framework_type != 'framework':\n raise Exception(\"%s: Unknown framework type for config_framework_type\" % config_framework_type)\n\n\nif __name__ == \"__main__\":\n log_handler = logging.StreamHandler()\n log_handler.setFormatter(logging.Formatter(\"%(name)s (\" + os.environ['PLATFORM_NAME'] + \"): %(levelname)s: %(message)s\"))\n log.addHandler(log_handler)\n log.setLevel(config_log_level)\n\n error_code = 0\n prefix = \"M\" if is_master() else \"S\"\n log_handler.setFormatter(logging.Formatter(\"%(name)s (\" + prefix + \" \" + os.environ['PLATFORM_NAME'] + \"): %(levelname)s: %(message)s\"))\n\n log.debug(\"Begin build process\")\n\n if config_deep_header_top:\n config_deep_header_top = string.Template(config_deep_header_top).substitute(os.environ)\n\n try:\n run_build()\n if issued_warnings:\n if config_fail_on_warnings:\n error_code = 1\n log.warn(\"Build completed with warnings\")\n else:\n log.info(\"Build completed\")\n if not is_archive_build():\n log.info(\"Note: This is *NOT* a universal framework build. To build as a universal framework, do an archive build.\")\n log.info(\"To do an archive build from command line, use \\\"xcodebuild -configuration Release UFW_ACTION=archive clean build\\\"\")\n except Exception:\n traceback.print_exc(file=sys.stdout)\n error_code = 1\n log.error(\"Build failed\")\n finally:\n if error_code == 0 and is_archive_build() and is_master():\n log.info(\"Built framework is in \" + os.environ['TARGET_BUILD_DIR'])\n if should_open_build_dir():\n open_build_dir()\n sys.exit(error_code)\n"; - showEnvVarsInLog = 0; - }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 74180BD0190F447100A35C82 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 74E5EAED1924FFBE0084BCFA /* SETextMagnifierRanged.m in Sources */, - 74C3E7D3192919360053F4E1 /* XHAlbumTableViewCell.m in Sources */, - AB439975192C278400EC5E0D /* XHAlbumCollectionViewFlowLayout.m in Sources */, - AB8C80FE1936A6F7006CDA9B /* LKBadgeView.m in Sources */, - 74E5EAE71924FFBE0084BCFA /* SETextLayout.m in Sources */, - AB372922192EC6800084D7B5 /* XHDisplayEmotionViewController.m in Sources */, - 74E9003519278F5C00D37C81 /* XHContactTableViewController.m in Sources */, - 746C89431917F691007F9A5E /* XHMessageTextView.m in Sources */, - AB6AB4B2193C03D600AFE823 /* UIImage+Utility.m in Sources */, - 74E5E9971921E90A0084BCFA /* XHVoiceRecordHUD.m in Sources */, - AB41A599194274AC0095C12C /* XHRefreshView.m in Sources */, - 74C3E7D8192919930053F4E1 /* XHAlbumRichTextView.m in Sources */, - 74E5EADB1924FFBE0084BCFA /* SETextAttachment.m in Sources */, - AB372907192EC62C0084D7B5 /* XHBottleViewController.m in Sources */, - 746C894C1917F691007F9A5E /* XHEmotionManagerView.m in Sources */, - 7D13FC60192C4F4000A23413 /* XHZoomingImageView.m in Sources */, - AB6AB4BB193C03D600AFE823 /* UIScrollView+XHkeyboardControl.m in Sources */, - 7DA2EC9C194577EA00B009FC /* FLAnimatedImageView.m in Sources */, - AB8ACCF4192EBF0C00FA1C80 /* XHMoreExpressionShopsTableViewController.m in Sources */, - AB6AB4BE193C03D600AFE823 /* UIView+XHBadgeView.m in Sources */, - 7D14A00B192EFD33004B4D3B /* XHContactView.m in Sources */, - AB79A20F192C0A6400A9B951 /* XHPathCover.m in Sources */, - AB6AB4A9193C03D600AFE823 /* UIImage+Alpha.m in Sources */, - AB79A212192C0A6400A9B951 /* XHSoundManager.m in Sources */, - 74585FFF191D10CC00F5E8C8 /* XHAnnotation.m in Sources */, - 7D0AAFE81943179A00988FC3 /* XHPopMenu.m in Sources */, - 74E5E98B1921317B0084BCFA /* XHVoiceRecordHelper.m in Sources */, - 7D14A006192EF8FD004B4D3B /* XHContactDetailTableViewController.m in Sources */, - AB94CDBE194688FB0010F0D7 /* XHOperationNetworkKit.m in Sources */, - 7D13FC5D192C4F4000A23413 /* XHViewState.m in Sources */, - 74180BFD190F449400A35C82 /* XHFoundationCommon.m in Sources */, - 74901A47191D4CD30049AFF9 /* XHBaseViewController.m in Sources */, - AB41A58E194274240095C12C /* XHPullRefreshTableViewController.m in Sources */, - AB63BF1E1936B4C800B6C977 /* XHNewsTemplateContainerView.m in Sources */, - 746C893D1917F691007F9A5E /* XHMessageTableViewCell.m in Sources */, - ABB494061930086C000A2680 /* XHContactCommunicationView.m in Sources */, - AB6AB4A6193C03D600AFE823 /* UIButton+XHButtonTitlePosition.m in Sources */, - 746C89461917F691007F9A5E /* XHEmotionCollectionViewCell.m in Sources */, - 746C89371917F691007F9A5E /* XHMessageDisplayTextView.m in Sources */, - AB02A9F7192D8DC5004AA23D /* XHBaseSearchTableViewController.m in Sources */, - AB372928192EC6800084D7B5 /* XHDisplayMediaViewController.m in Sources */, - 7DA2EC7719455EF100B009FC /* MultiSelectViewController.m in Sources */, - 746C89891917F8EA007F9A5E /* XHBaseTableViewController.m in Sources */, - 746C897A1917F8B2007F9A5E /* XHBaseNavigationController.m in Sources */, - AB37292B192EC6800084D7B5 /* XHDisplayTextViewController.m in Sources */, - ABBA5D0E19427D96008BA06D /* XHRefreshControl.m in Sources */, - 746C894F1917F691007F9A5E /* XHEmotionSectionBar.m in Sources */, - AB41A586194273150095C12C /* XHMessageVoiceFactory.m in Sources */, - 7DA2EC7219455EF100B009FC /* MultiSelectTableViewCell.m in Sources */, - 740660B61914CA0000E1CE95 /* XHPhotographyHelper.m in Sources */, - 74E5EAC91924FFBE0084BCFA /* NSMutableAttributedString+Helper.m in Sources */, - 74065FBB19123E1C00E1CE95 /* XHShareMenuItem.m in Sources */, - AB726385193281CA00AA738F /* XHCaptureHelper.m in Sources */, - 746C89521917F691007F9A5E /* XHShareMenuView.m in Sources */, - AB84B5D11937EEB30069A10C /* XHExpressionDetailTableViewController.m in Sources */, - 7DA2EC6D19455EF100B009FC /* MultiSelectSearchResultTableViewCell.m in Sources */, - AB8ACD0D192EBF3F00FA1C80 /* XHMoreSettingTableViewController.m in Sources */, - AB54939D193110BD001F2FCC /* XHContactPhotosView.m in Sources */, - 74E5EAD81924FFBE0084BCFA /* SESelectionGrabber.m in Sources */, - AB6AB4AC193C03D600AFE823 /* UIImage+Resize.m in Sources */, - 74E5EACF1924FFBE0084BCFA /* SEConstants.m in Sources */, - AB9B0F5F193A8649004FA35D /* XHHorizontalGridItem.m in Sources */, - AB41A589194273150095C12C /* XHVideoOutputSampleBufferFactory.m in Sources */, - ABB5473019394D47000D3C9C /* XHFileAttribute.m in Sources */, - 746C893A1917F691007F9A5E /* XHMessageTableView.m in Sources */, - 7D0AAFF219431A9400988FC3 /* XHPopMenuItemView.m in Sources */, - AB72638B19328D9A00AA738F /* XHLocationServiceTableViewCell.m in Sources */, - AB9B0F5A193A8630004FA35D /* XHHorizontalGridView.m in Sources */, - AB63BF2C1936BE5400B6C977 /* XHNewsContainerView.m in Sources */, - 7D13FC5A192C4F4000A23413 /* XHImageViewer.m in Sources */, - 7D06CA73192B3D9B00DF8C04 /* XHBaseTableViewCell.m in Sources */, - 7D0AAFED194319A500988FC3 /* XHPopMenuItem.m in Sources */, - ABB5473519394D7C000D3C9C /* XHHTTPClient.m in Sources */, - AB6AB4A3193C03D600AFE823 /* NSString+XHMD5.m in Sources */, - AB41A580194273150095C12C /* XHMessageBubbleFactory.m in Sources */, - AB41A57D194273150095C12C /* XHMessageAvatorFactory.m in Sources */, - AB41A594194274950095C12C /* XHRefreshCircleView.m in Sources */, - 74E5EAEA1924FFBE0084BCFA /* SETextMagnifierCaret.m in Sources */, - 740660C01914D65600E1CE95 /* XHEmotion.m in Sources */, - 74901A41191D3B1C0049AFF9 /* XHProfileTableViewController.m in Sources */, - ABB5472D19394D47000D3C9C /* XHCacheManager.m in Sources */, - ABA88471193D00BA00413CEC /* XHMessageBubbleHelper.m in Sources */, - AB41A59E194279380095C12C /* XHLoadMoreView.m in Sources */, - 7DA2EC5F19455EF100B009FC /* MLLetterIndexNavigationItem.m in Sources */, - 74E5EAE11924FFBE0084BCFA /* SETextGeometry.m in Sources */, - ABE83CC81937DD5D00BBF653 /* XHMoreExpressionShopsTableViewCell.m in Sources */, - AB9B0F64193A88AD004FA35D /* XHHorizontalGridItemView.m in Sources */, - 74180C01190F44A600A35C82 /* XHMessage.m in Sources */, - AB6AB4B8193C03D600AFE823 /* UIImage+XHRounded.m in Sources */, - AB6AB4C1193C03D600AFE823 /* UIView+XHRemoteImage.m in Sources */, - AB8ACD08192EBF3600FA1C80 /* XHMoreMyProfileDetailTableViewController.m in Sources */, - 74E5EAF01924FFBE0084BCFA /* SETextSelection.m in Sources */, - AB41A583194273150095C12C /* XHMessageVideoConverPhotoFactory.m in Sources */, - 746C89311917F691007F9A5E /* XHBubblePhotoImageView.m in Sources */, - AB63BF271936B66400B6C977 /* XHNewsTableViewController.m in Sources */, - AB6AB4AF193C03D600AFE823 /* UIImage+RoundedCorner.m in Sources */, - 74E5EAD21924FFBE0084BCFA /* SELineLayout.m in Sources */, - 74E5EAE41924FFBE0084BCFA /* SETextInput.m in Sources */, - AB8ACCF9192EBF1700FA1C80 /* XHMoreMyAlbumTableViewController.m in Sources */, - 74E5EADE1924FFBE0084BCFA /* SETextEditingCaret.m in Sources */, - 7DA2EC6519455EF100B009FC /* MultiSelectedPanel.m in Sources */, - 74E5EAF61924FFBE0084BCFA /* SETextView.m in Sources */, - AB8ACCFE192EBF2100FA1C80 /* XHMoreMyBankCardTableViewController.m in Sources */, - 740660CF1914E1F400E1CE95 /* XHEmotionManager.m in Sources */, - 74E9003A19278F6700D37C81 /* XHDiscoverTableViewController.m in Sources */, - AB372910192EC62C0084D7B5 /* XHQRCodeViewController.m in Sources */, - AB8ACD03192EBF2C00FA1C80 /* XHMoreMyFavoritesTableViewController.m in Sources */, - 7D149FFC192DEB5D004B4D3B /* XHContactTableViewCell.m in Sources */, - 7DA2EC6219455EF100B009FC /* MLLetterIndexNavigationView.m in Sources */, - 74585F40191B999B00F5E8C8 /* XHLocationHelper.m in Sources */, - AB44D41D192D8BB50069A210 /* XHContact.m in Sources */, - AB372925192EC6800084D7B5 /* XHDisplayLocationViewController.m in Sources */, - 7DA2EC99194577EA00B009FC /* FLAnimatedImage.m in Sources */, - AB37290D192EC62C0084D7B5 /* XHMoreGameTableViewController.m in Sources */, - AB6AB4B5193C03D600AFE823 /* UIImage+XHAnimatedFaceGif.m in Sources */, - 7DA2EC7A19455EF100B009FC /* UIView+Convenience.m in Sources */, - 74E5EAD51924FFBE0084BCFA /* SELinkText.m in Sources */, - 746C89341917F691007F9A5E /* XHMessageBubbleView.m in Sources */, - AB372904192EC62C0084D7B5 /* XHAlbumTableViewController.m in Sources */, - 74E5EAF31924FFBE0084BCFA /* SETextSelectionView.m in Sources */, - 74E5EACC1924FFBE0084BCFA /* SECompatibility.m in Sources */, - 746C895D1917F7B4007F9A5E /* XHMessageTableViewController.m in Sources */, - AB79A215192C0A6400A9B951 /* XHWaterDropRefresh.m in Sources */, - AB37290A192EC62C0084D7B5 /* XHLocationServiceTableViewController.m in Sources */, - AB372913192EC62C0084D7B5 /* XHShakeViewController.m in Sources */, - AB79A224192C231C00A9B951 /* XHAlbumPhotoCollectionViewCell.m in Sources */, - AB6AB4A0193C03D600AFE823 /* NSString+MessageInputView.m in Sources */, - AB8ACCE9192EB0A400FA1C80 /* XHMultipleSectionTableViewController.m in Sources */, - 74C3E7DD19291A1A0053F4E1 /* XHAlbum.m in Sources */, - 7DA2EC6A19455EF100B009FC /* MultiSelectItem.m in Sources */, - AB79A21F192C22F500A9B951 /* XHBaseCollectionViewCell.m in Sources */, - 746C89401917F691007F9A5E /* XHMessageInputView.m in Sources */, - AB63BF191936B35500B6C977 /* XHNewsTemplateTableViewCell.m in Sources */, - 746C897F1917F8C5007F9A5E /* XHBaseTabBarController.m in Sources */, - 746C89491917F691007F9A5E /* XHEmotionCollectionViewFlowLayout.m in Sources */, - ABB839EB193CCACA003DEE7A /* NSString+XHDiskSizeTransfrom.m in Sources */, - 74E900B51928F3D100D37C81 /* XHStoreManager.m in Sources */, - AB5493981931102E001F2FCC /* XHContactPhotosTableViewCell.m in Sources */, - AB73B1671932463E009665E3 /* XHScanningView.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 74180BE1190F447100A35C82 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 74180BF3190F447100A35C82 /* MessageDisplayFrameworkTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 748244FD1908C730008EC388 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 74E9003919278F6700D37C81 /* XHDiscoverTableViewController.m in Sources */, - 7D14A00A192EFD33004B4D3B /* XHContactView.m in Sources */, - 74BBB032190C28CD00093577 /* XHDemoWeChatMessageTableViewController.m in Sources */, - ABB494051930086C000A2680 /* XHContactCommunicationView.m in Sources */, - AB79A211192C0A6400A9B951 /* XHSoundManager.m in Sources */, - 74901A46191D4CD30049AFF9 /* XHBaseViewController.m in Sources */, - AB84B5D01937EEB30069A10C /* XHExpressionDetailTableViewController.m in Sources */, - 7D0AAFEC194319A500988FC3 /* XHPopMenuItem.m in Sources */, - ABE83CC71937DD5D00BBF653 /* XHMoreExpressionShopsTableViewCell.m in Sources */, - AB79A223192C231C00A9B951 /* XHAlbumPhotoCollectionViewCell.m in Sources */, - 740660B51914CA0000E1CE95 /* XHPhotographyHelper.m in Sources */, - ABB5473419394D7C000D3C9C /* XHHTTPClient.m in Sources */, - 74585F3F191B999B00F5E8C8 /* XHLocationHelper.m in Sources */, - AB41A593194274950095C12C /* XHRefreshCircleView.m in Sources */, - 74E5EAC81924FFBE0084BCFA /* NSMutableAttributedString+Helper.m in Sources */, - AB6AB4B7193C03D600AFE823 /* UIImage+XHRounded.m in Sources */, - AB8ACD07192EBF3600FA1C80 /* XHMoreMyProfileDetailTableViewController.m in Sources */, - AB372927192EC6800084D7B5 /* XHDisplayMediaViewController.m in Sources */, - 746C893C1917F691007F9A5E /* XHMessageTableViewCell.m in Sources */, - 7DA2EC7119455EF100B009FC /* MultiSelectTableViewCell.m in Sources */, - 74E5EAEC1924FFBE0084BCFA /* SETextMagnifierRanged.m in Sources */, - AB8ACCF8192EBF1700FA1C80 /* XHMoreMyAlbumTableViewController.m in Sources */, - AB37290C192EC62C0084D7B5 /* XHMoreGameTableViewController.m in Sources */, - 746C89481917F691007F9A5E /* XHEmotionCollectionViewFlowLayout.m in Sources */, - 7482456B19090C04008EC388 /* XHMessage.m in Sources */, - AB6AB4AB193C03D600AFE823 /* UIImage+Resize.m in Sources */, - AB439974192C278400EC5E0D /* XHAlbumCollectionViewFlowLayout.m in Sources */, - AB9B0F5E193A8649004FA35D /* XHHorizontalGridItem.m in Sources */, - 74901A40191D3B1C0049AFF9 /* XHProfileTableViewController.m in Sources */, - AB73B1661932463E009665E3 /* XHScanningView.m in Sources */, - 746C893F1917F691007F9A5E /* XHMessageInputView.m in Sources */, - 74E5EACE1924FFBE0084BCFA /* SEConstants.m in Sources */, - 746C89301917F691007F9A5E /* XHBubblePhotoImageView.m in Sources */, - E1664DC01934789A003F4C5B /* XHAudioPlayerHelper.m in Sources */, - 746C89881917F8EA007F9A5E /* XHBaseTableViewController.m in Sources */, - 74E5E9961921E90A0084BCFA /* XHVoiceRecordHUD.m in Sources */, - AB6AB4BD193C03D600AFE823 /* UIView+XHBadgeView.m in Sources */, - 7D13FC5F192C4F4000A23413 /* XHZoomingImageView.m in Sources */, - 7DA2EC7919455EF100B009FC /* UIView+Convenience.m in Sources */, - AB63BF1D1936B4C800B6C977 /* XHNewsTemplateContainerView.m in Sources */, - AB6AB4BA193C03D600AFE823 /* UIScrollView+XHkeyboardControl.m in Sources */, - AB8ACCFD192EBF2100FA1C80 /* XHMoreMyBankCardTableViewController.m in Sources */, - 74E5EAEF1924FFBE0084BCFA /* SETextSelection.m in Sources */, - 74E5EAE91924FFBE0084BCFA /* SETextMagnifierCaret.m in Sources */, - AB372924192EC6800084D7B5 /* XHDisplayLocationViewController.m in Sources */, - AB37292A192EC6800084D7B5 /* XHDisplayTextViewController.m in Sources */, - 7D0AAFF119431A9400988FC3 /* XHPopMenuItemView.m in Sources */, - AB41A59D194279380095C12C /* XHLoadMoreView.m in Sources */, - AB6AB49F193C03D600AFE823 /* NSString+MessageInputView.m in Sources */, - ABB5472F19394D47000D3C9C /* XHFileAttribute.m in Sources */, - 746C897E1917F8C5007F9A5E /* XHBaseTabBarController.m in Sources */, - 74E5EAE61924FFBE0084BCFA /* SETextLayout.m in Sources */, - 7D13FC5C192C4F4000A23413 /* XHViewState.m in Sources */, - AB63BF261936B66400B6C977 /* XHNewsTableViewController.m in Sources */, - 7DA2EC6419455EF100B009FC /* MultiSelectedPanel.m in Sources */, - 74D1C5C6190DFC1D003B1BCA /* XHFoundationCommon.m in Sources */, - AB6AB4A8193C03D600AFE823 /* UIImage+Alpha.m in Sources */, - 74C3E7D2192919360053F4E1 /* XHAlbumTableViewCell.m in Sources */, - 7DA2EC7619455EF100B009FC /* MultiSelectViewController.m in Sources */, - 748245151908C730008EC388 /* AppDelegate.m in Sources */, - ABBA5D0D19427D96008BA06D /* XHRefreshControl.m in Sources */, - AB44D41C192D8BB50069A210 /* XHContact.m in Sources */, - 740660CE1914E1F400E1CE95 /* XHEmotionManager.m in Sources */, - AB8ACCE8192EB0A400FA1C80 /* XHMultipleSectionTableViewController.m in Sources */, - 7D149FFB192DEB5D004B4D3B /* XHContactTableViewCell.m in Sources */, - AB63BF2B1936BE5400B6C977 /* XHNewsContainerView.m in Sources */, - AB41A57C194273150095C12C /* XHMessageAvatorFactory.m in Sources */, - AB8ACD0C192EBF3F00FA1C80 /* XHMoreSettingTableViewController.m in Sources */, - AB37290F192EC62C0084D7B5 /* XHQRCodeViewController.m in Sources */, - 74585FFE191D10CC00F5E8C8 /* XHAnnotation.m in Sources */, - 746C89361917F691007F9A5E /* XHMessageDisplayTextView.m in Sources */, - AB8C80FD1936A6F7006CDA9B /* LKBadgeView.m in Sources */, - AB372906192EC62C0084D7B5 /* XHBottleViewController.m in Sources */, - 74E5EADD1924FFBE0084BCFA /* SETextEditingCaret.m in Sources */, - AB372903192EC62C0084D7B5 /* XHAlbumTableViewController.m in Sources */, - AB54939C193110BD001F2FCC /* XHContactPhotosView.m in Sources */, - 74E5EACB1924FFBE0084BCFA /* SECompatibility.m in Sources */, - 74C3E7D7192919930053F4E1 /* XHAlbumRichTextView.m in Sources */, - AB41A58D194274240095C12C /* XHPullRefreshTableViewController.m in Sources */, - 740660BF1914D65600E1CE95 /* XHEmotion.m in Sources */, - AB41A57F194273150095C12C /* XHMessageBubbleFactory.m in Sources */, - 746C89791917F8B2007F9A5E /* XHBaseNavigationController.m in Sources */, - 74E5EAD71924FFBE0084BCFA /* SESelectionGrabber.m in Sources */, - 7DA2EC9B194577EA00B009FC /* FLAnimatedImageView.m in Sources */, - E1664DC319347916003F4C5B /* XHVoiceCommonHelper.m in Sources */, - 7D0AAFE71943179A00988FC3 /* XHPopMenu.m in Sources */, - AB6AB4C0193C03D600AFE823 /* UIView+XHRemoteImage.m in Sources */, - 74E5EAF21924FFBE0084BCFA /* SETextSelectionView.m in Sources */, - 746C89421917F691007F9A5E /* XHMessageTextView.m in Sources */, - 7DA2EC6119455EF100B009FC /* MLLetterIndexNavigationView.m in Sources */, - 7DA2EC6919455EF100B009FC /* MultiSelectItem.m in Sources */, - 74065FBA19123E1C00E1CE95 /* XHShareMenuItem.m in Sources */, - ABB839EA193CCACA003DEE7A /* NSString+XHDiskSizeTransfrom.m in Sources */, - AB79A20E192C0A6400A9B951 /* XHPathCover.m in Sources */, - 74E5EAE31924FFBE0084BCFA /* SETextInput.m in Sources */, - AB5493971931102E001F2FCC /* XHContactPhotosTableViewCell.m in Sources */, - 746C895C1917F7B4007F9A5E /* XHMessageTableViewController.m in Sources */, - 7DA2EC5E19455EF100B009FC /* MLLetterIndexNavigationItem.m in Sources */, - AB79A21E192C22F500A9B951 /* XHBaseCollectionViewCell.m in Sources */, - 74E9003419278F5C00D37C81 /* XHContactTableViewController.m in Sources */, - AB372921192EC6800084D7B5 /* XHDisplayEmotionViewController.m in Sources */, - 7DA2EC98194577EA00B009FC /* FLAnimatedImage.m in Sources */, - AB6AB4AE193C03D600AFE823 /* UIImage+RoundedCorner.m in Sources */, - ABB5472C19394D47000D3C9C /* XHCacheManager.m in Sources */, - AB02A9F6192D8DC5004AA23D /* XHBaseSearchTableViewController.m in Sources */, - AB79A214192C0A6400A9B951 /* XHWaterDropRefresh.m in Sources */, - AB63BF181936B35500B6C977 /* XHNewsTemplateTableViewCell.m in Sources */, - 74E5EAD11924FFBE0084BCFA /* SELineLayout.m in Sources */, - 7D13FC59192C4F4000A23413 /* XHImageViewer.m in Sources */, - 746C89511917F691007F9A5E /* XHShareMenuView.m in Sources */, - ABA88470193D00BA00413CEC /* XHMessageBubbleHelper.m in Sources */, - 746C89331917F691007F9A5E /* XHMessageBubbleView.m in Sources */, - 74BBB02C190BE8C400093577 /* XHMessageRootViewController.m in Sources */, - 7DA2EC6C19455EF100B009FC /* MultiSelectSearchResultTableViewCell.m in Sources */, - AB8ACCF3192EBF0C00FA1C80 /* XHMoreExpressionShopsTableViewController.m in Sources */, - AB41A598194274AC0095C12C /* XHRefreshView.m in Sources */, - 746C894E1917F691007F9A5E /* XHEmotionSectionBar.m in Sources */, - 7D14A005192EF8FD004B4D3B /* XHContactDetailTableViewController.m in Sources */, - AB41A582194273150095C12C /* XHMessageVideoConverPhotoFactory.m in Sources */, - 74E5EADA1924FFBE0084BCFA /* SETextAttachment.m in Sources */, - 74E5EAD41924FFBE0084BCFA /* SELinkText.m in Sources */, - 746C89451917F691007F9A5E /* XHEmotionCollectionViewCell.m in Sources */, - 74E5EAF51924FFBE0084BCFA /* SETextView.m in Sources */, - AB8ACD02192EBF2C00FA1C80 /* XHMoreMyFavoritesTableViewController.m in Sources */, - AB41A585194273150095C12C /* XHMessageVoiceFactory.m in Sources */, - 748245111908C730008EC388 /* main.m in Sources */, - 74E5EAE01924FFBE0084BCFA /* SETextGeometry.m in Sources */, - AB372912192EC62C0084D7B5 /* XHShakeViewController.m in Sources */, - 746C894B1917F691007F9A5E /* XHEmotionManagerView.m in Sources */, - AB6AB4B1193C03D600AFE823 /* UIImage+Utility.m in Sources */, - 74E5E98A1921317B0084BCFA /* XHVoiceRecordHelper.m in Sources */, - AB94CDBD194688FB0010F0D7 /* XHOperationNetworkKit.m in Sources */, - AB6AB4A5193C03D600AFE823 /* UIButton+XHButtonTitlePosition.m in Sources */, - AB72638A19328D9A00AA738F /* XHLocationServiceTableViewCell.m in Sources */, - 7D06CA72192B3D9B00DF8C04 /* XHBaseTableViewCell.m in Sources */, - AB372909192EC62C0084D7B5 /* XHLocationServiceTableViewController.m in Sources */, - 74E900B41928F3D100D37C81 /* XHStoreManager.m in Sources */, - AB726384193281CA00AA738F /* XHCaptureHelper.m in Sources */, - AB41A588194273150095C12C /* XHVideoOutputSampleBufferFactory.m in Sources */, - AB6AB4B4193C03D600AFE823 /* UIImage+XHAnimatedFaceGif.m in Sources */, - 74C3E7DC19291A1A0053F4E1 /* XHAlbum.m in Sources */, - AB6AB4A2193C03D600AFE823 /* NSString+XHMD5.m in Sources */, - AB9B0F59193A8630004FA35D /* XHHorizontalGridView.m in Sources */, - AB9B0F63193A88AD004FA35D /* XHHorizontalGridItemView.m in Sources */, - 746C89391917F691007F9A5E /* XHMessageTableView.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 748245181908C730008EC388 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 7482452A1908C730008EC388 /* MessageDisplayExampleTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 74180BEA190F447100A35C82 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 74180BD5190F447100A35C82 /* MessageDisplayFramework */; - targetProxy = 74180BE9190F447100A35C82 /* PBXContainerItemProxy */; - }; - 748245221908C730008EC388 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 748245001908C730008EC388 /* MessageDisplayExample */; - targetProxy = 748245211908C730008EC388 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 74180BDA190F447100A35C82 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 74180BDB190F447100A35C82 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - 74180BEF190F447100A35C82 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 74180BF0190F447100A35C82 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - 7482450D1908C730008EC388 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 7482450E1908C730008EC388 /* en */, - 74BBB01E190B8E9500093577 /* zh-Hans */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - 748245261908C730008EC388 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 748245271908C730008EC388 /* en */, - 74BBB01F190B8E9500093577 /* zh-Hans */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - 74BBB022190B8EAB00093577 /* MessageDisplayKitString.strings */ = { - isa = PBXVariantGroup; - children = ( - 74BBB021190B8EAB00093577 /* en */, - 74BBB023190B8EAD00093577 /* zh-Hans */, - ); - name = MessageDisplayKitString.strings; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 74180BF4190F447100A35C82 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD)"; - CONTENTS_FOLDER_PATH = "$(WRAPPER_NAME)/Versions/$(FRAMEWORK_VERSION)"; - DEAD_CODE_STRIPPING = NO; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_VERSION = A; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "MessageDisplayFramework/MessageDisplayFramework-Prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = "MessageDisplayFramework/MessageDisplayFramework-Info.plist"; - INFOPLIST_PATH = "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/Info.plist"; - INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LINK_WITH_STANDARD_LIBRARIES = NO; - MACH_O_TYPE = mh_object; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - UNLOCALIZED_RESOURCES_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Resources"; - WRAPPER_EXTENSION = framework; - }; - name = Debug; - }; - 74180BF5190F447100A35C82 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ARCHS = "$(ARCHS_STANDARD)"; - CONTENTS_FOLDER_PATH = "$(WRAPPER_NAME)/Versions/$(FRAMEWORK_VERSION)"; - DEAD_CODE_STRIPPING = NO; - DYLIB_COMPATIBILITY_VERSION = 1; - DYLIB_CURRENT_VERSION = 1; - FRAMEWORK_VERSION = A; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "MessageDisplayFramework/MessageDisplayFramework-Prefix.pch"; - INFOPLIST_FILE = "MessageDisplayFramework/MessageDisplayFramework-Info.plist"; - INFOPLIST_PATH = "$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/Info.plist"; - INSTALL_PATH = "$(BUILT_PRODUCTS_DIR)"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - LINK_WITH_STANDARD_LIBRARIES = NO; - MACH_O_TYPE = mh_object; - PRODUCT_NAME = "$(TARGET_NAME)"; - SKIP_INSTALL = YES; - UNLOCALIZED_RESOURCES_FOLDER_PATH = "$(CONTENTS_FOLDER_PATH)/Resources"; - WRAPPER_EXTENSION = framework; - }; - name = Release; - }; - 74180BF6190F447100A35C82 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/MessageDisplayExample.app/MessageDisplayExample"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "MessageDisplayFramework/MessageDisplayFramework-Prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = "MessageDisplayFrameworkTests/MessageDisplayFrameworkTests-Info.plist"; - OTHER_LDFLAGS = ( - "-framework", - SenTestingKit, - "-framework", - "$(UFW_FAKE_FRAMEWORK_NAME)", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUNDLE_LOADER)"; - UFW_FAKE_FRAMEWORK_NAME = MessageDisplayFramework; - WRAPPER_EXTENSION = xctest; - }; - name = Debug; - }; - 74180BF7190F447100A35C82 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/MessageDisplayExample.app/MessageDisplayExample"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "MessageDisplayFramework/MessageDisplayFramework-Prefix.pch"; - INFOPLIST_FILE = "MessageDisplayFrameworkTests/MessageDisplayFrameworkTests-Info.plist"; - OTHER_LDFLAGS = ( - "-framework", - SenTestingKit, - "-framework", - "$(UFW_FAKE_FRAMEWORK_NAME)", - ); - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUNDLE_LOADER)"; - UFW_FAKE_FRAMEWORK_NAME = MessageDisplayFramework; - WRAPPER_EXTENSION = xctest; - }; - name = Release; - }; - 7482452B1908C730008EC388 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_DYNAMIC_NO_PIC = NO; - GCC_OPTIMIZATION_LEVEL = 0; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - GCC_SYMBOLS_PRIVATE_EXTERN = NO; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.1; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - 7482452C1908C730008EC388 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - CLANG_ENABLE_OBJC_ARC = YES; - CLANG_WARN_BOOL_CONVERSION = YES; - CLANG_WARN_CONSTANT_CONVERSION = YES; - CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; - CLANG_WARN_EMPTY_BODY = YES; - CLANG_WARN_ENUM_CONVERSION = YES; - CLANG_WARN_INT_CONVERSION = YES; - CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; - CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; - "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - COPY_PHASE_STRIP = YES; - ENABLE_NS_ASSERTIONS = NO; - GCC_C_LANGUAGE_STANDARD = gnu99; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; - GCC_WARN_UNDECLARED_SELECTOR = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.1; - SDKROOT = iphoneos; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; - 7482452E1908C730008EC388 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "MessageDisplayExample/MessageDisplayExample-Prefix.pch"; - INFOPLIST_FILE = "MessageDisplayExample/MessageDisplayExample-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - 7482452F1908C730008EC388 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "MessageDisplayExample/MessageDisplayExample-Prefix.pch"; - INFOPLIST_FILE = "MessageDisplayExample/MessageDisplayExample-Info.plist"; - IPHONEOS_DEPLOYMENT_TARGET = 6.0; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; - 748245311908C730008EC388 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/MessageDisplayExample.app/MessageDisplayExample"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "MessageDisplayExample/MessageDisplayExample-Prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = "MessageDisplayExampleTests/MessageDisplayExampleTests-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUNDLE_LOADER)"; - WRAPPER_EXTENSION = xctest; - }; - name = Debug; - }; - 748245321908C730008EC388 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/MessageDisplayExample.app/MessageDisplayExample"; - FRAMEWORK_SEARCH_PATHS = ( - "$(SDKROOT)/Developer/Library/Frameworks", - "$(inherited)", - "$(DEVELOPER_FRAMEWORKS_DIR)", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "MessageDisplayExample/MessageDisplayExample-Prefix.pch"; - INFOPLIST_FILE = "MessageDisplayExampleTests/MessageDisplayExampleTests-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUNDLE_LOADER)"; - WRAPPER_EXTENSION = xctest; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 74180BF8190F447100A35C82 /* Build configuration list for PBXNativeTarget "MessageDisplayFramework" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 74180BF4190F447100A35C82 /* Debug */, - 74180BF5190F447100A35C82 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 74180BF9190F447100A35C82 /* Build configuration list for PBXNativeTarget "MessageDisplayFrameworkTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 74180BF6190F447100A35C82 /* Debug */, - 74180BF7190F447100A35C82 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 748244FC1908C730008EC388 /* Build configuration list for PBXProject "MessageDisplayExample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 7482452B1908C730008EC388 /* Debug */, - 7482452C1908C730008EC388 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 7482452D1908C730008EC388 /* Build configuration list for PBXNativeTarget "MessageDisplayExample" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 7482452E1908C730008EC388 /* Debug */, - 7482452F1908C730008EC388 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 748245301908C730008EC388 /* Build configuration list for PBXNativeTarget "MessageDisplayExampleTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 748245311908C730008EC388 /* Debug */, - 748245321908C730008EC388 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 748244F91908C730008EC388 /* Project object */; -} diff --git a/Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/project.xcworkspace/xcshareddata/MessageDisplayExample.xccheckout b/Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/project.xcworkspace/xcshareddata/MessageDisplayExample.xccheckout deleted file mode 100644 index a4a09ad..0000000 --- a/Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/project.xcworkspace/xcshareddata/MessageDisplayExample.xccheckout +++ /dev/null @@ -1,41 +0,0 @@ - - - - - IDESourceControlProjectFavoriteDictionaryKey - - IDESourceControlProjectIdentifier - FA3609A9-ED6A-40D1-8AA1-4A73C30C5726 - IDESourceControlProjectName - MessageDisplayExample - IDESourceControlProjectOriginsDictionary - - DB6A1799-7BB1-46E4-AEA5-37004ACDDB6E - https://github.com/xhzengAIB/MessageDisplayKit - - IDESourceControlProjectPath - Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/project.xcworkspace - IDESourceControlProjectRelativeInstallPathDictionary - - DB6A1799-7BB1-46E4-AEA5-37004ACDDB6E - ../../../.. - - IDESourceControlProjectURL - https://github.com/xhzengAIB/MessageDisplayKit - IDESourceControlProjectVersion - 110 - IDESourceControlProjectWCCIdentifier - DB6A1799-7BB1-46E4-AEA5-37004ACDDB6E - IDESourceControlProjectWCConfigurations - - - IDESourceControlRepositoryExtensionIdentifierKey - public.vcs.git - IDESourceControlWCCIdentifierKey - DB6A1799-7BB1-46E4-AEA5-37004ACDDB6E - IDESourceControlWCCName - MessageDisplayKit - - - - diff --git a/Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/project.xcworkspace/xcuserdata/qtone-1.xcuserdatad/UserInterfaceState.xcuserstate b/Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/project.xcworkspace/xcuserdata/qtone-1.xcuserdatad/UserInterfaceState.xcuserstate deleted file mode 100644 index 5509139..0000000 Binary files a/Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/project.xcworkspace/xcuserdata/qtone-1.xcuserdatad/UserInterfaceState.xcuserstate and /dev/null differ diff --git a/Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/xcuserdata/qtone-1.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/xcuserdata/qtone-1.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist deleted file mode 100644 index 8f94031..0000000 --- a/Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/xcuserdata/qtone-1.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - diff --git a/Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/xcuserdata/qtone-1.xcuserdatad/xcschemes/MessageDisplayFramework.xcscheme b/Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/xcuserdata/qtone-1.xcuserdatad/xcschemes/MessageDisplayFramework.xcscheme deleted file mode 100644 index e3401d3..0000000 --- a/Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/xcuserdata/qtone-1.xcuserdatad/xcschemes/MessageDisplayFramework.xcscheme +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/xcuserdata/qtone-1.xcuserdatad/xcschemes/xcschememanagement.plist b/Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/xcuserdata/qtone-1.xcuserdatad/xcschemes/xcschememanagement.plist deleted file mode 100644 index 3c93fcb..0000000 --- a/Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/xcuserdata/qtone-1.xcuserdatad/xcschemes/xcschememanagement.plist +++ /dev/null @@ -1,47 +0,0 @@ - - - - - SchemeUserState - - MessageDisplayExample.xcscheme - - orderHint - 0 - - MessageDisplayFramework.xcscheme - - orderHint - 2 - - - SuppressBuildableAutocreation - - 74180BD5190F447100A35C82 - - primary - - - 74180BE4190F447100A35C82 - - primary - - - 74180CB9190F526100A35C82 - - primary - - - 748245001908C730008EC388 - - primary - - - 7482451B1908C730008EC388 - - primary - - - - - diff --git a/Example/MessageDisplayExample/MessageDisplayExample/Default-568h@2x.png b/Example/MessageDisplayExample/MessageDisplayExample/Default-568h@2x.png deleted file mode 100644 index ba90162..0000000 Binary files a/Example/MessageDisplayExample/MessageDisplayExample/Default-568h@2x.png and /dev/null differ diff --git a/Example/MessageDisplayExample/MessageDisplayExample/Default@2x.png b/Example/MessageDisplayExample/MessageDisplayExample/Default@2x.png deleted file mode 100644 index 6949f42..0000000 Binary files a/Example/MessageDisplayExample/MessageDisplayExample/Default@2x.png and /dev/null differ diff --git a/Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/avator@2x.png b/Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/avator@2x.png deleted file mode 100644 index 37a9193..0000000 Binary files a/Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/avator@2x.png and /dev/null differ diff --git a/Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/placeholderImage@2x.png b/Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/placeholderImage@2x.png deleted file mode 100755 index 765668c..0000000 Binary files a/Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/placeholderImage@2x.png and /dev/null differ diff --git a/Example/MessageDisplayExample/MessageDisplayExample/MessageDisplayExample-Prefix.pch b/Example/MessageDisplayExample/MessageDisplayExample/MessageDisplayExample-Prefix.pch deleted file mode 100644 index b71f851..0000000 --- a/Example/MessageDisplayExample/MessageDisplayExample/MessageDisplayExample-Prefix.pch +++ /dev/null @@ -1,17 +0,0 @@ -// -// Prefix header -// -// The contents of this file are implicitly included at the beginning of every source file. -// - -#import - -#ifndef __IPHONE_3_0 -#warning "This project uses features only available in iOS SDK 3.0 and later." -#endif - -#ifdef __OBJC__ - #import - #import - -#endif diff --git a/Example/MessageDisplayExample/MessageDisplayExample/XHDemoWeChatMessageTableViewController.h b/Example/MessageDisplayExample/MessageDisplayExample/XHDemoWeChatMessageTableViewController.h deleted file mode 100644 index 10a98a1..0000000 --- a/Example/MessageDisplayExample/MessageDisplayExample/XHDemoWeChatMessageTableViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// XHDemoWeChatMessageTableViewController.h -// MessageDisplayExample -// -// Created by qtone-1 on 14-4-27. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import "XHMessageTableViewController.h" - -@interface XHDemoWeChatMessageTableViewController : XHMessageTableViewController - -@end diff --git a/Example/MessageDisplayExample/MessageDisplayExample/en.lproj/InfoPlist.strings b/Example/MessageDisplayExample/MessageDisplayExample/en.lproj/InfoPlist.strings deleted file mode 100644 index 6194fbc..0000000 --- a/Example/MessageDisplayExample/MessageDisplayExample/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* Localized versions of Info.plist keys */ - -CFBundleDisplayName = "HUAJIEWeChat"; \ No newline at end of file diff --git a/Example/MessageDisplayExample/MessageDisplayExample/main.m b/Example/MessageDisplayExample/MessageDisplayExample/main.m deleted file mode 100644 index a604100..0000000 --- a/Example/MessageDisplayExample/MessageDisplayExample/main.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// main.m -// MessageDisplayExample -// -// Created by qtone-1 on 14-4-24. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import - -#import "AppDelegate.h" - -int main(int argc, char * argv[]) -{ - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/Example/MessageDisplayExample/MessageDisplayExample/zh-Hans.lproj/InfoPlist.strings b/Example/MessageDisplayExample/MessageDisplayExample/zh-Hans.lproj/InfoPlist.strings deleted file mode 100644 index b18c05d..0000000 --- a/Example/MessageDisplayExample/MessageDisplayExample/zh-Hans.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* Localized versions of Info.plist keys */ - -CFBundleDisplayName = "华捷微信"; diff --git a/Example/MessageDisplayExample/MessageDisplayExampleTests/MessageDisplayExampleTests.m b/Example/MessageDisplayExample/MessageDisplayExampleTests/MessageDisplayExampleTests.m deleted file mode 100644 index 3c205d9..0000000 --- a/Example/MessageDisplayExample/MessageDisplayExampleTests/MessageDisplayExampleTests.m +++ /dev/null @@ -1,34 +0,0 @@ -// -// MessageDisplayExampleTests.m -// MessageDisplayExampleTests -// -// Created by qtone-1 on 14-4-24. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import - -@interface MessageDisplayExampleTests : XCTestCase - -@end - -@implementation MessageDisplayExampleTests - -- (void)setUp -{ - [super setUp]; - // Put setup code here. This method is called before the invocation of each test method in the class. -} - -- (void)tearDown -{ - // Put teardown code here. This method is called after the invocation of each test method in the class. - [super tearDown]; -} - -- (void)testExample -{ - XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); -} - -@end diff --git a/Example/MessageDisplayExample/MessageDisplayExampleTests/en.lproj/InfoPlist.strings b/Example/MessageDisplayExample/MessageDisplayExampleTests/en.lproj/InfoPlist.strings deleted file mode 100644 index f50787b..0000000 --- a/Example/MessageDisplayExample/MessageDisplayExampleTests/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* Localized versions of Info.plist keys */ - -"copy" = "copy"; diff --git a/Example/MessageDisplayExample/MessageDisplayExampleTests/zh-Hans.lproj/InfoPlist.strings b/Example/MessageDisplayExample/MessageDisplayExampleTests/zh-Hans.lproj/InfoPlist.strings deleted file mode 100644 index f50787b..0000000 --- a/Example/MessageDisplayExample/MessageDisplayExampleTests/zh-Hans.lproj/InfoPlist.strings +++ /dev/null @@ -1,3 +0,0 @@ -/* Localized versions of Info.plist keys */ - -"copy" = "copy"; diff --git a/Example/MessageDisplayExample/MessageDisplayFramework/MessageDisplayFramework-Prefix.pch b/Example/MessageDisplayExample/MessageDisplayFramework/MessageDisplayFramework-Prefix.pch deleted file mode 100644 index 96e0af9..0000000 --- a/Example/MessageDisplayExample/MessageDisplayFramework/MessageDisplayFramework-Prefix.pch +++ /dev/null @@ -1,12 +0,0 @@ -// -// Prefix header -// -// The contents of this file are implicitly included at the beginning of every source file. -// - -#ifdef __OBJC__ - #import - #import - - #import "XHMacro.h" -#endif diff --git a/Example/MessageDisplayExample/MessageDisplayFramework/en.lproj/InfoPlist.strings b/Example/MessageDisplayExample/MessageDisplayFramework/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28f..0000000 --- a/Example/MessageDisplayExample/MessageDisplayFramework/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/Example/MessageDisplayExample/MessageDisplayFrameworkTests/MessageDisplayFrameworkTests.m b/Example/MessageDisplayExample/MessageDisplayFrameworkTests/MessageDisplayFrameworkTests.m deleted file mode 100644 index 80ebf7b..0000000 --- a/Example/MessageDisplayExample/MessageDisplayFrameworkTests/MessageDisplayFrameworkTests.m +++ /dev/null @@ -1,34 +0,0 @@ -// -// MessageDisplayFrameworkTests.m -// MessageDisplayFrameworkTests -// -// Created by qtone-1 on 14-4-29. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import - -@interface MessageDisplayFrameworkTests : XCTestCase - -@end - -@implementation MessageDisplayFrameworkTests - -- (void)setUp -{ - [super setUp]; - // Put setup code here. This method is called before the invocation of each test method in the class. -} - -- (void)tearDown -{ - // Put teardown code here. This method is called after the invocation of each test method in the class. - [super tearDown]; -} - -- (void)testExample -{ - XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); -} - -@end diff --git a/Example/MessageDisplayExample/MessageDisplayFrameworkTests/en.lproj/InfoPlist.strings b/Example/MessageDisplayExample/MessageDisplayFrameworkTests/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28f..0000000 --- a/Example/MessageDisplayExample/MessageDisplayFrameworkTests/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/AppDelegate.h b/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/AppDelegate.h deleted file mode 100644 index f2d6401..0000000 --- a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/AppDelegate.h +++ /dev/null @@ -1,15 +0,0 @@ -// -// AppDelegate.h -// MessageDisplayKitStoryboardExample -// -// Created by qtone-1 on 14-4-29. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import - -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; - -@end diff --git a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/Base.lproj/Main_iPad.storyboard b/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/Base.lproj/Main_iPad.storyboard deleted file mode 100644 index 4edef30..0000000 --- a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/Base.lproj/Main_iPad.storyboard +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/Base.lproj/Main_iPhone.storyboard b/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/Base.lproj/Main_iPhone.storyboard deleted file mode 100644 index ce2c658..0000000 --- a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/Base.lproj/Main_iPhone.storyboard +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample-Prefix.pch b/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample-Prefix.pch deleted file mode 100644 index 82a2bb4..0000000 --- a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample-Prefix.pch +++ /dev/null @@ -1,16 +0,0 @@ -// -// Prefix header -// -// The contents of this file are implicitly included at the beginning of every source file. -// - -#import - -#ifndef __IPHONE_5_0 -#warning "This project uses features only available in iOS SDK 5.0 and later." -#endif - -#ifdef __OBJC__ - #import - #import -#endif diff --git a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/ViewController.h b/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/ViewController.h deleted file mode 100644 index bb9cd06..0000000 --- a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/ViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// ViewController.h -// MessageDisplayKitStoryboardExample -// -// Created by qtone-1 on 14-4-29. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import - -@interface ViewController : UIViewController - -@end diff --git a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/ViewController.m b/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/ViewController.m deleted file mode 100644 index 2fcf59f..0000000 --- a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/ViewController.m +++ /dev/null @@ -1,29 +0,0 @@ -// -// ViewController.m -// MessageDisplayKitStoryboardExample -// -// Created by qtone-1 on 14-4-29. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import "ViewController.h" - -@interface ViewController () - -@end - -@implementation ViewController - -- (void)viewDidLoad -{ - [super viewDidLoad]; - // Do any additional setup after loading the view, typically from a nib. -} - -- (void)didReceiveMemoryWarning -{ - [super didReceiveMemoryWarning]; - // Dispose of any resources that can be recreated. -} - -@end diff --git a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/en.lproj/InfoPlist.strings b/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28f..0000000 --- a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/main.m b/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/main.m deleted file mode 100644 index 35d6449..0000000 --- a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/main.m +++ /dev/null @@ -1,18 +0,0 @@ -// -// main.m -// MessageDisplayKitStoryboardExample -// -// Created by qtone-1 on 14-4-29. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import - -#import "AppDelegate.h" - -int main(int argc, char * argv[]) -{ - @autoreleasepool { - return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); - } -} diff --git a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExampleTests/MessageDisplayKitStoryboardExampleTests.m b/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExampleTests/MessageDisplayKitStoryboardExampleTests.m deleted file mode 100644 index c415a8e..0000000 --- a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExampleTests/MessageDisplayKitStoryboardExampleTests.m +++ /dev/null @@ -1,34 +0,0 @@ -// -// MessageDisplayKitStoryboardExampleTests.m -// MessageDisplayKitStoryboardExampleTests -// -// Created by qtone-1 on 14-4-29. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import - -@interface MessageDisplayKitStoryboardExampleTests : XCTestCase - -@end - -@implementation MessageDisplayKitStoryboardExampleTests - -- (void)setUp -{ - [super setUp]; - // Put setup code here. This method is called before the invocation of each test method in the class. -} - -- (void)tearDown -{ - // Put teardown code here. This method is called after the invocation of each test method in the class. - [super tearDown]; -} - -- (void)testExample -{ - XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); -} - -@end diff --git a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExampleTests/en.lproj/InfoPlist.strings b/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExampleTests/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28f..0000000 --- a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExampleTests/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/Example/MessageDisplayKit/MessageDisplayKit.xcodeproj/project.pbxproj b/Example/MessageDisplayKit/MessageDisplayKit.xcodeproj/project.pbxproj new file mode 100644 index 0000000..1aa387c --- /dev/null +++ b/Example/MessageDisplayKit/MessageDisplayKit.xcodeproj/project.pbxproj @@ -0,0 +1,1406 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 7053E7151B42EE6C00DE808D /* keyboard_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7053E7131B42EE6C00DE808D /* keyboard_HL@2x.png */; }; + 7053E7161B42EE6C00DE808D /* keyboard@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7053E7141B42EE6C00DE808D /* keyboard@2x.png */; }; + E466FA4E1B42EC0F00EE02A6 /* XHConfigurationHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = E466FA4C1B42EC0F00EE02A6 /* XHConfigurationHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + E466FA4F1B42EC0F00EE02A6 /* XHConfigurationHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = E466FA4D1B42EC0F00EE02A6 /* XHConfigurationHelper.m */; }; + F751C1F11A4C3E1B00743ECB /* MessageDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F751C1E51A4C3E1B00743ECB /* MessageDisplayKit.framework */; }; + F751C1F81A4C3E1B00743ECB /* MessageDisplayKitTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C1F71A4C3E1B00743ECB /* MessageDisplayKitTests.m */; }; + F751C3E51A4C3EDB00743ECB /* NSString+MessageInputView.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2291A4C3EDA00743ECB /* NSString+MessageInputView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C3E61A4C3EDB00743ECB /* NSString+MessageInputView.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C22A1A4C3EDA00743ECB /* NSString+MessageInputView.m */; }; + F751C3E91A4C3EDB00743ECB /* NSString+XHMD5.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C22D1A4C3EDA00743ECB /* NSString+XHMD5.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C3EA1A4C3EDB00743ECB /* NSString+XHMD5.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C22E1A4C3EDA00743ECB /* NSString+XHMD5.m */; }; + F751C3ED1A4C3EDB00743ECB /* UIImage+Alpha.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2331A4C3EDA00743ECB /* UIImage+Alpha.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C3EE1A4C3EDB00743ECB /* UIImage+Alpha.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2341A4C3EDA00743ECB /* UIImage+Alpha.m */; }; + F751C3EF1A4C3EDB00743ECB /* UIImage+Resize.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2351A4C3EDA00743ECB /* UIImage+Resize.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C3F01A4C3EDB00743ECB /* UIImage+Resize.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2361A4C3EDA00743ECB /* UIImage+Resize.m */; }; + F751C3F11A4C3EDB00743ECB /* UIImage+RoundedCorner.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2371A4C3EDA00743ECB /* UIImage+RoundedCorner.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C3F21A4C3EDB00743ECB /* UIImage+RoundedCorner.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2381A4C3EDA00743ECB /* UIImage+RoundedCorner.m */; }; + F751C3F31A4C3EDB00743ECB /* UIImage+Utility.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2391A4C3EDA00743ECB /* UIImage+Utility.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C3F41A4C3EDB00743ECB /* UIImage+Utility.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C23A1A4C3EDA00743ECB /* UIImage+Utility.m */; }; + F751C3F71A4C3EDB00743ECB /* UIImage+XHRounded.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C23D1A4C3EDA00743ECB /* UIImage+XHRounded.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C3F81A4C3EDB00743ECB /* UIImage+XHRounded.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C23E1A4C3EDA00743ECB /* UIImage+XHRounded.m */; }; + F751C3F91A4C3EDB00743ECB /* UIScrollView+XHkeyboardControl.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2401A4C3EDA00743ECB /* UIScrollView+XHkeyboardControl.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C3FA1A4C3EDB00743ECB /* UIScrollView+XHkeyboardControl.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2411A4C3EDA00743ECB /* UIScrollView+XHkeyboardControl.m */; }; + F751C3FD1A4C3EDB00743ECB /* UIView+XHRemoteImage.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2451A4C3EDA00743ECB /* UIView+XHRemoteImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C3FE1A4C3EDB00743ECB /* UIView+XHRemoteImage.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2461A4C3EDA00743ECB /* UIView+XHRemoteImage.m */; }; + F751C3FF1A4C3EDB00743ECB /* XHAudioPlayerHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2481A4C3EDA00743ECB /* XHAudioPlayerHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4001A4C3EDB00743ECB /* XHAudioPlayerHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2491A4C3EDA00743ECB /* XHAudioPlayerHelper.m */; }; + F751C4011A4C3EDB00743ECB /* XHCaptureHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C24A1A4C3EDA00743ECB /* XHCaptureHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4021A4C3EDB00743ECB /* XHCaptureHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C24B1A4C3EDA00743ECB /* XHCaptureHelper.m */; }; + F751C4051A4C3EDB00743ECB /* XHLocationHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C24E1A4C3EDA00743ECB /* XHLocationHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4061A4C3EDB00743ECB /* XHLocationHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C24F1A4C3EDA00743ECB /* XHLocationHelper.m */; }; + F751C4071A4C3EDB00743ECB /* XHMessageBubbleHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2501A4C3EDA00743ECB /* XHMessageBubbleHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4081A4C3EDB00743ECB /* XHMessageBubbleHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2511A4C3EDA00743ECB /* XHMessageBubbleHelper.m */; }; + F751C4091A4C3EDB00743ECB /* XHPhotographyHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2521A4C3EDA00743ECB /* XHPhotographyHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C40A1A4C3EDB00743ECB /* XHPhotographyHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2531A4C3EDA00743ECB /* XHPhotographyHelper.m */; }; + F751C40B1A4C3EDB00743ECB /* XHVoiceCommonHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2541A4C3EDA00743ECB /* XHVoiceCommonHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C40C1A4C3EDB00743ECB /* XHVoiceCommonHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2551A4C3EDA00743ECB /* XHVoiceCommonHelper.m */; }; + F751C40D1A4C3EDB00743ECB /* XHVoiceRecordHelper.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2561A4C3EDA00743ECB /* XHVoiceRecordHelper.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C40E1A4C3EDB00743ECB /* XHVoiceRecordHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2571A4C3EDA00743ECB /* XHVoiceRecordHelper.m */; }; + F751C42D1A4C3EDB00743ECB /* XHDisplayEmotionViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2871A4C3EDA00743ECB /* XHDisplayEmotionViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C42E1A4C3EDB00743ECB /* XHDisplayEmotionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2881A4C3EDA00743ECB /* XHDisplayEmotionViewController.m */; }; + F751C42F1A4C3EDB00743ECB /* XHDisplayLocationViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C28A1A4C3EDA00743ECB /* XHDisplayLocationViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4301A4C3EDB00743ECB /* XHDisplayLocationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C28B1A4C3EDA00743ECB /* XHDisplayLocationViewController.m */; }; + F751C4311A4C3EDB00743ECB /* XHDisplayMediaViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C28D1A4C3EDA00743ECB /* XHDisplayMediaViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4321A4C3EDB00743ECB /* XHDisplayMediaViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C28E1A4C3EDA00743ECB /* XHDisplayMediaViewController.m */; }; + F751C4331A4C3EDB00743ECB /* XHDisplayTextViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2901A4C3EDA00743ECB /* XHDisplayTextViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4341A4C3EDB00743ECB /* XHDisplayTextViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2911A4C3EDA00743ECB /* XHDisplayTextViewController.m */; }; + F751C4351A4C3EDB00743ECB /* XHMessageTableViewController.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2921A4C3EDA00743ECB /* XHMessageTableViewController.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4361A4C3EDB00743ECB /* XHMessageTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2931A4C3EDA00743ECB /* XHMessageTableViewController.m */; }; + F751C44B1A4C3EDB00743ECB /* XHCacheManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2B31A4C3EDB00743ECB /* XHCacheManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C44C1A4C3EDB00743ECB /* XHCacheManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2B41A4C3EDB00743ECB /* XHCacheManager.m */; }; + F751C44D1A4C3EDB00743ECB /* XHFileAttribute.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2B51A4C3EDB00743ECB /* XHFileAttribute.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C44E1A4C3EDB00743ECB /* XHFileAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2B61A4C3EDB00743ECB /* XHFileAttribute.m */; }; + F751C44F1A4C3EDB00743ECB /* XHHTTPClient.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2B81A4C3EDB00743ECB /* XHHTTPClient.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4501A4C3EDB00743ECB /* XHHTTPClient.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2B91A4C3EDB00743ECB /* XHHTTPClient.m */; }; + F751C4511A4C3EDB00743ECB /* XHOperationNetworkKit.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2BA1A4C3EDB00743ECB /* XHOperationNetworkKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4521A4C3EDB00743ECB /* XHOperationNetworkKit.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2BB1A4C3EDB00743ECB /* XHOperationNetworkKit.m */; }; + F751C4531A4C3EDB00743ECB /* XHMessageAvatarFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2BD1A4C3EDB00743ECB /* XHMessageAvatarFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4541A4C3EDB00743ECB /* XHMessageAvatarFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2BE1A4C3EDB00743ECB /* XHMessageAvatarFactory.m */; }; + F751C4551A4C3EDB00743ECB /* XHMessageBubbleFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2BF1A4C3EDB00743ECB /* XHMessageBubbleFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4561A4C3EDB00743ECB /* XHMessageBubbleFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2C01A4C3EDB00743ECB /* XHMessageBubbleFactory.m */; }; + F751C4571A4C3EDB00743ECB /* XHMessageVideoConverPhotoFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2C11A4C3EDB00743ECB /* XHMessageVideoConverPhotoFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4581A4C3EDB00743ECB /* XHMessageVideoConverPhotoFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2C21A4C3EDB00743ECB /* XHMessageVideoConverPhotoFactory.m */; }; + F751C4591A4C3EDB00743ECB /* XHMessageVoiceFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2C31A4C3EDB00743ECB /* XHMessageVoiceFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C45A1A4C3EDB00743ECB /* XHMessageVoiceFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2C41A4C3EDB00743ECB /* XHMessageVoiceFactory.m */; }; + F751C45B1A4C3EDB00743ECB /* XHVideoOutputSampleBufferFactory.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2C51A4C3EDB00743ECB /* XHVideoOutputSampleBufferFactory.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C45C1A4C3EDB00743ECB /* XHVideoOutputSampleBufferFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2C61A4C3EDB00743ECB /* XHVideoOutputSampleBufferFactory.m */; }; + F751C45D1A4C3EDB00743ECB /* XHFoundationMacro.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2C81A4C3EDB00743ECB /* XHFoundationMacro.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C45E1A4C3EDB00743ECB /* XHMacro.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2C91A4C3EDB00743ECB /* XHMacro.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C45F1A4C3EDB00743ECB /* XHUIKitMacro.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2CA1A4C3EDB00743ECB /* XHUIKitMacro.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4621A4C3EDB00743ECB /* XHAnnotation.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2CE1A4C3EDB00743ECB /* XHAnnotation.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4631A4C3EDB00743ECB /* XHAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2CF1A4C3EDB00743ECB /* XHAnnotation.m */; }; + F751C4661A4C3EDB00743ECB /* XHEmotion.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2D21A4C3EDB00743ECB /* XHEmotion.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4671A4C3EDB00743ECB /* XHEmotion.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2D31A4C3EDB00743ECB /* XHEmotion.m */; }; + F751C4681A4C3EDB00743ECB /* XHEmotionManager.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2D41A4C3EDB00743ECB /* XHEmotionManager.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4691A4C3EDB00743ECB /* XHEmotionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2D51A4C3EDB00743ECB /* XHEmotionManager.m */; }; + F751C46A1A4C3EDB00743ECB /* XHMessage.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2D61A4C3EDB00743ECB /* XHMessage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C46B1A4C3EDB00743ECB /* XHMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2D71A4C3EDB00743ECB /* XHMessage.m */; }; + F751C46C1A4C3EDB00743ECB /* XHMessageModel.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2D81A4C3EDB00743ECB /* XHMessageModel.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C46D1A4C3EDB00743ECB /* XHShareMenuItem.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2D91A4C3EDB00743ECB /* XHShareMenuItem.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C46E1A4C3EDB00743ECB /* XHShareMenuItem.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2DA1A4C3EDB00743ECB /* XHShareMenuItem.m */; }; + F751C4711A4C3EDB00743ECB /* FLAnimatedImage.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2DF1A4C3EDB00743ECB /* FLAnimatedImage.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4721A4C3EDB00743ECB /* FLAnimatedImage.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2E01A4C3EDB00743ECB /* FLAnimatedImage.m */; }; + F751C4731A4C3EDB00743ECB /* FLAnimatedImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2E11A4C3EDB00743ECB /* FLAnimatedImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4741A4C3EDB00743ECB /* FLAnimatedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C2E21A4C3EDB00743ECB /* FLAnimatedImageView.m */; }; + F751C48C1A4C3EDB00743ECB /* SECompatibility.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C2FF1A4C3EDB00743ECB /* SECompatibility.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C48D1A4C3EDB00743ECB /* SECompatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C3001A4C3EDB00743ECB /* SECompatibility.m */; }; + F751C48E1A4C3EDB00743ECB /* SEConstants.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C3011A4C3EDB00743ECB /* SEConstants.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C48F1A4C3EDB00743ECB /* SEConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C3021A4C3EDB00743ECB /* SEConstants.m */; }; + F751C4901A4C3EDB00743ECB /* SELineLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C3031A4C3EDB00743ECB /* SELineLayout.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4911A4C3EDB00743ECB /* SELineLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C3041A4C3EDB00743ECB /* SELineLayout.m */; }; + F751C4921A4C3EDB00743ECB /* SELinkText.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C3051A4C3EDB00743ECB /* SELinkText.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4931A4C3EDB00743ECB /* SELinkText.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C3061A4C3EDB00743ECB /* SELinkText.m */; }; + F751C4941A4C3EDB00743ECB /* SESelectionGrabber.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C3071A4C3EDB00743ECB /* SESelectionGrabber.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4951A4C3EDB00743ECB /* SESelectionGrabber.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C3081A4C3EDB00743ECB /* SESelectionGrabber.m */; }; + F751C4961A4C3EDB00743ECB /* SETextAttachment.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C3091A4C3EDB00743ECB /* SETextAttachment.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4971A4C3EDB00743ECB /* SETextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C30A1A4C3EDB00743ECB /* SETextAttachment.m */; }; + F751C4981A4C3EDB00743ECB /* SETextEditingCaret.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C30B1A4C3EDB00743ECB /* SETextEditingCaret.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4991A4C3EDB00743ECB /* SETextEditingCaret.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C30C1A4C3EDB00743ECB /* SETextEditingCaret.m */; }; + F751C49A1A4C3EDB00743ECB /* SETextGeometry.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C30D1A4C3EDB00743ECB /* SETextGeometry.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C49B1A4C3EDB00743ECB /* SETextGeometry.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C30E1A4C3EDB00743ECB /* SETextGeometry.m */; }; + F751C49C1A4C3EDB00743ECB /* SETextInput.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C30F1A4C3EDB00743ECB /* SETextInput.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C49D1A4C3EDB00743ECB /* SETextInput.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C3101A4C3EDB00743ECB /* SETextInput.m */; }; + F751C49E1A4C3EDB00743ECB /* SETextLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C3111A4C3EDB00743ECB /* SETextLayout.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C49F1A4C3EDB00743ECB /* SETextLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C3121A4C3EDB00743ECB /* SETextLayout.m */; }; + F751C4A01A4C3EDB00743ECB /* SETextMagnifierCaret.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C3131A4C3EDB00743ECB /* SETextMagnifierCaret.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4A11A4C3EDB00743ECB /* SETextMagnifierCaret.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C3141A4C3EDB00743ECB /* SETextMagnifierCaret.m */; }; + F751C4A21A4C3EDB00743ECB /* SETextMagnifierRanged.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C3151A4C3EDB00743ECB /* SETextMagnifierRanged.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4A31A4C3EDB00743ECB /* SETextMagnifierRanged.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C3161A4C3EDB00743ECB /* SETextMagnifierRanged.m */; }; + F751C4A41A4C3EDB00743ECB /* SETextSelection.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C3171A4C3EDB00743ECB /* SETextSelection.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4A51A4C3EDB00743ECB /* SETextSelection.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C3181A4C3EDB00743ECB /* SETextSelection.m */; }; + F751C4A61A4C3EDB00743ECB /* SETextSelectionView.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C3191A4C3EDB00743ECB /* SETextSelectionView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4A71A4C3EDB00743ECB /* SETextSelectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C31A1A4C3EDB00743ECB /* SETextSelectionView.m */; }; + F751C4A81A4C3EDB00743ECB /* SETextView.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C31B1A4C3EDB00743ECB /* SETextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4A91A4C3EDB00743ECB /* SETextView.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C31C1A4C3EDB00743ECB /* SETextView.m */; }; + F751C4C01A4C3EDB00743ECB /* XHBaseTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C3391A4C3EDB00743ECB /* XHBaseTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4C11A4C3EDB00743ECB /* XHBaseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C33A1A4C3EDB00743ECB /* XHBaseTableViewCell.m */; }; + F751C4D41A4C3EDB00743ECB /* XHBubblePhotoImageView.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C3511A4C3EDB00743ECB /* XHBubblePhotoImageView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4D51A4C3EDB00743ECB /* XHBubblePhotoImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C3521A4C3EDB00743ECB /* XHBubblePhotoImageView.m */; }; + F751C4D61A4C3EDB00743ECB /* XHMessageBubbleView.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C3531A4C3EDB00743ECB /* XHMessageBubbleView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4D71A4C3EDB00743ECB /* XHMessageBubbleView.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C3541A4C3EDB00743ECB /* XHMessageBubbleView.m */; }; + F751C4D81A4C3EDB00743ECB /* XHMessageTableView.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C3551A4C3EDB00743ECB /* XHMessageTableView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4D91A4C3EDB00743ECB /* XHMessageTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C3561A4C3EDB00743ECB /* XHMessageTableView.m */; }; + F751C4DA1A4C3EDB00743ECB /* XHMessageTableViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C3571A4C3EDB00743ECB /* XHMessageTableViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4DB1A4C3EDB00743ECB /* XHMessageTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C3581A4C3EDB00743ECB /* XHMessageTableViewCell.m */; }; + F751C4DC1A4C3EDB00743ECB /* XHMessageInputView.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C35A1A4C3EDB00743ECB /* XHMessageInputView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4DD1A4C3EDB00743ECB /* XHMessageInputView.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C35B1A4C3EDB00743ECB /* XHMessageInputView.m */; }; + F751C4DE1A4C3EDB00743ECB /* XHMessageTextView.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C35C1A4C3EDB00743ECB /* XHMessageTextView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4DF1A4C3EDB00743ECB /* XHMessageTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C35D1A4C3EDB00743ECB /* XHMessageTextView.m */; }; + F751C4E01A4C3EDB00743ECB /* XHVoiceRecordHUD.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C35E1A4C3EDB00743ECB /* XHVoiceRecordHUD.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4E11A4C3EDB00743ECB /* XHVoiceRecordHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C35F1A4C3EDB00743ECB /* XHVoiceRecordHUD.m */; }; + F751C4E21A4C3EDB00743ECB /* XHEmotionCollectionViewCell.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C3611A4C3EDB00743ECB /* XHEmotionCollectionViewCell.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4E31A4C3EDB00743ECB /* XHEmotionCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C3621A4C3EDB00743ECB /* XHEmotionCollectionViewCell.m */; }; + F751C4E41A4C3EDB00743ECB /* XHEmotionCollectionViewFlowLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C3631A4C3EDB00743ECB /* XHEmotionCollectionViewFlowLayout.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4E51A4C3EDB00743ECB /* XHEmotionCollectionViewFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C3641A4C3EDB00743ECB /* XHEmotionCollectionViewFlowLayout.m */; }; + F751C4E61A4C3EDB00743ECB /* XHEmotionManagerView.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C3651A4C3EDB00743ECB /* XHEmotionManagerView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4E71A4C3EDB00743ECB /* XHEmotionManagerView.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C3661A4C3EDB00743ECB /* XHEmotionManagerView.m */; }; + F751C4E81A4C3EDB00743ECB /* XHEmotionSectionBar.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C3671A4C3EDB00743ECB /* XHEmotionSectionBar.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4E91A4C3EDB00743ECB /* XHEmotionSectionBar.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C3681A4C3EDB00743ECB /* XHEmotionSectionBar.m */; }; + F751C4EA1A4C3EDB00743ECB /* XHShareMenuView.h in Headers */ = {isa = PBXBuildFile; fileRef = F751C3691A4C3EDB00743ECB /* XHShareMenuView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F751C4EB1A4C3EDB00743ECB /* XHShareMenuView.m in Sources */ = {isa = PBXBuildFile; fileRef = F751C36A1A4C3EDB00743ECB /* XHShareMenuView.m */; }; + F751C7AB1A4C402000743ECB /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F751C7AA1A4C402000743ECB /* UIKit.framework */; }; + F751C7AD1A4C402400743ECB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F751C7AC1A4C402400743ECB /* Foundation.framework */; }; + F751C7B01A4C407800743ECB /* MessageDisplayKit-Prefix.pch in Headers */ = {isa = PBXBuildFile; fileRef = F751C7AF1A4C407800743ECB /* MessageDisplayKit-Prefix.pch */; settings = {ATTRIBUTES = (Public, ); }; }; + F7B9E8E21A4D602C0072F81B /* avator@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8861A4D602C0072F81B /* avator@2x.png */; }; + F7B9E8ED1A4D602C0072F81B /* MessageDisplayKitString.strings in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8911A4D602C0072F81B /* MessageDisplayKitString.strings */; }; + F7B9E8EE1A4D602C0072F81B /* face@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8931A4D602C0072F81B /* face@2x.png */; }; + F7B9E8EF1A4D602C0072F81B /* face_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8941A4D602C0072F81B /* face_HL@2x.png */; }; + F7B9E8F01A4D602C0072F81B /* Fav_Cell_Loc@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8951A4D602C0072F81B /* Fav_Cell_Loc@2x.png */; }; + F7B9E8F31A4D602C0072F81B /* input-bar-flat.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8981A4D602C0072F81B /* input-bar-flat.png */; }; + F7B9E8F41A4D602C0072F81B /* input-bar-flat@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8991A4D602C0072F81B /* input-bar-flat@2x.png */; }; + F7B9E8F91A4D602C0072F81B /* MessageVideoPlay@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E89E1A4D602C0072F81B /* MessageVideoPlay@2x.png */; }; + F7B9E8FB1A4D602C0072F81B /* msg_chat_voice_unread.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8A01A4D602C0072F81B /* msg_chat_voice_unread.png */; }; + F7B9E8FC1A4D602C0072F81B /* msg_chat_voice_unread@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8A11A4D602C0072F81B /* msg_chat_voice_unread@2x.png */; }; + F7B9E8FD1A4D602C0072F81B /* multiMedia@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8A21A4D602C0072F81B /* multiMedia@2x.png */; }; + F7B9E8FE1A4D602C0072F81B /* multiMedia_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8A31A4D602C0072F81B /* multiMedia_HL@2x.png */; }; + F7B9E9011A4D602C0072F81B /* placeholderImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8A61A4D602C0072F81B /* placeholderImage@2x.png */; }; + F7B9E9021A4D602C0072F81B /* ReceiverVoiceNodePlaying000@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8A71A4D602C0072F81B /* ReceiverVoiceNodePlaying000@2x.png */; }; + F7B9E9031A4D602C0072F81B /* ReceiverVoiceNodePlaying001@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8A81A4D602C0072F81B /* ReceiverVoiceNodePlaying001@2x.png */; }; + F7B9E9041A4D602C0072F81B /* ReceiverVoiceNodePlaying002@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8A91A4D602C0072F81B /* ReceiverVoiceNodePlaying002@2x.png */; }; + F7B9E9051A4D602C0072F81B /* ReceiverVoiceNodePlaying003@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8AA1A4D602C0072F81B /* ReceiverVoiceNodePlaying003@2x.png */; }; + F7B9E9061A4D602C0072F81B /* ReceiverVoiceNodePlaying@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8AB1A4D602C0072F81B /* ReceiverVoiceNodePlaying@2x.png */; }; + F7B9E9071A4D602C0072F81B /* RecordCancel@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8AC1A4D602C0072F81B /* RecordCancel@2x.png */; }; + F7B9E9081A4D602C0072F81B /* RecordingBkg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8AD1A4D602C0072F81B /* RecordingBkg@2x.png */; }; + F7B9E9091A4D602C0072F81B /* RecordingSignal001@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8AE1A4D602C0072F81B /* RecordingSignal001@2x.png */; }; + F7B9E90A1A4D602C0072F81B /* RecordingSignal002@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8AF1A4D602C0072F81B /* RecordingSignal002@2x.png */; }; + F7B9E90B1A4D602C0072F81B /* RecordingSignal003@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8B01A4D602C0072F81B /* RecordingSignal003@2x.png */; }; + F7B9E90C1A4D602C0072F81B /* RecordingSignal004@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8B11A4D602C0072F81B /* RecordingSignal004@2x.png */; }; + F7B9E90D1A4D602C0072F81B /* RecordingSignal005@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8B21A4D602C0072F81B /* RecordingSignal005@2x.png */; }; + F7B9E90E1A4D602C0072F81B /* RecordingSignal006@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8B31A4D602C0072F81B /* RecordingSignal006@2x.png */; }; + F7B9E90F1A4D602C0072F81B /* RecordingSignal007@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8B41A4D602C0072F81B /* RecordingSignal007@2x.png */; }; + F7B9E9101A4D602C0072F81B /* RecordingSignal008@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8B51A4D602C0072F81B /* RecordingSignal008@2x.png */; }; + F7B9E9121A4D602C0072F81B /* SECoreTextView.bundle in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8B71A4D602C0072F81B /* SECoreTextView.bundle */; }; + F7B9E9231A4D602C0072F81B /* SenderVoiceNodePlaying000@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8C81A4D602C0072F81B /* SenderVoiceNodePlaying000@2x.png */; }; + F7B9E9241A4D602C0072F81B /* SenderVoiceNodePlaying001@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8C91A4D602C0072F81B /* SenderVoiceNodePlaying001@2x.png */; }; + F7B9E9251A4D602C0072F81B /* SenderVoiceNodePlaying002@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8CA1A4D602C0072F81B /* SenderVoiceNodePlaying002@2x.png */; }; + F7B9E9261A4D602C0072F81B /* SenderVoiceNodePlaying003@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8CB1A4D602C0072F81B /* SenderVoiceNodePlaying003@2x.png */; }; + F7B9E9271A4D602C0072F81B /* SenderVoiceNodePlaying@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8CC1A4D602C0072F81B /* SenderVoiceNodePlaying@2x.png */; }; + F7B9E9321A4D602C0072F81B /* voice@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8D71A4D602C0072F81B /* voice@2x.png */; }; + F7B9E9331A4D602C0072F81B /* voice_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8D81A4D602C0072F81B /* voice_HL@2x.png */; }; + F7B9E9341A4D602C0072F81B /* VoiceBtn_Black@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8D91A4D602C0072F81B /* VoiceBtn_Black@2x.png */; }; + F7B9E9351A4D602C0072F81B /* VoiceBtn_BlackHL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8DA1A4D602C0072F81B /* VoiceBtn_BlackHL@2x.png */; }; + F7B9E9371A4D602C0072F81B /* weChatBubble_Receiving_Solid@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8DC1A4D602C0072F81B /* weChatBubble_Receiving_Solid@2x.png */; }; + F7B9E9391A4D602C0072F81B /* weChatBubble_Sending_Solid@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E8DE1A4D602C0072F81B /* weChatBubble_Sending_Solid@2x.png */; }; + F7D253471A4D32B30015764B /* LKBadgeView.h in Headers */ = {isa = PBXBuildFile; fileRef = F7D253451A4D32B30015764B /* LKBadgeView.h */; settings = {ATTRIBUTES = (Public, ); }; }; + F7D253481A4D32B30015764B /* LKBadgeView.m in Sources */ = {isa = PBXBuildFile; fileRef = F7D253461A4D32B30015764B /* LKBadgeView.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + F751C1F21A4C3E1B00743ECB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F751C1DC1A4C3E1B00743ECB /* Project object */; + proxyType = 1; + remoteGlobalIDString = F751C1E41A4C3E1B00743ECB; + remoteInfo = MessageDisplayKit; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 7053E7131B42EE6C00DE808D /* keyboard_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyboard_HL@2x.png"; sourceTree = ""; }; + 7053E7141B42EE6C00DE808D /* keyboard@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyboard@2x.png"; sourceTree = ""; }; + E466FA4C1B42EC0F00EE02A6 /* XHConfigurationHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHConfigurationHelper.h; sourceTree = ""; }; + E466FA4D1B42EC0F00EE02A6 /* XHConfigurationHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHConfigurationHelper.m; sourceTree = ""; }; + F751C1E51A4C3E1B00743ECB /* MessageDisplayKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = MessageDisplayKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + F751C1E91A4C3E1B00743ECB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + F751C1F01A4C3E1B00743ECB /* MessageDisplayKitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MessageDisplayKitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + F751C1F61A4C3E1B00743ECB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + F751C1F71A4C3E1B00743ECB /* MessageDisplayKitTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MessageDisplayKitTests.m; sourceTree = ""; }; + F751C2291A4C3EDA00743ECB /* NSString+MessageInputView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+MessageInputView.h"; sourceTree = ""; }; + F751C22A1A4C3EDA00743ECB /* NSString+MessageInputView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+MessageInputView.m"; sourceTree = ""; }; + F751C22D1A4C3EDA00743ECB /* NSString+XHMD5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+XHMD5.h"; sourceTree = ""; }; + F751C22E1A4C3EDA00743ECB /* NSString+XHMD5.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+XHMD5.m"; sourceTree = ""; }; + F751C2331A4C3EDA00743ECB /* UIImage+Alpha.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+Alpha.h"; sourceTree = ""; }; + F751C2341A4C3EDA00743ECB /* UIImage+Alpha.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+Alpha.m"; sourceTree = ""; }; + F751C2351A4C3EDA00743ECB /* UIImage+Resize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+Resize.h"; sourceTree = ""; }; + F751C2361A4C3EDA00743ECB /* UIImage+Resize.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+Resize.m"; sourceTree = ""; }; + F751C2371A4C3EDA00743ECB /* UIImage+RoundedCorner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+RoundedCorner.h"; sourceTree = ""; }; + F751C2381A4C3EDA00743ECB /* UIImage+RoundedCorner.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+RoundedCorner.m"; sourceTree = ""; }; + F751C2391A4C3EDA00743ECB /* UIImage+Utility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+Utility.h"; sourceTree = ""; }; + F751C23A1A4C3EDA00743ECB /* UIImage+Utility.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+Utility.m"; sourceTree = ""; }; + F751C23D1A4C3EDA00743ECB /* UIImage+XHRounded.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+XHRounded.h"; sourceTree = ""; }; + F751C23E1A4C3EDA00743ECB /* UIImage+XHRounded.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+XHRounded.m"; sourceTree = ""; }; + F751C2401A4C3EDA00743ECB /* UIScrollView+XHkeyboardControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+XHkeyboardControl.h"; sourceTree = ""; }; + F751C2411A4C3EDA00743ECB /* UIScrollView+XHkeyboardControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+XHkeyboardControl.m"; sourceTree = ""; }; + F751C2451A4C3EDA00743ECB /* UIView+XHRemoteImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+XHRemoteImage.h"; sourceTree = ""; }; + F751C2461A4C3EDA00743ECB /* UIView+XHRemoteImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+XHRemoteImage.m"; sourceTree = ""; }; + F751C2481A4C3EDA00743ECB /* XHAudioPlayerHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHAudioPlayerHelper.h; sourceTree = ""; }; + F751C2491A4C3EDA00743ECB /* XHAudioPlayerHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHAudioPlayerHelper.m; sourceTree = ""; }; + F751C24A1A4C3EDA00743ECB /* XHCaptureHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHCaptureHelper.h; sourceTree = ""; }; + F751C24B1A4C3EDA00743ECB /* XHCaptureHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHCaptureHelper.m; sourceTree = ""; }; + F751C24E1A4C3EDA00743ECB /* XHLocationHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHLocationHelper.h; sourceTree = ""; }; + F751C24F1A4C3EDA00743ECB /* XHLocationHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHLocationHelper.m; sourceTree = ""; }; + F751C2501A4C3EDA00743ECB /* XHMessageBubbleHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageBubbleHelper.h; sourceTree = ""; }; + F751C2511A4C3EDA00743ECB /* XHMessageBubbleHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageBubbleHelper.m; sourceTree = ""; }; + F751C2521A4C3EDA00743ECB /* XHPhotographyHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHPhotographyHelper.h; sourceTree = ""; }; + F751C2531A4C3EDA00743ECB /* XHPhotographyHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHPhotographyHelper.m; sourceTree = ""; }; + F751C2541A4C3EDA00743ECB /* XHVoiceCommonHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHVoiceCommonHelper.h; sourceTree = ""; }; + F751C2551A4C3EDA00743ECB /* XHVoiceCommonHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHVoiceCommonHelper.m; sourceTree = ""; }; + F751C2561A4C3EDA00743ECB /* XHVoiceRecordHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHVoiceRecordHelper.h; sourceTree = ""; }; + F751C2571A4C3EDA00743ECB /* XHVoiceRecordHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHVoiceRecordHelper.m; sourceTree = ""; }; + F751C2871A4C3EDA00743ECB /* XHDisplayEmotionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHDisplayEmotionViewController.h; sourceTree = ""; }; + F751C2881A4C3EDA00743ECB /* XHDisplayEmotionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHDisplayEmotionViewController.m; sourceTree = ""; }; + F751C28A1A4C3EDA00743ECB /* XHDisplayLocationViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHDisplayLocationViewController.h; sourceTree = ""; }; + F751C28B1A4C3EDA00743ECB /* XHDisplayLocationViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHDisplayLocationViewController.m; sourceTree = ""; }; + F751C28D1A4C3EDA00743ECB /* XHDisplayMediaViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHDisplayMediaViewController.h; sourceTree = ""; }; + F751C28E1A4C3EDA00743ECB /* XHDisplayMediaViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHDisplayMediaViewController.m; sourceTree = ""; }; + F751C2901A4C3EDA00743ECB /* XHDisplayTextViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHDisplayTextViewController.h; sourceTree = ""; }; + F751C2911A4C3EDA00743ECB /* XHDisplayTextViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHDisplayTextViewController.m; sourceTree = ""; }; + F751C2921A4C3EDA00743ECB /* XHMessageTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageTableViewController.h; sourceTree = ""; }; + F751C2931A4C3EDA00743ECB /* XHMessageTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageTableViewController.m; sourceTree = ""; }; + F751C2B31A4C3EDB00743ECB /* XHCacheManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHCacheManager.h; sourceTree = ""; }; + F751C2B41A4C3EDB00743ECB /* XHCacheManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHCacheManager.m; sourceTree = ""; }; + F751C2B51A4C3EDB00743ECB /* XHFileAttribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHFileAttribute.h; sourceTree = ""; }; + F751C2B61A4C3EDB00743ECB /* XHFileAttribute.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHFileAttribute.m; sourceTree = ""; }; + F751C2B81A4C3EDB00743ECB /* XHHTTPClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHHTTPClient.h; sourceTree = ""; }; + F751C2B91A4C3EDB00743ECB /* XHHTTPClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHHTTPClient.m; sourceTree = ""; }; + F751C2BA1A4C3EDB00743ECB /* XHOperationNetworkKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHOperationNetworkKit.h; sourceTree = ""; }; + F751C2BB1A4C3EDB00743ECB /* XHOperationNetworkKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHOperationNetworkKit.m; sourceTree = ""; }; + F751C2BD1A4C3EDB00743ECB /* XHMessageAvatarFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageAvatarFactory.h; sourceTree = ""; }; + F751C2BE1A4C3EDB00743ECB /* XHMessageAvatarFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageAvatarFactory.m; sourceTree = ""; }; + F751C2BF1A4C3EDB00743ECB /* XHMessageBubbleFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageBubbleFactory.h; sourceTree = ""; }; + F751C2C01A4C3EDB00743ECB /* XHMessageBubbleFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageBubbleFactory.m; sourceTree = ""; }; + F751C2C11A4C3EDB00743ECB /* XHMessageVideoConverPhotoFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageVideoConverPhotoFactory.h; sourceTree = ""; }; + F751C2C21A4C3EDB00743ECB /* XHMessageVideoConverPhotoFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageVideoConverPhotoFactory.m; sourceTree = ""; }; + F751C2C31A4C3EDB00743ECB /* XHMessageVoiceFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageVoiceFactory.h; sourceTree = ""; }; + F751C2C41A4C3EDB00743ECB /* XHMessageVoiceFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageVoiceFactory.m; sourceTree = ""; }; + F751C2C51A4C3EDB00743ECB /* XHVideoOutputSampleBufferFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHVideoOutputSampleBufferFactory.h; sourceTree = ""; }; + F751C2C61A4C3EDB00743ECB /* XHVideoOutputSampleBufferFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHVideoOutputSampleBufferFactory.m; sourceTree = ""; }; + F751C2C81A4C3EDB00743ECB /* XHFoundationMacro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHFoundationMacro.h; sourceTree = ""; }; + F751C2C91A4C3EDB00743ECB /* XHMacro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMacro.h; sourceTree = ""; }; + F751C2CA1A4C3EDB00743ECB /* XHUIKitMacro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHUIKitMacro.h; sourceTree = ""; }; + F751C2CE1A4C3EDB00743ECB /* XHAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHAnnotation.h; sourceTree = ""; }; + F751C2CF1A4C3EDB00743ECB /* XHAnnotation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHAnnotation.m; sourceTree = ""; }; + F751C2D21A4C3EDB00743ECB /* XHEmotion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHEmotion.h; sourceTree = ""; }; + F751C2D31A4C3EDB00743ECB /* XHEmotion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHEmotion.m; sourceTree = ""; }; + F751C2D41A4C3EDB00743ECB /* XHEmotionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHEmotionManager.h; sourceTree = ""; }; + F751C2D51A4C3EDB00743ECB /* XHEmotionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHEmotionManager.m; sourceTree = ""; }; + F751C2D61A4C3EDB00743ECB /* XHMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessage.h; sourceTree = ""; }; + F751C2D71A4C3EDB00743ECB /* XHMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessage.m; sourceTree = ""; }; + F751C2D81A4C3EDB00743ECB /* XHMessageModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageModel.h; sourceTree = ""; }; + F751C2D91A4C3EDB00743ECB /* XHShareMenuItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHShareMenuItem.h; sourceTree = ""; }; + F751C2DA1A4C3EDB00743ECB /* XHShareMenuItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHShareMenuItem.m; sourceTree = ""; }; + F751C2DF1A4C3EDB00743ECB /* FLAnimatedImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FLAnimatedImage.h; sourceTree = ""; }; + F751C2E01A4C3EDB00743ECB /* FLAnimatedImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FLAnimatedImage.m; sourceTree = ""; }; + F751C2E11A4C3EDB00743ECB /* FLAnimatedImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FLAnimatedImageView.h; sourceTree = ""; }; + F751C2E21A4C3EDB00743ECB /* FLAnimatedImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FLAnimatedImageView.m; sourceTree = ""; }; + F751C2FF1A4C3EDB00743ECB /* SECompatibility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SECompatibility.h; sourceTree = ""; }; + F751C3001A4C3EDB00743ECB /* SECompatibility.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SECompatibility.m; sourceTree = ""; }; + F751C3011A4C3EDB00743ECB /* SEConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SEConstants.h; sourceTree = ""; }; + F751C3021A4C3EDB00743ECB /* SEConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SEConstants.m; sourceTree = ""; }; + F751C3031A4C3EDB00743ECB /* SELineLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SELineLayout.h; sourceTree = ""; }; + F751C3041A4C3EDB00743ECB /* SELineLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SELineLayout.m; sourceTree = ""; }; + F751C3051A4C3EDB00743ECB /* SELinkText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SELinkText.h; sourceTree = ""; }; + F751C3061A4C3EDB00743ECB /* SELinkText.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SELinkText.m; sourceTree = ""; }; + F751C3071A4C3EDB00743ECB /* SESelectionGrabber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SESelectionGrabber.h; sourceTree = ""; }; + F751C3081A4C3EDB00743ECB /* SESelectionGrabber.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SESelectionGrabber.m; sourceTree = ""; }; + F751C3091A4C3EDB00743ECB /* SETextAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextAttachment.h; sourceTree = ""; }; + F751C30A1A4C3EDB00743ECB /* SETextAttachment.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextAttachment.m; sourceTree = ""; }; + F751C30B1A4C3EDB00743ECB /* SETextEditingCaret.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextEditingCaret.h; sourceTree = ""; }; + F751C30C1A4C3EDB00743ECB /* SETextEditingCaret.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextEditingCaret.m; sourceTree = ""; }; + F751C30D1A4C3EDB00743ECB /* SETextGeometry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextGeometry.h; sourceTree = ""; }; + F751C30E1A4C3EDB00743ECB /* SETextGeometry.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextGeometry.m; sourceTree = ""; }; + F751C30F1A4C3EDB00743ECB /* SETextInput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextInput.h; sourceTree = ""; }; + F751C3101A4C3EDB00743ECB /* SETextInput.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextInput.m; sourceTree = ""; }; + F751C3111A4C3EDB00743ECB /* SETextLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextLayout.h; sourceTree = ""; }; + F751C3121A4C3EDB00743ECB /* SETextLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextLayout.m; sourceTree = ""; }; + F751C3131A4C3EDB00743ECB /* SETextMagnifierCaret.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextMagnifierCaret.h; sourceTree = ""; }; + F751C3141A4C3EDB00743ECB /* SETextMagnifierCaret.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextMagnifierCaret.m; sourceTree = ""; }; + F751C3151A4C3EDB00743ECB /* SETextMagnifierRanged.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextMagnifierRanged.h; sourceTree = ""; }; + F751C3161A4C3EDB00743ECB /* SETextMagnifierRanged.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextMagnifierRanged.m; sourceTree = ""; }; + F751C3171A4C3EDB00743ECB /* SETextSelection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextSelection.h; sourceTree = ""; }; + F751C3181A4C3EDB00743ECB /* SETextSelection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextSelection.m; sourceTree = ""; }; + F751C3191A4C3EDB00743ECB /* SETextSelectionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextSelectionView.h; sourceTree = ""; }; + F751C31A1A4C3EDB00743ECB /* SETextSelectionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextSelectionView.m; sourceTree = ""; }; + F751C31B1A4C3EDB00743ECB /* SETextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextView.h; sourceTree = ""; }; + F751C31C1A4C3EDB00743ECB /* SETextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextView.m; sourceTree = ""; }; + F751C3391A4C3EDB00743ECB /* XHBaseTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHBaseTableViewCell.h; sourceTree = ""; }; + F751C33A1A4C3EDB00743ECB /* XHBaseTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHBaseTableViewCell.m; sourceTree = ""; }; + F751C3511A4C3EDB00743ECB /* XHBubblePhotoImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHBubblePhotoImageView.h; sourceTree = ""; }; + F751C3521A4C3EDB00743ECB /* XHBubblePhotoImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHBubblePhotoImageView.m; sourceTree = ""; }; + F751C3531A4C3EDB00743ECB /* XHMessageBubbleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageBubbleView.h; sourceTree = ""; }; + F751C3541A4C3EDB00743ECB /* XHMessageBubbleView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageBubbleView.m; sourceTree = ""; }; + F751C3551A4C3EDB00743ECB /* XHMessageTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageTableView.h; sourceTree = ""; }; + F751C3561A4C3EDB00743ECB /* XHMessageTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageTableView.m; sourceTree = ""; }; + F751C3571A4C3EDB00743ECB /* XHMessageTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageTableViewCell.h; sourceTree = ""; }; + F751C3581A4C3EDB00743ECB /* XHMessageTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageTableViewCell.m; sourceTree = ""; }; + F751C35A1A4C3EDB00743ECB /* XHMessageInputView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageInputView.h; sourceTree = ""; }; + F751C35B1A4C3EDB00743ECB /* XHMessageInputView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageInputView.m; sourceTree = ""; }; + F751C35C1A4C3EDB00743ECB /* XHMessageTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageTextView.h; sourceTree = ""; }; + F751C35D1A4C3EDB00743ECB /* XHMessageTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageTextView.m; sourceTree = ""; }; + F751C35E1A4C3EDB00743ECB /* XHVoiceRecordHUD.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHVoiceRecordHUD.h; sourceTree = ""; }; + F751C35F1A4C3EDB00743ECB /* XHVoiceRecordHUD.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHVoiceRecordHUD.m; sourceTree = ""; }; + F751C3611A4C3EDB00743ECB /* XHEmotionCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHEmotionCollectionViewCell.h; sourceTree = ""; }; + F751C3621A4C3EDB00743ECB /* XHEmotionCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHEmotionCollectionViewCell.m; sourceTree = ""; }; + F751C3631A4C3EDB00743ECB /* XHEmotionCollectionViewFlowLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHEmotionCollectionViewFlowLayout.h; sourceTree = ""; }; + F751C3641A4C3EDB00743ECB /* XHEmotionCollectionViewFlowLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHEmotionCollectionViewFlowLayout.m; sourceTree = ""; }; + F751C3651A4C3EDB00743ECB /* XHEmotionManagerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHEmotionManagerView.h; sourceTree = ""; }; + F751C3661A4C3EDB00743ECB /* XHEmotionManagerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHEmotionManagerView.m; sourceTree = ""; }; + F751C3671A4C3EDB00743ECB /* XHEmotionSectionBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHEmotionSectionBar.h; sourceTree = ""; }; + F751C3681A4C3EDB00743ECB /* XHEmotionSectionBar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHEmotionSectionBar.m; sourceTree = ""; }; + F751C3691A4C3EDB00743ECB /* XHShareMenuView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHShareMenuView.h; sourceTree = ""; }; + F751C36A1A4C3EDB00743ECB /* XHShareMenuView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHShareMenuView.m; sourceTree = ""; }; + F751C7AA1A4C402000743ECB /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + F751C7AC1A4C402400743ECB /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + F751C7AF1A4C407800743ECB /* MessageDisplayKit-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MessageDisplayKit-Prefix.pch"; sourceTree = ""; }; + F7B9E8861A4D602C0072F81B /* avator@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "avator@2x.png"; sourceTree = ""; }; + F7B9E8921A4D602C0072F81B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/MessageDisplayKitString.strings; sourceTree = ""; }; + F7B9E8931A4D602C0072F81B /* face@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "face@2x.png"; sourceTree = ""; }; + F7B9E8941A4D602C0072F81B /* face_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "face_HL@2x.png"; sourceTree = ""; }; + F7B9E8951A4D602C0072F81B /* Fav_Cell_Loc@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Fav_Cell_Loc@2x.png"; sourceTree = ""; }; + F7B9E8981A4D602C0072F81B /* input-bar-flat.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-bar-flat.png"; sourceTree = ""; }; + F7B9E8991A4D602C0072F81B /* input-bar-flat@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-bar-flat@2x.png"; sourceTree = ""; }; + F7B9E89E1A4D602C0072F81B /* MessageVideoPlay@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MessageVideoPlay@2x.png"; sourceTree = ""; }; + F7B9E8A01A4D602C0072F81B /* msg_chat_voice_unread.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = msg_chat_voice_unread.png; sourceTree = ""; }; + F7B9E8A11A4D602C0072F81B /* msg_chat_voice_unread@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "msg_chat_voice_unread@2x.png"; sourceTree = ""; }; + F7B9E8A21A4D602C0072F81B /* multiMedia@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "multiMedia@2x.png"; sourceTree = ""; }; + F7B9E8A31A4D602C0072F81B /* multiMedia_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "multiMedia_HL@2x.png"; sourceTree = ""; }; + F7B9E8A61A4D602C0072F81B /* placeholderImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "placeholderImage@2x.png"; sourceTree = ""; }; + F7B9E8A71A4D602C0072F81B /* ReceiverVoiceNodePlaying000@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying000@2x.png"; sourceTree = ""; }; + F7B9E8A81A4D602C0072F81B /* ReceiverVoiceNodePlaying001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying001@2x.png"; sourceTree = ""; }; + F7B9E8A91A4D602C0072F81B /* ReceiverVoiceNodePlaying002@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying002@2x.png"; sourceTree = ""; }; + F7B9E8AA1A4D602C0072F81B /* ReceiverVoiceNodePlaying003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying003@2x.png"; sourceTree = ""; }; + F7B9E8AB1A4D602C0072F81B /* ReceiverVoiceNodePlaying@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying@2x.png"; sourceTree = ""; }; + F7B9E8AC1A4D602C0072F81B /* RecordCancel@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordCancel@2x.png"; sourceTree = ""; }; + F7B9E8AD1A4D602C0072F81B /* RecordingBkg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingBkg@2x.png"; sourceTree = ""; }; + F7B9E8AE1A4D602C0072F81B /* RecordingSignal001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal001@2x.png"; sourceTree = ""; }; + F7B9E8AF1A4D602C0072F81B /* RecordingSignal002@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal002@2x.png"; sourceTree = ""; }; + F7B9E8B01A4D602C0072F81B /* RecordingSignal003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal003@2x.png"; sourceTree = ""; }; + F7B9E8B11A4D602C0072F81B /* RecordingSignal004@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal004@2x.png"; sourceTree = ""; }; + F7B9E8B21A4D602C0072F81B /* RecordingSignal005@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal005@2x.png"; sourceTree = ""; }; + F7B9E8B31A4D602C0072F81B /* RecordingSignal006@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal006@2x.png"; sourceTree = ""; }; + F7B9E8B41A4D602C0072F81B /* RecordingSignal007@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal007@2x.png"; sourceTree = ""; }; + F7B9E8B51A4D602C0072F81B /* RecordingSignal008@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal008@2x.png"; sourceTree = ""; }; + F7B9E8B71A4D602C0072F81B /* SECoreTextView.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = SECoreTextView.bundle; sourceTree = ""; }; + F7B9E8C81A4D602C0072F81B /* SenderVoiceNodePlaying000@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying000@2x.png"; sourceTree = ""; }; + F7B9E8C91A4D602C0072F81B /* SenderVoiceNodePlaying001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying001@2x.png"; sourceTree = ""; }; + F7B9E8CA1A4D602C0072F81B /* SenderVoiceNodePlaying002@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying002@2x.png"; sourceTree = ""; }; + F7B9E8CB1A4D602C0072F81B /* SenderVoiceNodePlaying003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying003@2x.png"; sourceTree = ""; }; + F7B9E8CC1A4D602C0072F81B /* SenderVoiceNodePlaying@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying@2x.png"; sourceTree = ""; }; + F7B9E8D71A4D602C0072F81B /* voice@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "voice@2x.png"; sourceTree = ""; }; + F7B9E8D81A4D602C0072F81B /* voice_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "voice_HL@2x.png"; sourceTree = ""; }; + F7B9E8D91A4D602C0072F81B /* VoiceBtn_Black@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceBtn_Black@2x.png"; sourceTree = ""; }; + F7B9E8DA1A4D602C0072F81B /* VoiceBtn_BlackHL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceBtn_BlackHL@2x.png"; sourceTree = ""; }; + F7B9E8DC1A4D602C0072F81B /* weChatBubble_Receiving_Solid@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weChatBubble_Receiving_Solid@2x.png"; sourceTree = ""; }; + F7B9E8DE1A4D602C0072F81B /* weChatBubble_Sending_Solid@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weChatBubble_Sending_Solid@2x.png"; sourceTree = ""; }; + F7B9E8DF1A4D602C0072F81B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MessageDisplayKitString.strings"; sourceTree = ""; }; + F7D253451A4D32B30015764B /* LKBadgeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LKBadgeView.h; sourceTree = ""; }; + F7D253461A4D32B30015764B /* LKBadgeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LKBadgeView.m; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + F751C1E11A4C3E1B00743ECB /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F751C7AD1A4C402400743ECB /* Foundation.framework in Frameworks */, + F751C7AB1A4C402000743ECB /* UIKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F751C1ED1A4C3E1B00743ECB /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F751C1F11A4C3E1B00743ECB /* MessageDisplayKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + F751C1DB1A4C3E1B00743ECB = { + isa = PBXGroup; + children = ( + F751C1E71A4C3E1B00743ECB /* MessageDisplayKit */, + F751C1F41A4C3E1B00743ECB /* MessageDisplayKitTests */, + F751C7AE1A4C402F00743ECB /* Frameworks */, + F751C1E61A4C3E1B00743ECB /* Products */, + ); + sourceTree = ""; + }; + F751C1E61A4C3E1B00743ECB /* Products */ = { + isa = PBXGroup; + children = ( + F751C1E51A4C3E1B00743ECB /* MessageDisplayKit.framework */, + F751C1F01A4C3E1B00743ECB /* MessageDisplayKitTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + F751C1E71A4C3E1B00743ECB /* MessageDisplayKit */ = { + isa = PBXGroup; + children = ( + F751C2251A4C3EDA00743ECB /* MessageDisplayKit */, + F751C1E81A4C3E1B00743ECB /* Supporting Files */, + ); + path = MessageDisplayKit; + sourceTree = ""; + }; + F751C1E81A4C3E1B00743ECB /* Supporting Files */ = { + isa = PBXGroup; + children = ( + F751C1E91A4C3E1B00743ECB /* Info.plist */, + F751C7AF1A4C407800743ECB /* MessageDisplayKit-Prefix.pch */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + F751C1F41A4C3E1B00743ECB /* MessageDisplayKitTests */ = { + isa = PBXGroup; + children = ( + F751C1F71A4C3E1B00743ECB /* MessageDisplayKitTests.m */, + F751C1F51A4C3E1B00743ECB /* Supporting Files */, + ); + path = MessageDisplayKitTests; + sourceTree = ""; + }; + F751C1F51A4C3E1B00743ECB /* Supporting Files */ = { + isa = PBXGroup; + children = ( + F751C1F61A4C3E1B00743ECB /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + F751C2251A4C3EDA00743ECB /* MessageDisplayKit */ = { + isa = PBXGroup; + children = ( + F751C2261A4C3EDA00743ECB /* Classes */, + F7B9E8831A4D602C0072F81B /* Resources */, + ); + name = MessageDisplayKit; + path = ../../../MessageDisplayKit; + sourceTree = ""; + }; + F751C2261A4C3EDA00743ECB /* Classes */ = { + isa = PBXGroup; + children = ( + F751C2DD1A4C3EDB00743ECB /* Vendor */, + F751C2471A4C3EDA00743ECB /* Common */, + F751C2271A4C3EDA00743ECB /* Categorys */, + F751C2C71A4C3EDB00743ECB /* Macro */, + F751C2B11A4C3EDB00743ECB /* Core */, + F751C2BC1A4C3EDB00743ECB /* Factorys */, + F751C2CB1A4C3EDB00743ECB /* Models */, + F751C32B1A4C3EDB00743ECB /* Views */, + F751C2581A4C3EDA00743ECB /* Controllers */, + ); + path = Classes; + sourceTree = ""; + }; + F751C2271A4C3EDA00743ECB /* Categorys */ = { + isa = PBXGroup; + children = ( + F751C2281A4C3EDA00743ECB /* NSString */, + F751C2321A4C3EDA00743ECB /* UIImage */, + F751C23F1A4C3EDA00743ECB /* UIScrollView */, + F751C2421A4C3EDA00743ECB /* UIView */, + ); + path = Categorys; + sourceTree = ""; + }; + F751C2281A4C3EDA00743ECB /* NSString */ = { + isa = PBXGroup; + children = ( + F751C2291A4C3EDA00743ECB /* NSString+MessageInputView.h */, + F751C22A1A4C3EDA00743ECB /* NSString+MessageInputView.m */, + F751C22D1A4C3EDA00743ECB /* NSString+XHMD5.h */, + F751C22E1A4C3EDA00743ECB /* NSString+XHMD5.m */, + ); + path = NSString; + sourceTree = ""; + }; + F751C2321A4C3EDA00743ECB /* UIImage */ = { + isa = PBXGroup; + children = ( + F751C2331A4C3EDA00743ECB /* UIImage+Alpha.h */, + F751C2341A4C3EDA00743ECB /* UIImage+Alpha.m */, + F751C2351A4C3EDA00743ECB /* UIImage+Resize.h */, + F751C2361A4C3EDA00743ECB /* UIImage+Resize.m */, + F751C2371A4C3EDA00743ECB /* UIImage+RoundedCorner.h */, + F751C2381A4C3EDA00743ECB /* UIImage+RoundedCorner.m */, + F751C2391A4C3EDA00743ECB /* UIImage+Utility.h */, + F751C23A1A4C3EDA00743ECB /* UIImage+Utility.m */, + F751C23D1A4C3EDA00743ECB /* UIImage+XHRounded.h */, + F751C23E1A4C3EDA00743ECB /* UIImage+XHRounded.m */, + ); + path = UIImage; + sourceTree = ""; + }; + F751C23F1A4C3EDA00743ECB /* UIScrollView */ = { + isa = PBXGroup; + children = ( + F751C2401A4C3EDA00743ECB /* UIScrollView+XHkeyboardControl.h */, + F751C2411A4C3EDA00743ECB /* UIScrollView+XHkeyboardControl.m */, + ); + path = UIScrollView; + sourceTree = ""; + }; + F751C2421A4C3EDA00743ECB /* UIView */ = { + isa = PBXGroup; + children = ( + F751C2451A4C3EDA00743ECB /* UIView+XHRemoteImage.h */, + F751C2461A4C3EDA00743ECB /* UIView+XHRemoteImage.m */, + ); + path = UIView; + sourceTree = ""; + }; + F751C2471A4C3EDA00743ECB /* Common */ = { + isa = PBXGroup; + children = ( + F751C2481A4C3EDA00743ECB /* XHAudioPlayerHelper.h */, + F751C2491A4C3EDA00743ECB /* XHAudioPlayerHelper.m */, + F751C24A1A4C3EDA00743ECB /* XHCaptureHelper.h */, + F751C24B1A4C3EDA00743ECB /* XHCaptureHelper.m */, + F751C24E1A4C3EDA00743ECB /* XHLocationHelper.h */, + F751C24F1A4C3EDA00743ECB /* XHLocationHelper.m */, + F751C2501A4C3EDA00743ECB /* XHMessageBubbleHelper.h */, + F751C2511A4C3EDA00743ECB /* XHMessageBubbleHelper.m */, + F751C2521A4C3EDA00743ECB /* XHPhotographyHelper.h */, + F751C2531A4C3EDA00743ECB /* XHPhotographyHelper.m */, + F751C2541A4C3EDA00743ECB /* XHVoiceCommonHelper.h */, + F751C2551A4C3EDA00743ECB /* XHVoiceCommonHelper.m */, + F751C2561A4C3EDA00743ECB /* XHVoiceRecordHelper.h */, + F751C2571A4C3EDA00743ECB /* XHVoiceRecordHelper.m */, + E466FA4C1B42EC0F00EE02A6 /* XHConfigurationHelper.h */, + E466FA4D1B42EC0F00EE02A6 /* XHConfigurationHelper.m */, + ); + path = Common; + sourceTree = ""; + }; + F751C2581A4C3EDA00743ECB /* Controllers */ = { + isa = PBXGroup; + children = ( + F751C2851A4C3EDA00743ECB /* XHMessageTableViewController */, + ); + path = Controllers; + sourceTree = ""; + }; + F751C2851A4C3EDA00743ECB /* XHMessageTableViewController */ = { + isa = PBXGroup; + children = ( + F751C2861A4C3EDA00743ECB /* XHDisplayEmotionViewController */, + F751C2891A4C3EDA00743ECB /* XHDisplayLocationViewController */, + F751C28C1A4C3EDA00743ECB /* XHDisplayMediaViewController */, + F751C28F1A4C3EDA00743ECB /* XHDisplayTextViewController */, + F751C2921A4C3EDA00743ECB /* XHMessageTableViewController.h */, + F751C2931A4C3EDA00743ECB /* XHMessageTableViewController.m */, + ); + path = XHMessageTableViewController; + sourceTree = ""; + }; + F751C2861A4C3EDA00743ECB /* XHDisplayEmotionViewController */ = { + isa = PBXGroup; + children = ( + F751C2871A4C3EDA00743ECB /* XHDisplayEmotionViewController.h */, + F751C2881A4C3EDA00743ECB /* XHDisplayEmotionViewController.m */, + ); + path = XHDisplayEmotionViewController; + sourceTree = ""; + }; + F751C2891A4C3EDA00743ECB /* XHDisplayLocationViewController */ = { + isa = PBXGroup; + children = ( + F751C28A1A4C3EDA00743ECB /* XHDisplayLocationViewController.h */, + F751C28B1A4C3EDA00743ECB /* XHDisplayLocationViewController.m */, + ); + path = XHDisplayLocationViewController; + sourceTree = ""; + }; + F751C28C1A4C3EDA00743ECB /* XHDisplayMediaViewController */ = { + isa = PBXGroup; + children = ( + F751C28D1A4C3EDA00743ECB /* XHDisplayMediaViewController.h */, + F751C28E1A4C3EDA00743ECB /* XHDisplayMediaViewController.m */, + ); + path = XHDisplayMediaViewController; + sourceTree = ""; + }; + F751C28F1A4C3EDA00743ECB /* XHDisplayTextViewController */ = { + isa = PBXGroup; + children = ( + F751C2901A4C3EDA00743ECB /* XHDisplayTextViewController.h */, + F751C2911A4C3EDA00743ECB /* XHDisplayTextViewController.m */, + ); + path = XHDisplayTextViewController; + sourceTree = ""; + }; + F751C2B11A4C3EDB00743ECB /* Core */ = { + isa = PBXGroup; + children = ( + F751C2B21A4C3EDB00743ECB /* Cache */, + F751C2B71A4C3EDB00743ECB /* Network */, + ); + path = Core; + sourceTree = ""; + }; + F751C2B21A4C3EDB00743ECB /* Cache */ = { + isa = PBXGroup; + children = ( + F751C2B31A4C3EDB00743ECB /* XHCacheManager.h */, + F751C2B41A4C3EDB00743ECB /* XHCacheManager.m */, + F751C2B51A4C3EDB00743ECB /* XHFileAttribute.h */, + F751C2B61A4C3EDB00743ECB /* XHFileAttribute.m */, + ); + path = Cache; + sourceTree = ""; + }; + F751C2B71A4C3EDB00743ECB /* Network */ = { + isa = PBXGroup; + children = ( + F751C2B81A4C3EDB00743ECB /* XHHTTPClient.h */, + F751C2B91A4C3EDB00743ECB /* XHHTTPClient.m */, + F751C2BA1A4C3EDB00743ECB /* XHOperationNetworkKit.h */, + F751C2BB1A4C3EDB00743ECB /* XHOperationNetworkKit.m */, + ); + path = Network; + sourceTree = ""; + }; + F751C2BC1A4C3EDB00743ECB /* Factorys */ = { + isa = PBXGroup; + children = ( + F751C2BD1A4C3EDB00743ECB /* XHMessageAvatarFactory.h */, + F751C2BE1A4C3EDB00743ECB /* XHMessageAvatarFactory.m */, + F751C2BF1A4C3EDB00743ECB /* XHMessageBubbleFactory.h */, + F751C2C01A4C3EDB00743ECB /* XHMessageBubbleFactory.m */, + F751C2C11A4C3EDB00743ECB /* XHMessageVideoConverPhotoFactory.h */, + F751C2C21A4C3EDB00743ECB /* XHMessageVideoConverPhotoFactory.m */, + F751C2C31A4C3EDB00743ECB /* XHMessageVoiceFactory.h */, + F751C2C41A4C3EDB00743ECB /* XHMessageVoiceFactory.m */, + F751C2C51A4C3EDB00743ECB /* XHVideoOutputSampleBufferFactory.h */, + F751C2C61A4C3EDB00743ECB /* XHVideoOutputSampleBufferFactory.m */, + ); + path = Factorys; + sourceTree = ""; + }; + F751C2C71A4C3EDB00743ECB /* Macro */ = { + isa = PBXGroup; + children = ( + F751C2C81A4C3EDB00743ECB /* XHFoundationMacro.h */, + F751C2C91A4C3EDB00743ECB /* XHMacro.h */, + F751C2CA1A4C3EDB00743ECB /* XHUIKitMacro.h */, + ); + path = Macro; + sourceTree = ""; + }; + F751C2CB1A4C3EDB00743ECB /* Models */ = { + isa = PBXGroup; + children = ( + F751C2CE1A4C3EDB00743ECB /* XHAnnotation.h */, + F751C2CF1A4C3EDB00743ECB /* XHAnnotation.m */, + F751C2D21A4C3EDB00743ECB /* XHEmotion.h */, + F751C2D31A4C3EDB00743ECB /* XHEmotion.m */, + F751C2D41A4C3EDB00743ECB /* XHEmotionManager.h */, + F751C2D51A4C3EDB00743ECB /* XHEmotionManager.m */, + F751C2D61A4C3EDB00743ECB /* XHMessage.h */, + F751C2D71A4C3EDB00743ECB /* XHMessage.m */, + F751C2D81A4C3EDB00743ECB /* XHMessageModel.h */, + F751C2D91A4C3EDB00743ECB /* XHShareMenuItem.h */, + F751C2DA1A4C3EDB00743ECB /* XHShareMenuItem.m */, + ); + path = Models; + sourceTree = ""; + }; + F751C2DD1A4C3EDB00743ECB /* Vendor */ = { + isa = PBXGroup; + children = ( + F7D253441A4D32B30015764B /* LKBadgeView */, + F751C2DE1A4C3EDB00743ECB /* FLAnimatedImageView */, + F751C2FC1A4C3EDB00743ECB /* SECoreTextView */, + ); + path = Vendor; + sourceTree = ""; + }; + F751C2DE1A4C3EDB00743ECB /* FLAnimatedImageView */ = { + isa = PBXGroup; + children = ( + F751C2DF1A4C3EDB00743ECB /* FLAnimatedImage.h */, + F751C2E01A4C3EDB00743ECB /* FLAnimatedImage.m */, + F751C2E11A4C3EDB00743ECB /* FLAnimatedImageView.h */, + F751C2E21A4C3EDB00743ECB /* FLAnimatedImageView.m */, + ); + path = FLAnimatedImageView; + sourceTree = ""; + }; + F751C2FC1A4C3EDB00743ECB /* SECoreTextView */ = { + isa = PBXGroup; + children = ( + F751C2FF1A4C3EDB00743ECB /* SECompatibility.h */, + F751C3001A4C3EDB00743ECB /* SECompatibility.m */, + F751C3011A4C3EDB00743ECB /* SEConstants.h */, + F751C3021A4C3EDB00743ECB /* SEConstants.m */, + F751C3031A4C3EDB00743ECB /* SELineLayout.h */, + F751C3041A4C3EDB00743ECB /* SELineLayout.m */, + F751C3051A4C3EDB00743ECB /* SELinkText.h */, + F751C3061A4C3EDB00743ECB /* SELinkText.m */, + F751C3071A4C3EDB00743ECB /* SESelectionGrabber.h */, + F751C3081A4C3EDB00743ECB /* SESelectionGrabber.m */, + F751C3091A4C3EDB00743ECB /* SETextAttachment.h */, + F751C30A1A4C3EDB00743ECB /* SETextAttachment.m */, + F751C30B1A4C3EDB00743ECB /* SETextEditingCaret.h */, + F751C30C1A4C3EDB00743ECB /* SETextEditingCaret.m */, + F751C30D1A4C3EDB00743ECB /* SETextGeometry.h */, + F751C30E1A4C3EDB00743ECB /* SETextGeometry.m */, + F751C30F1A4C3EDB00743ECB /* SETextInput.h */, + F751C3101A4C3EDB00743ECB /* SETextInput.m */, + F751C3111A4C3EDB00743ECB /* SETextLayout.h */, + F751C3121A4C3EDB00743ECB /* SETextLayout.m */, + F751C3131A4C3EDB00743ECB /* SETextMagnifierCaret.h */, + F751C3141A4C3EDB00743ECB /* SETextMagnifierCaret.m */, + F751C3151A4C3EDB00743ECB /* SETextMagnifierRanged.h */, + F751C3161A4C3EDB00743ECB /* SETextMagnifierRanged.m */, + F751C3171A4C3EDB00743ECB /* SETextSelection.h */, + F751C3181A4C3EDB00743ECB /* SETextSelection.m */, + F751C3191A4C3EDB00743ECB /* SETextSelectionView.h */, + F751C31A1A4C3EDB00743ECB /* SETextSelectionView.m */, + F751C31B1A4C3EDB00743ECB /* SETextView.h */, + F751C31C1A4C3EDB00743ECB /* SETextView.m */, + ); + path = SECoreTextView; + sourceTree = ""; + }; + F751C32B1A4C3EDB00743ECB /* Views */ = { + isa = PBXGroup; + children = ( + F751C3381A4C3EDB00743ECB /* BaseTableViewCell */, + F751C3501A4C3EDB00743ECB /* MessageContentViews */, + F751C3591A4C3EDB00743ECB /* MessageInputView */, + F751C3601A4C3EDB00743ECB /* MessageMenuViews */, + ); + path = Views; + sourceTree = ""; + }; + F751C3381A4C3EDB00743ECB /* BaseTableViewCell */ = { + isa = PBXGroup; + children = ( + F751C3391A4C3EDB00743ECB /* XHBaseTableViewCell.h */, + F751C33A1A4C3EDB00743ECB /* XHBaseTableViewCell.m */, + ); + path = BaseTableViewCell; + sourceTree = ""; + }; + F751C3501A4C3EDB00743ECB /* MessageContentViews */ = { + isa = PBXGroup; + children = ( + F751C3511A4C3EDB00743ECB /* XHBubblePhotoImageView.h */, + F751C3521A4C3EDB00743ECB /* XHBubblePhotoImageView.m */, + F751C3531A4C3EDB00743ECB /* XHMessageBubbleView.h */, + F751C3541A4C3EDB00743ECB /* XHMessageBubbleView.m */, + F751C3551A4C3EDB00743ECB /* XHMessageTableView.h */, + F751C3561A4C3EDB00743ECB /* XHMessageTableView.m */, + F751C3571A4C3EDB00743ECB /* XHMessageTableViewCell.h */, + F751C3581A4C3EDB00743ECB /* XHMessageTableViewCell.m */, + ); + path = MessageContentViews; + sourceTree = ""; + }; + F751C3591A4C3EDB00743ECB /* MessageInputView */ = { + isa = PBXGroup; + children = ( + F751C35A1A4C3EDB00743ECB /* XHMessageInputView.h */, + F751C35B1A4C3EDB00743ECB /* XHMessageInputView.m */, + F751C35C1A4C3EDB00743ECB /* XHMessageTextView.h */, + F751C35D1A4C3EDB00743ECB /* XHMessageTextView.m */, + F751C35E1A4C3EDB00743ECB /* XHVoiceRecordHUD.h */, + F751C35F1A4C3EDB00743ECB /* XHVoiceRecordHUD.m */, + ); + path = MessageInputView; + sourceTree = ""; + }; + F751C3601A4C3EDB00743ECB /* MessageMenuViews */ = { + isa = PBXGroup; + children = ( + F751C3611A4C3EDB00743ECB /* XHEmotionCollectionViewCell.h */, + F751C3621A4C3EDB00743ECB /* XHEmotionCollectionViewCell.m */, + F751C3631A4C3EDB00743ECB /* XHEmotionCollectionViewFlowLayout.h */, + F751C3641A4C3EDB00743ECB /* XHEmotionCollectionViewFlowLayout.m */, + F751C3651A4C3EDB00743ECB /* XHEmotionManagerView.h */, + F751C3661A4C3EDB00743ECB /* XHEmotionManagerView.m */, + F751C3671A4C3EDB00743ECB /* XHEmotionSectionBar.h */, + F751C3681A4C3EDB00743ECB /* XHEmotionSectionBar.m */, + F751C3691A4C3EDB00743ECB /* XHShareMenuView.h */, + F751C36A1A4C3EDB00743ECB /* XHShareMenuView.m */, + ); + path = MessageMenuViews; + sourceTree = ""; + }; + F751C7AE1A4C402F00743ECB /* Frameworks */ = { + isa = PBXGroup; + children = ( + F751C7AC1A4C402400743ECB /* Foundation.framework */, + F751C7AA1A4C402000743ECB /* UIKit.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + F7B9E8831A4D602C0072F81B /* Resources */ = { + isa = PBXGroup; + children = ( + F7B9E8861A4D602C0072F81B /* avator@2x.png */, + F7B9E8911A4D602C0072F81B /* MessageDisplayKitString.strings */, + F7B9E8931A4D602C0072F81B /* face@2x.png */, + F7B9E8941A4D602C0072F81B /* face_HL@2x.png */, + F7B9E8951A4D602C0072F81B /* Fav_Cell_Loc@2x.png */, + 7053E7131B42EE6C00DE808D /* keyboard_HL@2x.png */, + 7053E7141B42EE6C00DE808D /* keyboard@2x.png */, + F7B9E8981A4D602C0072F81B /* input-bar-flat.png */, + F7B9E8991A4D602C0072F81B /* input-bar-flat@2x.png */, + F7B9E89E1A4D602C0072F81B /* MessageVideoPlay@2x.png */, + F7B9E8A01A4D602C0072F81B /* msg_chat_voice_unread.png */, + F7B9E8A11A4D602C0072F81B /* msg_chat_voice_unread@2x.png */, + F7B9E8A21A4D602C0072F81B /* multiMedia@2x.png */, + F7B9E8A31A4D602C0072F81B /* multiMedia_HL@2x.png */, + F7B9E8A61A4D602C0072F81B /* placeholderImage@2x.png */, + F7B9E8A71A4D602C0072F81B /* ReceiverVoiceNodePlaying000@2x.png */, + F7B9E8A81A4D602C0072F81B /* ReceiverVoiceNodePlaying001@2x.png */, + F7B9E8A91A4D602C0072F81B /* ReceiverVoiceNodePlaying002@2x.png */, + F7B9E8AA1A4D602C0072F81B /* ReceiverVoiceNodePlaying003@2x.png */, + F7B9E8AB1A4D602C0072F81B /* ReceiverVoiceNodePlaying@2x.png */, + F7B9E8AC1A4D602C0072F81B /* RecordCancel@2x.png */, + F7B9E8AD1A4D602C0072F81B /* RecordingBkg@2x.png */, + F7B9E8AE1A4D602C0072F81B /* RecordingSignal001@2x.png */, + F7B9E8AF1A4D602C0072F81B /* RecordingSignal002@2x.png */, + F7B9E8B01A4D602C0072F81B /* RecordingSignal003@2x.png */, + F7B9E8B11A4D602C0072F81B /* RecordingSignal004@2x.png */, + F7B9E8B21A4D602C0072F81B /* RecordingSignal005@2x.png */, + F7B9E8B31A4D602C0072F81B /* RecordingSignal006@2x.png */, + F7B9E8B41A4D602C0072F81B /* RecordingSignal007@2x.png */, + F7B9E8B51A4D602C0072F81B /* RecordingSignal008@2x.png */, + F7B9E8B71A4D602C0072F81B /* SECoreTextView.bundle */, + F7B9E8C81A4D602C0072F81B /* SenderVoiceNodePlaying000@2x.png */, + F7B9E8C91A4D602C0072F81B /* SenderVoiceNodePlaying001@2x.png */, + F7B9E8CA1A4D602C0072F81B /* SenderVoiceNodePlaying002@2x.png */, + F7B9E8CB1A4D602C0072F81B /* SenderVoiceNodePlaying003@2x.png */, + F7B9E8CC1A4D602C0072F81B /* SenderVoiceNodePlaying@2x.png */, + F7B9E8D71A4D602C0072F81B /* voice@2x.png */, + F7B9E8D81A4D602C0072F81B /* voice_HL@2x.png */, + F7B9E8D91A4D602C0072F81B /* VoiceBtn_Black@2x.png */, + F7B9E8DA1A4D602C0072F81B /* VoiceBtn_BlackHL@2x.png */, + F7B9E8DC1A4D602C0072F81B /* weChatBubble_Receiving_Solid@2x.png */, + F7B9E8DE1A4D602C0072F81B /* weChatBubble_Sending_Solid@2x.png */, + ); + path = Resources; + sourceTree = ""; + }; + F7D253441A4D32B30015764B /* LKBadgeView */ = { + isa = PBXGroup; + children = ( + F7D253451A4D32B30015764B /* LKBadgeView.h */, + F7D253461A4D32B30015764B /* LKBadgeView.m */, + ); + path = LKBadgeView; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXHeadersBuildPhase section */ + F751C1E21A4C3E1B00743ECB /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + F751C4091A4C3EDB00743ECB /* XHPhotographyHelper.h in Headers */, + F751C44D1A4C3EDB00743ECB /* XHFileAttribute.h in Headers */, + F751C4311A4C3EDB00743ECB /* XHDisplayMediaViewController.h in Headers */, + F751C4E41A4C3EDB00743ECB /* XHEmotionCollectionViewFlowLayout.h in Headers */, + F751C4961A4C3EDB00743ECB /* SETextAttachment.h in Headers */, + F751C4621A4C3EDB00743ECB /* XHAnnotation.h in Headers */, + F751C3E51A4C3EDB00743ECB /* NSString+MessageInputView.h in Headers */, + F751C46A1A4C3EDB00743ECB /* XHMessage.h in Headers */, + F751C3F71A4C3EDB00743ECB /* UIImage+XHRounded.h in Headers */, + F751C4E81A4C3EDB00743ECB /* XHEmotionSectionBar.h in Headers */, + F751C40D1A4C3EDB00743ECB /* XHVoiceRecordHelper.h in Headers */, + F751C46C1A4C3EDB00743ECB /* XHMessageModel.h in Headers */, + F751C4A61A4C3EDB00743ECB /* SETextSelectionView.h in Headers */, + F751C4A21A4C3EDB00743ECB /* SETextMagnifierRanged.h in Headers */, + F751C4071A4C3EDB00743ECB /* XHMessageBubbleHelper.h in Headers */, + F751C4A81A4C3EDB00743ECB /* SETextView.h in Headers */, + F751C4D61A4C3EDB00743ECB /* XHMessageBubbleView.h in Headers */, + F751C3F11A4C3EDB00743ECB /* UIImage+RoundedCorner.h in Headers */, + F751C4EA1A4C3EDB00743ECB /* XHShareMenuView.h in Headers */, + F751C42F1A4C3EDB00743ECB /* XHDisplayLocationViewController.h in Headers */, + F751C4731A4C3EDB00743ECB /* FLAnimatedImageView.h in Headers */, + F751C49C1A4C3EDB00743ECB /* SETextInput.h in Headers */, + F751C4711A4C3EDB00743ECB /* FLAnimatedImage.h in Headers */, + F751C4A41A4C3EDB00743ECB /* SETextSelection.h in Headers */, + F751C4661A4C3EDB00743ECB /* XHEmotion.h in Headers */, + F751C40B1A4C3EDB00743ECB /* XHVoiceCommonHelper.h in Headers */, + F751C4D81A4C3EDB00743ECB /* XHMessageTableView.h in Headers */, + F751C3F31A4C3EDB00743ECB /* UIImage+Utility.h in Headers */, + F751C4D41A4C3EDB00743ECB /* XHBubblePhotoImageView.h in Headers */, + F751C3E91A4C3EDB00743ECB /* NSString+XHMD5.h in Headers */, + F751C4941A4C3EDB00743ECB /* SESelectionGrabber.h in Headers */, + F751C3FD1A4C3EDB00743ECB /* UIView+XHRemoteImage.h in Headers */, + F751C45D1A4C3EDB00743ECB /* XHFoundationMacro.h in Headers */, + F751C7B01A4C407800743ECB /* MessageDisplayKit-Prefix.pch in Headers */, + F751C48C1A4C3EDB00743ECB /* SECompatibility.h in Headers */, + F751C42D1A4C3EDB00743ECB /* XHDisplayEmotionViewController.h in Headers */, + F751C49A1A4C3EDB00743ECB /* SETextGeometry.h in Headers */, + F751C4051A4C3EDB00743ECB /* XHLocationHelper.h in Headers */, + F751C44B1A4C3EDB00743ECB /* XHCacheManager.h in Headers */, + F751C4531A4C3EDB00743ECB /* XHMessageAvatarFactory.h in Headers */, + F751C4351A4C3EDB00743ECB /* XHMessageTableViewController.h in Headers */, + F751C45E1A4C3EDB00743ECB /* XHMacro.h in Headers */, + F751C4E61A4C3EDB00743ECB /* XHEmotionManagerView.h in Headers */, + F751C4E21A4C3EDB00743ECB /* XHEmotionCollectionViewCell.h in Headers */, + F751C4551A4C3EDB00743ECB /* XHMessageBubbleFactory.h in Headers */, + F751C49E1A4C3EDB00743ECB /* SETextLayout.h in Headers */, + F751C4591A4C3EDB00743ECB /* XHMessageVoiceFactory.h in Headers */, + F751C4331A4C3EDB00743ECB /* XHDisplayTextViewController.h in Headers */, + F751C3EF1A4C3EDB00743ECB /* UIImage+Resize.h in Headers */, + F751C4011A4C3EDB00743ECB /* XHCaptureHelper.h in Headers */, + F751C4C01A4C3EDB00743ECB /* XHBaseTableViewCell.h in Headers */, + F751C44F1A4C3EDB00743ECB /* XHHTTPClient.h in Headers */, + F751C4DE1A4C3EDB00743ECB /* XHMessageTextView.h in Headers */, + F751C46D1A4C3EDB00743ECB /* XHShareMenuItem.h in Headers */, + F751C48E1A4C3EDB00743ECB /* SEConstants.h in Headers */, + F751C4681A4C3EDB00743ECB /* XHEmotionManager.h in Headers */, + F751C4A01A4C3EDB00743ECB /* SETextMagnifierCaret.h in Headers */, + F751C4DA1A4C3EDB00743ECB /* XHMessageTableViewCell.h in Headers */, + F751C45B1A4C3EDB00743ECB /* XHVideoOutputSampleBufferFactory.h in Headers */, + F751C3ED1A4C3EDB00743ECB /* UIImage+Alpha.h in Headers */, + F751C3F91A4C3EDB00743ECB /* UIScrollView+XHkeyboardControl.h in Headers */, + F751C4DC1A4C3EDB00743ECB /* XHMessageInputView.h in Headers */, + F751C4511A4C3EDB00743ECB /* XHOperationNetworkKit.h in Headers */, + F751C4571A4C3EDB00743ECB /* XHMessageVideoConverPhotoFactory.h in Headers */, + F751C4981A4C3EDB00743ECB /* SETextEditingCaret.h in Headers */, + F751C3FF1A4C3EDB00743ECB /* XHAudioPlayerHelper.h in Headers */, + F751C4901A4C3EDB00743ECB /* SELineLayout.h in Headers */, + F751C45F1A4C3EDB00743ECB /* XHUIKitMacro.h in Headers */, + F751C4E01A4C3EDB00743ECB /* XHVoiceRecordHUD.h in Headers */, + E466FA4E1B42EC0F00EE02A6 /* XHConfigurationHelper.h in Headers */, + F7D253471A4D32B30015764B /* LKBadgeView.h in Headers */, + F751C4921A4C3EDB00743ECB /* SELinkText.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXHeadersBuildPhase section */ + +/* Begin PBXNativeTarget section */ + F751C1E41A4C3E1B00743ECB /* MessageDisplayKit */ = { + isa = PBXNativeTarget; + buildConfigurationList = F751C1FB1A4C3E1B00743ECB /* Build configuration list for PBXNativeTarget "MessageDisplayKit" */; + buildPhases = ( + F751C1E01A4C3E1B00743ECB /* Sources */, + F751C1E11A4C3E1B00743ECB /* Frameworks */, + F751C1E21A4C3E1B00743ECB /* Headers */, + F751C1E31A4C3E1B00743ECB /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MessageDisplayKit; + productName = MessageDisplayKit; + productReference = F751C1E51A4C3E1B00743ECB /* MessageDisplayKit.framework */; + productType = "com.apple.product-type.framework"; + }; + F751C1EF1A4C3E1B00743ECB /* MessageDisplayKitTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = F751C1FE1A4C3E1B00743ECB /* Build configuration list for PBXNativeTarget "MessageDisplayKitTests" */; + buildPhases = ( + F751C1EC1A4C3E1B00743ECB /* Sources */, + F751C1ED1A4C3E1B00743ECB /* Frameworks */, + F751C1EE1A4C3E1B00743ECB /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + F751C1F31A4C3E1B00743ECB /* PBXTargetDependency */, + ); + name = MessageDisplayKitTests; + productName = MessageDisplayKitTests; + productReference = F751C1F01A4C3E1B00743ECB /* MessageDisplayKitTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + F751C1DC1A4C3E1B00743ECB /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0610; + ORGANIZATIONNAME = "iOS软件开发工程师 曾宪华 热衷于简洁的UI QQ:543413507 http://www.pailixiu.com/blog http://www.pailixiu.com/Jack/personal."; + TargetAttributes = { + F751C1E41A4C3E1B00743ECB = { + CreatedOnToolsVersion = 6.1.1; + }; + F751C1EF1A4C3E1B00743ECB = { + CreatedOnToolsVersion = 6.1.1; + }; + }; + }; + buildConfigurationList = F751C1DF1A4C3E1B00743ECB /* Build configuration list for PBXProject "MessageDisplayKit" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + "zh-Hans", + ); + mainGroup = F751C1DB1A4C3E1B00743ECB; + productRefGroup = F751C1E61A4C3E1B00743ECB /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + F751C1E41A4C3E1B00743ECB /* MessageDisplayKit */, + F751C1EF1A4C3E1B00743ECB /* MessageDisplayKitTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + F751C1E31A4C3E1B00743ECB /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F7B9E9081A4D602C0072F81B /* RecordingBkg@2x.png in Resources */, + F7B9E8FB1A4D602C0072F81B /* msg_chat_voice_unread.png in Resources */, + F7B9E9041A4D602C0072F81B /* ReceiverVoiceNodePlaying002@2x.png in Resources */, + F7B9E9011A4D602C0072F81B /* placeholderImage@2x.png in Resources */, + F7B9E8FE1A4D602C0072F81B /* multiMedia_HL@2x.png in Resources */, + F7B9E9021A4D602C0072F81B /* ReceiverVoiceNodePlaying000@2x.png in Resources */, + F7B9E9331A4D602C0072F81B /* voice_HL@2x.png in Resources */, + F7B9E9241A4D602C0072F81B /* SenderVoiceNodePlaying001@2x.png in Resources */, + F7B9E8F31A4D602C0072F81B /* input-bar-flat.png in Resources */, + F7B9E9341A4D602C0072F81B /* VoiceBtn_Black@2x.png in Resources */, + F7B9E8FC1A4D602C0072F81B /* msg_chat_voice_unread@2x.png in Resources */, + F7B9E9231A4D602C0072F81B /* SenderVoiceNodePlaying000@2x.png in Resources */, + F7B9E90B1A4D602C0072F81B /* RecordingSignal003@2x.png in Resources */, + F7B9E9271A4D602C0072F81B /* SenderVoiceNodePlaying@2x.png in Resources */, + F7B9E9251A4D602C0072F81B /* SenderVoiceNodePlaying002@2x.png in Resources */, + F7B9E9091A4D602C0072F81B /* RecordingSignal001@2x.png in Resources */, + F7B9E9391A4D602C0072F81B /* weChatBubble_Sending_Solid@2x.png in Resources */, + F7B9E8F41A4D602C0072F81B /* input-bar-flat@2x.png in Resources */, + F7B9E9371A4D602C0072F81B /* weChatBubble_Receiving_Solid@2x.png in Resources */, + 7053E7161B42EE6C00DE808D /* keyboard@2x.png in Resources */, + F7B9E8EE1A4D602C0072F81B /* face@2x.png in Resources */, + F7B9E8E21A4D602C0072F81B /* avator@2x.png in Resources */, + F7B9E8F01A4D602C0072F81B /* Fav_Cell_Loc@2x.png in Resources */, + F7B9E9051A4D602C0072F81B /* ReceiverVoiceNodePlaying003@2x.png in Resources */, + F7B9E8FD1A4D602C0072F81B /* multiMedia@2x.png in Resources */, + F7B9E9031A4D602C0072F81B /* ReceiverVoiceNodePlaying001@2x.png in Resources */, + F7B9E90A1A4D602C0072F81B /* RecordingSignal002@2x.png in Resources */, + F7B9E8F91A4D602C0072F81B /* MessageVideoPlay@2x.png in Resources */, + F7B9E9261A4D602C0072F81B /* SenderVoiceNodePlaying003@2x.png in Resources */, + F7B9E9071A4D602C0072F81B /* RecordCancel@2x.png in Resources */, + F7B9E9321A4D602C0072F81B /* voice@2x.png in Resources */, + F7B9E90D1A4D602C0072F81B /* RecordingSignal005@2x.png in Resources */, + F7B9E9061A4D602C0072F81B /* ReceiverVoiceNodePlaying@2x.png in Resources */, + 7053E7151B42EE6C00DE808D /* keyboard_HL@2x.png in Resources */, + F7B9E9101A4D602C0072F81B /* RecordingSignal008@2x.png in Resources */, + F7B9E90C1A4D602C0072F81B /* RecordingSignal004@2x.png in Resources */, + F7B9E9351A4D602C0072F81B /* VoiceBtn_BlackHL@2x.png in Resources */, + F7B9E9121A4D602C0072F81B /* SECoreTextView.bundle in Resources */, + F7B9E90F1A4D602C0072F81B /* RecordingSignal007@2x.png in Resources */, + F7B9E8ED1A4D602C0072F81B /* MessageDisplayKitString.strings in Resources */, + F7B9E8EF1A4D602C0072F81B /* face_HL@2x.png in Resources */, + F7B9E90E1A4D602C0072F81B /* RecordingSignal006@2x.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F751C1EE1A4C3E1B00743ECB /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + F751C1E01A4C3E1B00743ECB /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F751C49F1A4C3EDB00743ECB /* SETextLayout.m in Sources */, + F751C3FE1A4C3EDB00743ECB /* UIView+XHRemoteImage.m in Sources */, + F751C4A51A4C3EDB00743ECB /* SETextSelection.m in Sources */, + F751C4721A4C3EDB00743ECB /* FLAnimatedImage.m in Sources */, + F751C4631A4C3EDB00743ECB /* XHAnnotation.m in Sources */, + F751C4321A4C3EDB00743ECB /* XHDisplayMediaViewController.m in Sources */, + F751C4C11A4C3EDB00743ECB /* XHBaseTableViewCell.m in Sources */, + F751C4741A4C3EDB00743ECB /* FLAnimatedImageView.m in Sources */, + F751C4E91A4C3EDB00743ECB /* XHEmotionSectionBar.m in Sources */, + F751C48D1A4C3EDB00743ECB /* SECompatibility.m in Sources */, + F751C4991A4C3EDB00743ECB /* SETextEditingCaret.m in Sources */, + F751C3E61A4C3EDB00743ECB /* NSString+MessageInputView.m in Sources */, + F751C40C1A4C3EDB00743ECB /* XHVoiceCommonHelper.m in Sources */, + F751C4561A4C3EDB00743ECB /* XHMessageBubbleFactory.m in Sources */, + F751C3F21A4C3EDB00743ECB /* UIImage+RoundedCorner.m in Sources */, + F751C4E51A4C3EDB00743ECB /* XHEmotionCollectionViewFlowLayout.m in Sources */, + F751C40E1A4C3EDB00743ECB /* XHVoiceRecordHelper.m in Sources */, + F751C3F41A4C3EDB00743ECB /* UIImage+Utility.m in Sources */, + F751C4541A4C3EDB00743ECB /* XHMessageAvatarFactory.m in Sources */, + F751C45A1A4C3EDB00743ECB /* XHMessageVoiceFactory.m in Sources */, + F751C4DF1A4C3EDB00743ECB /* XHMessageTextView.m in Sources */, + F751C4971A4C3EDB00743ECB /* SETextAttachment.m in Sources */, + F751C4E31A4C3EDB00743ECB /* XHEmotionCollectionViewCell.m in Sources */, + F751C44C1A4C3EDB00743ECB /* XHCacheManager.m in Sources */, + F751C4501A4C3EDB00743ECB /* XHHTTPClient.m in Sources */, + F751C44E1A4C3EDB00743ECB /* XHFileAttribute.m in Sources */, + F751C4301A4C3EDB00743ECB /* XHDisplayLocationViewController.m in Sources */, + F751C3EE1A4C3EDB00743ECB /* UIImage+Alpha.m in Sources */, + F751C4081A4C3EDB00743ECB /* XHMessageBubbleHelper.m in Sources */, + F751C4D51A4C3EDB00743ECB /* XHBubblePhotoImageView.m in Sources */, + F751C4A11A4C3EDB00743ECB /* SETextMagnifierCaret.m in Sources */, + F751C40A1A4C3EDB00743ECB /* XHPhotographyHelper.m in Sources */, + F751C4DB1A4C3EDB00743ECB /* XHMessageTableViewCell.m in Sources */, + F751C4931A4C3EDB00743ECB /* SELinkText.m in Sources */, + F751C4361A4C3EDB00743ECB /* XHMessageTableViewController.m in Sources */, + F751C4691A4C3EDB00743ECB /* XHEmotionManager.m in Sources */, + F751C4671A4C3EDB00743ECB /* XHEmotion.m in Sources */, + F751C3EA1A4C3EDB00743ECB /* NSString+XHMD5.m in Sources */, + F751C4E71A4C3EDB00743ECB /* XHEmotionManagerView.m in Sources */, + F751C3FA1A4C3EDB00743ECB /* UIScrollView+XHkeyboardControl.m in Sources */, + F751C42E1A4C3EDB00743ECB /* XHDisplayEmotionViewController.m in Sources */, + F751C4D71A4C3EDB00743ECB /* XHMessageBubbleView.m in Sources */, + F751C4061A4C3EDB00743ECB /* XHLocationHelper.m in Sources */, + F751C46B1A4C3EDB00743ECB /* XHMessage.m in Sources */, + F751C4D91A4C3EDB00743ECB /* XHMessageTableView.m in Sources */, + F751C4DD1A4C3EDB00743ECB /* XHMessageInputView.m in Sources */, + F751C4581A4C3EDB00743ECB /* XHMessageVideoConverPhotoFactory.m in Sources */, + F751C4E11A4C3EDB00743ECB /* XHVoiceRecordHUD.m in Sources */, + F751C4021A4C3EDB00743ECB /* XHCaptureHelper.m in Sources */, + F751C4951A4C3EDB00743ECB /* SESelectionGrabber.m in Sources */, + F7D253481A4D32B30015764B /* LKBadgeView.m in Sources */, + F751C4001A4C3EDB00743ECB /* XHAudioPlayerHelper.m in Sources */, + F751C3F01A4C3EDB00743ECB /* UIImage+Resize.m in Sources */, + F751C46E1A4C3EDB00743ECB /* XHShareMenuItem.m in Sources */, + F751C4521A4C3EDB00743ECB /* XHOperationNetworkKit.m in Sources */, + F751C4A91A4C3EDB00743ECB /* SETextView.m in Sources */, + F751C4A71A4C3EDB00743ECB /* SETextSelectionView.m in Sources */, + F751C4A31A4C3EDB00743ECB /* SETextMagnifierRanged.m in Sources */, + F751C4EB1A4C3EDB00743ECB /* XHShareMenuView.m in Sources */, + F751C49B1A4C3EDB00743ECB /* SETextGeometry.m in Sources */, + F751C45C1A4C3EDB00743ECB /* XHVideoOutputSampleBufferFactory.m in Sources */, + F751C49D1A4C3EDB00743ECB /* SETextInput.m in Sources */, + F751C4341A4C3EDB00743ECB /* XHDisplayTextViewController.m in Sources */, + F751C3F81A4C3EDB00743ECB /* UIImage+XHRounded.m in Sources */, + E466FA4F1B42EC0F00EE02A6 /* XHConfigurationHelper.m in Sources */, + F751C48F1A4C3EDB00743ECB /* SEConstants.m in Sources */, + F751C4911A4C3EDB00743ECB /* SELineLayout.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F751C1EC1A4C3E1B00743ECB /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F751C1F81A4C3E1B00743ECB /* MessageDisplayKitTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + F751C1F31A4C3E1B00743ECB /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = F751C1E41A4C3E1B00743ECB /* MessageDisplayKit */; + targetProxy = F751C1F21A4C3E1B00743ECB /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + F7B9E8911A4D602C0072F81B /* MessageDisplayKitString.strings */ = { + isa = PBXVariantGroup; + children = ( + F7B9E8921A4D602C0072F81B /* en */, + F7B9E8DF1A4D602C0072F81B /* zh-Hans */, + ); + name = MessageDisplayKitString.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + F751C1F91A4C3E1B00743ECB /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Debug; + }; + F751C1FA1A4C3E1B00743ECB /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = YES; + CURRENT_PROJECT_VERSION = 1; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + VERSIONING_SYSTEM = "apple-generic"; + VERSION_INFO_PREFIX = ""; + }; + name = Release; + }; + F751C1FC1A4C3E1B00743ECB /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "$(SRCROOT)/MessageDisplayKit/MessageDisplayKit-Prefix.pch"; + INFOPLIST_FILE = MessageDisplayKit/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + F751C1FD1A4C3E1B00743ECB /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + DEFINES_MODULE = YES; + DYLIB_COMPATIBILITY_VERSION = 1; + DYLIB_CURRENT_VERSION = 1; + DYLIB_INSTALL_NAME_BASE = "@rpath"; + GCC_PREFIX_HEADER = "$(SRCROOT)/MessageDisplayKit/MessageDisplayKit-Prefix.pch"; + INFOPLIST_FILE = MessageDisplayKit/Info.plist; + INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Release; + }; + F751C1FF1A4C3E1B00743ECB /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = MessageDisplayKitTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + F751C2001A4C3E1B00743ECB /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + INFOPLIST_FILE = MessageDisplayKitTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + F751C1DF1A4C3E1B00743ECB /* Build configuration list for PBXProject "MessageDisplayKit" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F751C1F91A4C3E1B00743ECB /* Debug */, + F751C1FA1A4C3E1B00743ECB /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F751C1FB1A4C3E1B00743ECB /* Build configuration list for PBXNativeTarget "MessageDisplayKit" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F751C1FC1A4C3E1B00743ECB /* Debug */, + F751C1FD1A4C3E1B00743ECB /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F751C1FE1A4C3E1B00743ECB /* Build configuration list for PBXNativeTarget "MessageDisplayKitTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F751C1FF1A4C3E1B00743ECB /* Debug */, + F751C2001A4C3E1B00743ECB /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = F751C1DC1A4C3E1B00743ECB /* Project object */; +} diff --git a/Example/MessageDisplayKit/MessageDisplayKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Example/MessageDisplayKit/MessageDisplayKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..94b2795 --- /dev/null +++ b/Example/MessageDisplayKit/MessageDisplayKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,4 @@ + + + diff --git a/Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/xcuserdata/qtone-1.xcuserdatad/xcschemes/MessageDisplayExample.xcscheme b/Example/MessageDisplayKit/MessageDisplayKit.xcodeproj/xcshareddata/xcschemes/MessageDisplayKit.xcscheme similarity index 56% rename from Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/xcuserdata/qtone-1.xcuserdatad/xcschemes/MessageDisplayExample.xcscheme rename to Example/MessageDisplayKit/MessageDisplayKit.xcodeproj/xcshareddata/xcschemes/MessageDisplayKit.xcscheme index 4ceae8f..44cbf0a 100644 --- a/Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/xcuserdata/qtone-1.xcuserdatad/xcschemes/MessageDisplayExample.xcscheme +++ b/Example/MessageDisplayKit/MessageDisplayKit.xcodeproj/xcshareddata/xcschemes/MessageDisplayKit.xcscheme @@ -1,6 +1,6 @@ + BlueprintIdentifier = "F751C1E41A4C3E1B00743ECB" + BuildableName = "MessageDisplayKit.framework" + BlueprintName = "MessageDisplayKit" + ReferencedContainer = "container:MessageDisplayKit.xcodeproj"> + + + + @@ -32,30 +46,20 @@ skipped = "NO"> - - - - + BlueprintIdentifier = "F751C1EF1A4C3E1B00743ECB" + BuildableName = "MessageDisplayKitTests.xctest" + BlueprintName = "MessageDisplayKitTests" + ReferencedContainer = "container:MessageDisplayKit.xcodeproj"> + BlueprintIdentifier = "F751C1E41A4C3E1B00743ECB" + BuildableName = "MessageDisplayKit.framework" + BlueprintName = "MessageDisplayKit" + ReferencedContainer = "container:MessageDisplayKit.xcodeproj"> @@ -68,15 +72,15 @@ ignoresPersistentStateOnLaunch = "NO" debugDocumentVersioning = "YES" allowLocationSimulation = "YES"> - + + BlueprintIdentifier = "F751C1E41A4C3E1B00743ECB" + BuildableName = "MessageDisplayKit.framework" + BlueprintName = "MessageDisplayKit" + ReferencedContainer = "container:MessageDisplayKit.xcodeproj"> - + @@ -86,15 +90,15 @@ useCustomWorkingDirectory = "NO" buildConfiguration = "Release" debugDocumentVersioning = "YES"> - + + BlueprintIdentifier = "F751C1E41A4C3E1B00743ECB" + BuildableName = "MessageDisplayKit.framework" + BlueprintName = "MessageDisplayKit" + ReferencedContainer = "container:MessageDisplayKit.xcodeproj"> - + diff --git a/Example/MessageDisplayExample/MessageDisplayFramework/MessageDisplayFramework-Info.plist b/Example/MessageDisplayKit/MessageDisplayKit/Info.plist similarity index 73% rename from Example/MessageDisplayExample/MessageDisplayFramework/MessageDisplayFramework-Info.plist rename to Example/MessageDisplayKit/MessageDisplayKit/Info.plist index 9e9e66e..7fb5079 100644 --- a/Example/MessageDisplayExample/MessageDisplayFramework/MessageDisplayFramework-Info.plist +++ b/Example/MessageDisplayKit/MessageDisplayKit/Info.plist @@ -3,17 +3,15 @@ CFBundleDevelopmentRegion - English + en CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIconFile - + $(EXECUTABLE_NAME) CFBundleIdentifier - com.HUAJIE.${PRODUCT_NAME:rfc1034identifier} + com.HUAJIE.$(PRODUCT_NAME:rfc1034identifier) CFBundleInfoDictionaryVersion 6.0 CFBundleName - ${PRODUCT_NAME} + $(PRODUCT_NAME) CFBundlePackageType FMWK CFBundleShortVersionString @@ -21,7 +19,7 @@ CFBundleSignature ???? CFBundleVersion - 1 + $(CURRENT_PROJECT_VERSION) NSPrincipalClass diff --git a/Example/MessageDisplayKit/MessageDisplayKit/MessageDisplayKit-Prefix.pch b/Example/MessageDisplayKit/MessageDisplayKit/MessageDisplayKit-Prefix.pch new file mode 100644 index 0000000..a2b62d0 --- /dev/null +++ b/Example/MessageDisplayKit/MessageDisplayKit/MessageDisplayKit-Prefix.pch @@ -0,0 +1,19 @@ +// +// MessageDisplayKit-Prefix.pch +// MessageDisplayKit +// +// Created by HUAJIE on 14/12/25. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import + +#ifndef __IPHONE_6_0 +#warning "This project uses features only available in iOS SDK 6.0 and later." +#endif + +#ifdef __OBJC__ + #import + #import + +#endif diff --git a/Example/MessageDisplayExample/MessageDisplayFrameworkTests/MessageDisplayFrameworkTests-Info.plist b/Example/MessageDisplayKit/MessageDisplayKitTests/Info.plist similarity index 78% rename from Example/MessageDisplayExample/MessageDisplayFrameworkTests/MessageDisplayFrameworkTests-Info.plist rename to Example/MessageDisplayKit/MessageDisplayKitTests/Info.plist index 7873a4f..19e90a2 100644 --- a/Example/MessageDisplayExample/MessageDisplayFrameworkTests/MessageDisplayFrameworkTests-Info.plist +++ b/Example/MessageDisplayKit/MessageDisplayKitTests/Info.plist @@ -5,11 +5,13 @@ CFBundleDevelopmentRegion en CFBundleExecutable - ${EXECUTABLE_NAME} + $(EXECUTABLE_NAME) CFBundleIdentifier - com.HUAJIE.${PRODUCT_NAME:rfc1034identifier} + com.HUAJIE.$(PRODUCT_NAME:rfc1034identifier) CFBundleInfoDictionaryVersion 6.0 + CFBundleName + $(PRODUCT_NAME) CFBundlePackageType BNDL CFBundleShortVersionString diff --git a/Example/MessageDisplayKit/MessageDisplayKitTests/MessageDisplayKitTests.m b/Example/MessageDisplayKit/MessageDisplayKitTests/MessageDisplayKitTests.m new file mode 100644 index 0000000..703de1f --- /dev/null +++ b/Example/MessageDisplayKit/MessageDisplayKitTests/MessageDisplayKitTests.m @@ -0,0 +1,40 @@ +// +// MessageDisplayKitTests.m +// MessageDisplayKitTests +// +// Created by HUAJIE on 14/12/25. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import +#import + +@interface MessageDisplayKitTests : XCTestCase + +@end + +@implementation MessageDisplayKitTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testExample { + // This is an example of a functional test case. + XCTAssert(YES, @"Pass"); +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample.xcodeproj/project.pbxproj b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample.xcodeproj/project.pbxproj index 08d67f2..a47efd6 100644 --- a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample.xcodeproj/project.pbxproj +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 7053E7191B42F03500DE808D /* keyboard_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7053E7171B42F03500DE808D /* keyboard_HL@2x.png */; }; + 7053E71A1B42F03500DE808D /* keyboard@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7053E7181B42F03500DE808D /* keyboard@2x.png */; }; AB5C7E441937FE7000FA7D5B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB5C7E431937FE7000FA7D5B /* Foundation.framework */; }; AB5C7E461937FE7000FA7D5B /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB5C7E451937FE7000FA7D5B /* CoreGraphics.framework */; }; AB5C7E481937FE7000FA7D5B /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB5C7E471937FE7000FA7D5B /* UIKit.framework */; }; @@ -23,226 +25,96 @@ AB5C7E6E1937FE7000FA7D5B /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB5C7E491937FE7000FA7D5B /* CoreData.framework */; }; AB5C7E761937FE7000FA7D5B /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E741937FE7000FA7D5B /* InfoPlist.strings */; }; AB5C7E781937FE7000FA7D5B /* MessageDisplayKitCoreDataExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = AB5C7E771937FE7000FA7D5B /* MessageDisplayKitCoreDataExampleTests.m */; }; - AB5C7E831937FF9300FA7D5B /* MessageDisplayFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB5C7E821937FF9300FA7D5B /* MessageDisplayFramework.framework */; }; - AB5C7ECC1937FF9B00FA7D5B /* MessageDisplayKitString.strings in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E851937FF9B00FA7D5B /* MessageDisplayKitString.strings */; }; - AB5C7ECD1937FF9B00FA7D5B /* face@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E871937FF9B00FA7D5B /* face@2x.png */; }; - AB5C7ECE1937FF9B00FA7D5B /* face_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E881937FF9B00FA7D5B /* face_HL@2x.png */; }; - AB5C7ECF1937FF9B00FA7D5B /* Fav_Cell_Loc@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E891937FF9B00FA7D5B /* Fav_Cell_Loc@2x.png */; }; - AB5C7ED01937FF9B00FA7D5B /* input-bar-background.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E8A1937FF9B00FA7D5B /* input-bar-background.png */; }; - AB5C7ED11937FF9B00FA7D5B /* input-bar-background@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E8B1937FF9B00FA7D5B /* input-bar-background@2x.png */; }; - AB5C7ED21937FF9B00FA7D5B /* input-bar-flat.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E8C1937FF9B00FA7D5B /* input-bar-flat.png */; }; - AB5C7ED31937FF9B00FA7D5B /* input-bar-flat@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E8D1937FF9B00FA7D5B /* input-bar-flat@2x.png */; }; - AB5C7ED41937FF9B00FA7D5B /* input-field-cover.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E8E1937FF9B00FA7D5B /* input-field-cover.png */; }; - AB5C7ED51937FF9B00FA7D5B /* input-field-cover@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E8F1937FF9B00FA7D5B /* input-field-cover@2x.png */; }; - AB5C7ED61937FF9B00FA7D5B /* keyborad@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E901937FF9B00FA7D5B /* keyborad@2x.png */; }; - AB5C7ED71937FF9B00FA7D5B /* keyborad_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E911937FF9B00FA7D5B /* keyborad_HL@2x.png */; }; - AB5C7ED81937FF9B00FA7D5B /* MessageVideoPlay@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E921937FF9B00FA7D5B /* MessageVideoPlay@2x.png */; }; - AB5C7ED91937FF9B00FA7D5B /* multiMedia@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E931937FF9B00FA7D5B /* multiMedia@2x.png */; }; - AB5C7EDA1937FF9B00FA7D5B /* multiMedia_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E941937FF9B00FA7D5B /* multiMedia_HL@2x.png */; }; - AB5C7EDB1937FF9B00FA7D5B /* ReceiverVoiceNodePlaying000@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E951937FF9B00FA7D5B /* ReceiverVoiceNodePlaying000@2x.png */; }; - AB5C7EDC1937FF9B00FA7D5B /* ReceiverVoiceNodePlaying001@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E961937FF9B00FA7D5B /* ReceiverVoiceNodePlaying001@2x.png */; }; - AB5C7EDD1937FF9B00FA7D5B /* ReceiverVoiceNodePlaying002@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E971937FF9B00FA7D5B /* ReceiverVoiceNodePlaying002@2x.png */; }; - AB5C7EDE1937FF9B00FA7D5B /* ReceiverVoiceNodePlaying003@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E981937FF9B00FA7D5B /* ReceiverVoiceNodePlaying003@2x.png */; }; - AB5C7EDF1937FF9B00FA7D5B /* ReceiverVoiceNodePlaying@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E991937FF9B00FA7D5B /* ReceiverVoiceNodePlaying@2x.png */; }; - AB5C7EE01937FF9B00FA7D5B /* RecordCancel@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E9A1937FF9B00FA7D5B /* RecordCancel@2x.png */; }; - AB5C7EE11937FF9B00FA7D5B /* RecordingBkg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E9B1937FF9B00FA7D5B /* RecordingBkg@2x.png */; }; - AB5C7EE21937FF9B00FA7D5B /* RecordingSignal001@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E9C1937FF9B00FA7D5B /* RecordingSignal001@2x.png */; }; - AB5C7EE31937FF9B00FA7D5B /* RecordingSignal002@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E9D1937FF9B00FA7D5B /* RecordingSignal002@2x.png */; }; - AB5C7EE41937FF9B00FA7D5B /* RecordingSignal003@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E9E1937FF9B00FA7D5B /* RecordingSignal003@2x.png */; }; - AB5C7EE51937FF9B00FA7D5B /* RecordingSignal004@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7E9F1937FF9B00FA7D5B /* RecordingSignal004@2x.png */; }; - AB5C7EE61937FF9B00FA7D5B /* RecordingSignal005@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EA01937FF9B00FA7D5B /* RecordingSignal005@2x.png */; }; - AB5C7EE71937FF9B00FA7D5B /* RecordingSignal006@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EA11937FF9B00FA7D5B /* RecordingSignal006@2x.png */; }; - AB5C7EE81937FF9B00FA7D5B /* RecordingSignal007@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EA21937FF9B00FA7D5B /* RecordingSignal007@2x.png */; }; - AB5C7EE91937FF9B00FA7D5B /* RecordingSignal008@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EA31937FF9B00FA7D5B /* RecordingSignal008@2x.png */; }; - AB5C7EEA1937FF9B00FA7D5B /* section0_emotion0@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EA41937FF9B00FA7D5B /* section0_emotion0@2x.png */; }; - AB5C7EEB1937FF9B00FA7D5B /* section0_emotion10@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EA51937FF9B00FA7D5B /* section0_emotion10@2x.png */; }; - AB5C7EEC1937FF9B00FA7D5B /* section0_emotion11@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EA61937FF9B00FA7D5B /* section0_emotion11@2x.png */; }; - AB5C7EED1937FF9B00FA7D5B /* section0_emotion12@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EA71937FF9B00FA7D5B /* section0_emotion12@2x.png */; }; - AB5C7EEE1937FF9B00FA7D5B /* section0_emotion13@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EA81937FF9B00FA7D5B /* section0_emotion13@2x.png */; }; - AB5C7EEF1937FF9B00FA7D5B /* section0_emotion14@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EA91937FF9B00FA7D5B /* section0_emotion14@2x.png */; }; - AB5C7EF01937FF9B00FA7D5B /* section0_emotion15@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EAA1937FF9B00FA7D5B /* section0_emotion15@2x.png */; }; - AB5C7EF11937FF9B00FA7D5B /* section0_emotion1@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EAB1937FF9B00FA7D5B /* section0_emotion1@2x.png */; }; - AB5C7EF21937FF9B00FA7D5B /* section0_emotion2@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EAC1937FF9B00FA7D5B /* section0_emotion2@2x.png */; }; - AB5C7EF31937FF9B00FA7D5B /* section0_emotion3@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EAD1937FF9B00FA7D5B /* section0_emotion3@2x.png */; }; - AB5C7EF41937FF9B00FA7D5B /* section0_emotion4@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EAE1937FF9B00FA7D5B /* section0_emotion4@2x.png */; }; - AB5C7EF51937FF9B00FA7D5B /* section0_emotion5@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EAF1937FF9B00FA7D5B /* section0_emotion5@2x.png */; }; - AB5C7EF61937FF9B00FA7D5B /* section0_emotion6@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EB01937FF9B00FA7D5B /* section0_emotion6@2x.png */; }; - AB5C7EF71937FF9B00FA7D5B /* section0_emotion7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EB11937FF9B00FA7D5B /* section0_emotion7@2x.png */; }; - AB5C7EF81937FF9B00FA7D5B /* section0_emotion8@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EB21937FF9B00FA7D5B /* section0_emotion8@2x.png */; }; - AB5C7EF91937FF9B00FA7D5B /* section0_emotion9@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EB31937FF9B00FA7D5B /* section0_emotion9@2x.png */; }; - AB5C7EFA1937FF9B00FA7D5B /* SenderVoiceNodePlaying000@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EB41937FF9B00FA7D5B /* SenderVoiceNodePlaying000@2x.png */; }; - AB5C7EFB1937FF9B00FA7D5B /* SenderVoiceNodePlaying001@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EB51937FF9B00FA7D5B /* SenderVoiceNodePlaying001@2x.png */; }; - AB5C7EFC1937FF9B00FA7D5B /* SenderVoiceNodePlaying002@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EB61937FF9B00FA7D5B /* SenderVoiceNodePlaying002@2x.png */; }; - AB5C7EFD1937FF9B00FA7D5B /* SenderVoiceNodePlaying003@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EB71937FF9B00FA7D5B /* SenderVoiceNodePlaying003@2x.png */; }; - AB5C7EFE1937FF9B00FA7D5B /* SenderVoiceNodePlaying@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EB81937FF9B00FA7D5B /* SenderVoiceNodePlaying@2x.png */; }; - AB5C7EFF1937FF9B00FA7D5B /* sharemore_friendcard@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EB91937FF9B00FA7D5B /* sharemore_friendcard@2x.png */; }; - AB5C7F001937FF9B00FA7D5B /* sharemore_location@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EBA1937FF9B00FA7D5B /* sharemore_location@2x.png */; }; - AB5C7F011937FF9B00FA7D5B /* sharemore_myfav@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EBB1937FF9B00FA7D5B /* sharemore_myfav@2x.png */; }; - AB5C7F021937FF9B00FA7D5B /* sharemore_openapi@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EBC1937FF9B00FA7D5B /* sharemore_openapi@2x.png */; }; - AB5C7F031937FF9B00FA7D5B /* sharemore_pic@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EBD1937FF9B00FA7D5B /* sharemore_pic@2x.png */; }; - AB5C7F041937FF9B00FA7D5B /* sharemore_video@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EBE1937FF9B00FA7D5B /* sharemore_video@2x.png */; }; - AB5C7F051937FF9B00FA7D5B /* sharemore_videovoip@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EBF1937FF9B00FA7D5B /* sharemore_videovoip@2x.png */; }; - AB5C7F061937FF9B00FA7D5B /* sharemore_voiceinput@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EC01937FF9B00FA7D5B /* sharemore_voiceinput@2x.png */; }; - AB5C7F071937FF9B00FA7D5B /* sharemore_voipvoice@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EC11937FF9B00FA7D5B /* sharemore_voipvoice@2x.png */; }; - AB5C7F081937FF9B00FA7D5B /* sharemore_wxtalk@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EC21937FF9B00FA7D5B /* sharemore_wxtalk@2x.png */; }; - AB5C7F091937FF9B00FA7D5B /* voice@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EC31937FF9B00FA7D5B /* voice@2x.png */; }; - AB5C7F0A1937FF9B00FA7D5B /* voice_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EC41937FF9B00FA7D5B /* voice_HL@2x.png */; }; - AB5C7F0B1937FF9B00FA7D5B /* VoiceBtn_Black@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EC51937FF9B00FA7D5B /* VoiceBtn_Black@2x.png */; }; - AB5C7F0C1937FF9B00FA7D5B /* VoiceBtn_BlackHL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EC61937FF9B00FA7D5B /* VoiceBtn_BlackHL@2x.png */; }; - AB5C7F0D1937FF9B00FA7D5B /* weChatBubble_Receiving_Cavern@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EC71937FF9B00FA7D5B /* weChatBubble_Receiving_Cavern@2x.png */; }; - AB5C7F0E1937FF9B00FA7D5B /* weChatBubble_Receiving_Solid@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EC81937FF9B00FA7D5B /* weChatBubble_Receiving_Solid@2x.png */; }; - AB5C7F0F1937FF9B00FA7D5B /* weChatBubble_Sending_Cavern@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7EC91937FF9B00FA7D5B /* weChatBubble_Sending_Cavern@2x.png */; }; - AB5C7F101937FF9B00FA7D5B /* weChatBubble_Sending_Solid@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7ECA1937FF9B00FA7D5B /* weChatBubble_Sending_Solid@2x.png */; }; AB5C7F131937FFCC00FA7D5B /* XHDemoWeChatMessageTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = AB5C7F121937FFCC00FA7D5B /* XHDemoWeChatMessageTableViewController.m */; }; - AB5C7FB61938017700FA7D5B /* avator@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F151938017700FA7D5B /* avator@2x.png */; }; - AB5C7FB71938017700FA7D5B /* Contact_Female@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F171938017700FA7D5B /* Contact_Female@2x.png */; }; - AB5C7FB81938017700FA7D5B /* Contact_Male@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F181938017700FA7D5B /* Contact_Male@2x.png */; }; - AB5C7FB91938017700FA7D5B /* VoiceSearchBtn@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F1A1938017700FA7D5B /* VoiceSearchBtn@2x.png */; }; - AB5C7FBA1938017700FA7D5B /* VoiceSearchBtn_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F1B1938017700FA7D5B /* VoiceSearchBtn_ios7@2x.png */; }; - AB5C7FBB1938017700FA7D5B /* VoiceSearchBtnHL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F1C1938017700FA7D5B /* VoiceSearchBtnHL@2x.png */; }; - AB5C7FBC1938017700FA7D5B /* VoiceSearchBtnHL_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F1D1938017700FA7D5B /* VoiceSearchBtnHL_ios7@2x.png */; }; - AB5C7FBD1938017700FA7D5B /* VoiceSearchFeedback003@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F1E1938017700FA7D5B /* VoiceSearchFeedback003@2x.png */; }; - AB5C7FBE1938017700FA7D5B /* VoiceSearchFeedback003_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F1F1938017700FA7D5B /* VoiceSearchFeedback003_ios7@2x.png */; }; - AB5C7FBF1938017700FA7D5B /* VoiceSearchFeedback004@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F201938017700FA7D5B /* VoiceSearchFeedback004@2x.png */; }; - AB5C7FC01938017700FA7D5B /* VoiceSearchFeedback004_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F211938017700FA7D5B /* VoiceSearchFeedback004_ios7@2x.png */; }; - AB5C7FC11938017700FA7D5B /* VoiceSearchFeedback005@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F221938017700FA7D5B /* VoiceSearchFeedback005@2x.png */; }; - AB5C7FC21938017700FA7D5B /* VoiceSearchFeedback005_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F231938017700FA7D5B /* VoiceSearchFeedback005_ios7@2x.png */; }; - AB5C7FC31938017700FA7D5B /* VoiceSearchFeedback006@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F241938017700FA7D5B /* VoiceSearchFeedback006@2x.png */; }; - AB5C7FC41938017700FA7D5B /* VoiceSearchFeedback006_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F251938017700FA7D5B /* VoiceSearchFeedback006_ios7@2x.png */; }; - AB5C7FC51938017700FA7D5B /* VoiceSearchFeedback007@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F261938017700FA7D5B /* VoiceSearchFeedback007@2x.png */; }; - AB5C7FC61938017700FA7D5B /* VoiceSearchFeedback007_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F271938017700FA7D5B /* VoiceSearchFeedback007_ios7@2x.png */; }; - AB5C7FC71938017700FA7D5B /* VoiceSearchFeedback008@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F281938017700FA7D5B /* VoiceSearchFeedback008@2x.png */; }; - AB5C7FC81938017700FA7D5B /* VoiceSearchFeedback008_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F291938017700FA7D5B /* VoiceSearchFeedback008_ios7@2x.png */; }; - AB5C7FC91938017700FA7D5B /* VoiceSearchFeedback009@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F2A1938017700FA7D5B /* VoiceSearchFeedback009@2x.png */; }; - AB5C7FCA1938017700FA7D5B /* VoiceSearchFeedback009_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F2B1938017700FA7D5B /* VoiceSearchFeedback009_ios7@2x.png */; }; - AB5C7FCB1938017700FA7D5B /* VoiceSearchFeedback010@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F2C1938017700FA7D5B /* VoiceSearchFeedback010@2x.png */; }; - AB5C7FCC1938017700FA7D5B /* VoiceSearchFeedback010_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F2D1938017700FA7D5B /* VoiceSearchFeedback010_ios7@2x.png */; }; - AB5C7FCD1938017700FA7D5B /* VoiceSearchFeedback011@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F2E1938017700FA7D5B /* VoiceSearchFeedback011@2x.png */; }; - AB5C7FCE1938017700FA7D5B /* VoiceSearchFeedback011_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F2F1938017700FA7D5B /* VoiceSearchFeedback011_ios7@2x.png */; }; - AB5C7FCF1938017700FA7D5B /* VoiceSearchFeedback012@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F301938017700FA7D5B /* VoiceSearchFeedback012@2x.png */; }; - AB5C7FD01938017700FA7D5B /* VoiceSearchFeedback012_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F311938017700FA7D5B /* VoiceSearchFeedback012_ios7@2x.png */; }; - AB5C7FD11938017700FA7D5B /* VoiceSearchFeedback013@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F321938017700FA7D5B /* VoiceSearchFeedback013@2x.png */; }; - AB5C7FD21938017700FA7D5B /* VoiceSearchFeedback013_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F331938017700FA7D5B /* VoiceSearchFeedback013_ios7@2x.png */; }; - AB5C7FD31938017700FA7D5B /* VoiceSearchFeedback014@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F341938017700FA7D5B /* VoiceSearchFeedback014@2x.png */; }; - AB5C7FD41938017700FA7D5B /* VoiceSearchFeedback014_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F351938017700FA7D5B /* VoiceSearchFeedback014_ios7@2x.png */; }; - AB5C7FD51938017700FA7D5B /* VoiceSearchFeedback015@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F361938017700FA7D5B /* VoiceSearchFeedback015@2x.png */; }; - AB5C7FD61938017700FA7D5B /* VoiceSearchFeedback015_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F371938017700FA7D5B /* VoiceSearchFeedback015_ios7@2x.png */; }; - AB5C7FD71938017700FA7D5B /* VoiceSearchFeedback016@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F381938017700FA7D5B /* VoiceSearchFeedback016@2x.png */; }; - AB5C7FD81938017700FA7D5B /* VoiceSearchFeedback016_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F391938017700FA7D5B /* VoiceSearchFeedback016_ios7@2x.png */; }; - AB5C7FD91938017700FA7D5B /* VoiceSearchFeedback017@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F3A1938017700FA7D5B /* VoiceSearchFeedback017@2x.png */; }; - AB5C7FDA1938017700FA7D5B /* VoiceSearchFeedback017_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F3B1938017700FA7D5B /* VoiceSearchFeedback017_ios7@2x.png */; }; - AB5C7FDB1938017700FA7D5B /* VoiceSearchFeedback018@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F3C1938017700FA7D5B /* VoiceSearchFeedback018@2x.png */; }; - AB5C7FDC1938017700FA7D5B /* VoiceSearchFeedback018_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F3D1938017700FA7D5B /* VoiceSearchFeedback018_ios7@2x.png */; }; - AB5C7FDD1938017700FA7D5B /* VoiceSearchFeedback019@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F3E1938017700FA7D5B /* VoiceSearchFeedback019@2x.png */; }; - AB5C7FDE1938017700FA7D5B /* VoiceSearchFeedback019_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F3F1938017700FA7D5B /* VoiceSearchFeedback019_ios7@2x.png */; }; - AB5C7FDF1938017700FA7D5B /* VoiceSearchFeedback020@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F401938017700FA7D5B /* VoiceSearchFeedback020@2x.png */; }; - AB5C7FE01938017700FA7D5B /* VoiceSearchFeedback020_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F411938017700FA7D5B /* VoiceSearchFeedback020_ios7@2x.png */; }; - AB5C7FE11938017700FA7D5B /* VoiceSearchIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F421938017700FA7D5B /* VoiceSearchIcon@2x.png */; }; - AB5C7FE21938017700FA7D5B /* VoiceSearchIcon_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F431938017700FA7D5B /* VoiceSearchIcon_ios7@2x.png */; }; - AB5C7FE31938017700FA7D5B /* VoiceSearchIconHL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F441938017700FA7D5B /* VoiceSearchIconHL@2x.png */; }; - AB5C7FE41938017700FA7D5B /* VoiceSearchIconHL_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F451938017700FA7D5B /* VoiceSearchIconHL_ios7@2x.png */; }; - AB5C7FE51938017700FA7D5B /* VoiceSearchLoading001@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F461938017700FA7D5B /* VoiceSearchLoading001@2x.png */; }; - AB5C7FE61938017700FA7D5B /* VoiceSearchLoading001_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F471938017700FA7D5B /* VoiceSearchLoading001_ios7@2x.png */; }; - AB5C7FE71938017700FA7D5B /* VoiceSearchLoading002@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F481938017700FA7D5B /* VoiceSearchLoading002@2x.png */; }; - AB5C7FE81938017700FA7D5B /* VoiceSearchLoading002_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F491938017700FA7D5B /* VoiceSearchLoading002_ios7@2x.png */; }; - AB5C7FE91938017700FA7D5B /* VoiceSearchLoading003@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F4A1938017700FA7D5B /* VoiceSearchLoading003@2x.png */; }; - AB5C7FEA1938017700FA7D5B /* VoiceSearchLoading003_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F4B1938017700FA7D5B /* VoiceSearchLoading003_ios7@2x.png */; }; - AB5C7FEB1938017700FA7D5B /* VoiceSearchLoading004@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F4C1938017700FA7D5B /* VoiceSearchLoading004@2x.png */; }; - AB5C7FEC1938017700FA7D5B /* VoiceSearchLoading004_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F4D1938017700FA7D5B /* VoiceSearchLoading004_ios7@2x.png */; }; - AB5C7FED1938017700FA7D5B /* VoiceSearchLoading005@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F4E1938017700FA7D5B /* VoiceSearchLoading005@2x.png */; }; - AB5C7FEE1938017700FA7D5B /* VoiceSearchLoading005_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F4F1938017700FA7D5B /* VoiceSearchLoading005_ios7@2x.png */; }; - AB5C7FEF1938017700FA7D5B /* VoiceSearchLoading006@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F501938017700FA7D5B /* VoiceSearchLoading006@2x.png */; }; - AB5C7FF01938017700FA7D5B /* VoiceSearchLoading006_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F511938017700FA7D5B /* VoiceSearchLoading006_ios7@2x.png */; }; - AB5C7FF11938017700FA7D5B /* VoiceSearchLoading007@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F521938017700FA7D5B /* VoiceSearchLoading007@2x.png */; }; - AB5C7FF21938017700FA7D5B /* VoiceSearchLoading007_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F531938017700FA7D5B /* VoiceSearchLoading007_ios7@2x.png */; }; - AB5C7FF31938017700FA7D5B /* VoiceSearchLoading008@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F541938017700FA7D5B /* VoiceSearchLoading008@2x.png */; }; - AB5C7FF41938017700FA7D5B /* VoiceSearchLoading008_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F551938017700FA7D5B /* VoiceSearchLoading008_ios7@2x.png */; }; - AB5C7FF51938017700FA7D5B /* VoiceSearchLoading009@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F561938017700FA7D5B /* VoiceSearchLoading009@2x.png */; }; - AB5C7FF61938017700FA7D5B /* VoiceSearchLoading009_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F571938017700FA7D5B /* VoiceSearchLoading009_ios7@2x.png */; }; - AB5C7FF71938017700FA7D5B /* VoiceSearchLoading010@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F581938017700FA7D5B /* VoiceSearchLoading010@2x.png */; }; - AB5C7FF81938017700FA7D5B /* VoiceSearchLoading010_ios7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F591938017700FA7D5B /* VoiceSearchLoading010_ios7@2x.png */; }; - AB5C7FF91938017700FA7D5B /* VoiceSearchOff.wav in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F5A1938017700FA7D5B /* VoiceSearchOff.wav */; }; - AB5C7FFA1938017700FA7D5B /* VoiceSearchOn.wav in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F5B1938017700FA7D5B /* VoiceSearchOn.wav */; }; - AB5C7FFB1938017700FA7D5B /* VoiceSearchStartBtn@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F5C1938017700FA7D5B /* VoiceSearchStartBtn@2x.png */; }; - AB5C7FFC1938017700FA7D5B /* VoiceSearchStartBtnHL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F5D1938017700FA7D5B /* VoiceSearchStartBtnHL@2x.png */; }; - AB5C7FFF1938017700FA7D5B /* album_add_photo@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F621938017700FA7D5B /* album_add_photo@2x.png */; }; - AB5C80001938017700FA7D5B /* AlbumFlagMark@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F631938017700FA7D5B /* AlbumFlagMark@2x.png */; }; - AB5C80011938017700FA7D5B /* AlbumHeaderBackgrounImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F641938017700FA7D5B /* AlbumHeaderBackgrounImage@2x.png */; }; - AB5C80021938017700FA7D5B /* AlbumOperateMore@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F651938017700FA7D5B /* AlbumOperateMore@2x.png */; }; - AB5C80031938017700FA7D5B /* AlbumOperateMoreHL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F661938017700FA7D5B /* AlbumOperateMoreHL@2x.png */; }; - AB5C80041938017700FA7D5B /* circle@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F671938017700FA7D5B /* circle@2x.png */; }; - AB5C80051938017700FA7D5B /* pullrefresh.aif in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F681938017700FA7D5B /* pullrefresh.aif */; }; - AB5C80061938017700FA7D5B /* barbuttonicon_more@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F691938017700FA7D5B /* barbuttonicon_more@2x.png */; }; - AB5C80071938017700FA7D5B /* barbuttonicon_set@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F6A1938017700FA7D5B /* barbuttonicon_set@2x.png */; }; - AB5C80081938017700FA7D5B /* bottleBkg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F6C1938017700FA7D5B /* bottleBkg@2x.png */; }; - AB5C80091938017700FA7D5B /* bottleBkgSpotLight@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F6D1938017700FA7D5B /* bottleBkgSpotLight@2x.png */; }; - AB5C800A1938017700FA7D5B /* bottleBoard@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F6E1938017700FA7D5B /* bottleBoard@2x.png */; }; - AB5C800B1938017700FA7D5B /* bottleButtonFish@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F6F1938017700FA7D5B /* bottleButtonFish@2x.png */; }; - AB5C800C1938017700FA7D5B /* bottleButtonMine@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F701938017700FA7D5B /* bottleButtonMine@2x.png */; }; - AB5C800D1938017700FA7D5B /* bottleButtonThrow@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F711938017700FA7D5B /* bottleButtonThrow@2x.png */; }; - AB5C800E1938017700FA7D5B /* bottleNightBkg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F721938017700FA7D5B /* bottleNightBkg@2x.png */; }; - AB5C800F1938017700FA7D5B /* bottleRecord@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F731938017700FA7D5B /* bottleRecord@2x.png */; }; - AB5C80101938017700FA7D5B /* bottleStarfish@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F741938017700FA7D5B /* bottleStarfish@2x.png */; }; - AB5C80111938017700FA7D5B /* bottleWriting@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F751938017700FA7D5B /* bottleWriting@2x.png */; }; - AB5C80121938017700FA7D5B /* fishwater2@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F761938017700FA7D5B /* fishwater2@2x.png */; }; - AB5C80131938017700FA7D5B /* fishwater3@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F771938017700FA7D5B /* fishwater3@2x.png */; }; - AB5C80141938017700FA7D5B /* fishwater@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F781938017700FA7D5B /* fishwater@2x.png */; }; - AB5C80151938017700FA7D5B /* ff_IconBottle@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F791938017700FA7D5B /* ff_IconBottle@2x.png */; }; - AB5C80161938017700FA7D5B /* ff_IconLocationService@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F7A1938017700FA7D5B /* ff_IconLocationService@2x.png */; }; - AB5C80171938017700FA7D5B /* ff_IconQRCode@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F7B1938017700FA7D5B /* ff_IconQRCode@2x.png */; }; - AB5C80181938017700FA7D5B /* ff_IconShake@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F7C1938017700FA7D5B /* ff_IconShake@2x.png */; }; - AB5C80191938017700FA7D5B /* ff_IconShowAlbum@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F7D1938017700FA7D5B /* ff_IconShowAlbum@2x.png */; }; - AB5C801A1938017700FA7D5B /* MoreGame@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F7E1938017700FA7D5B /* MoreGame@2x.png */; }; - AB5C801B1938017700FA7D5B /* ScanBook@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F801938017700FA7D5B /* ScanBook@2x.png */; }; - AB5C801C1938017700FA7D5B /* ScanBook_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F811938017700FA7D5B /* ScanBook_HL@2x.png */; }; - AB5C801D1938017700FA7D5B /* ScanQR1@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F821938017700FA7D5B /* ScanQR1@2x.png */; }; - AB5C801E1938017700FA7D5B /* ScanQR2@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F831938017700FA7D5B /* ScanQR2@2x.png */; }; - AB5C801F1938017700FA7D5B /* ScanQR3@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F841938017700FA7D5B /* ScanQR3@2x.png */; }; - AB5C80201938017700FA7D5B /* ScanQR4@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F851938017700FA7D5B /* ScanQR4@2x.png */; }; - AB5C80211938017700FA7D5B /* ScanQRCode@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F861938017700FA7D5B /* ScanQRCode@2x.png */; }; - AB5C80221938017700FA7D5B /* ScanQRCode_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F871938017700FA7D5B /* ScanQRCode_HL@2x.png */; }; - AB5C80231938017700FA7D5B /* ScanStreet@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F881938017700FA7D5B /* ScanStreet@2x.png */; }; - AB5C80241938017700FA7D5B /* ScanStreet_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F891938017700FA7D5B /* ScanStreet_HL@2x.png */; }; - AB5C80251938017700FA7D5B /* ScanWord@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F8A1938017700FA7D5B /* ScanWord@2x.png */; }; - AB5C80261938017700FA7D5B /* ScanWord_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F8B1938017700FA7D5B /* ScanWord_HL@2x.png */; }; - AB5C80271938017700FA7D5B /* Shake_icon_music@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F8D1938017700FA7D5B /* Shake_icon_music@2x.png */; }; - AB5C80281938017700FA7D5B /* Shake_icon_musicHL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F8E1938017700FA7D5B /* Shake_icon_musicHL@2x.png */; }; - AB5C80291938017700FA7D5B /* Shake_icon_people@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F8F1938017700FA7D5B /* Shake_icon_people@2x.png */; }; - AB5C802A1938017700FA7D5B /* Shake_icon_peopleHL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F901938017700FA7D5B /* Shake_icon_peopleHL@2x.png */; }; - AB5C802B1938017700FA7D5B /* Shake_Line_Down@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F911938017700FA7D5B /* Shake_Line_Down@2x.png */; }; - AB5C802C1938017700FA7D5B /* Shake_Line_Up@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F921938017700FA7D5B /* Shake_Line_Up@2x.png */; }; - AB5C802D1938017700FA7D5B /* Shake_Logo_Down@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F931938017700FA7D5B /* Shake_Logo_Down@2x.png */; }; - AB5C802E1938017700FA7D5B /* Shake_Logo_Female_Down@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F941938017700FA7D5B /* Shake_Logo_Female_Down@2x.png */; }; - AB5C802F1938017700FA7D5B /* Shake_Logo_Female_Up@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F951938017700FA7D5B /* Shake_Logo_Female_Up@2x.png */; }; - AB5C80301938017700FA7D5B /* Shake_Logo_Up@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F961938017700FA7D5B /* Shake_Logo_Up@2x.png */; }; - AB5C80311938017700FA7D5B /* shake_match.wav in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F971938017700FA7D5B /* shake_match.wav */; }; - AB5C80321938017700FA7D5B /* shake_nomatch.wav in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F981938017700FA7D5B /* shake_nomatch.wav */; }; - AB5C80331938017700FA7D5B /* shake_sound_male.wav in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F991938017700FA7D5B /* shake_sound_male.wav */; }; - AB5C80341938017700FA7D5B /* EmoStoreDownloadBtn@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F9B1938017700FA7D5B /* EmoStoreDownloadBtn@2x.png */; }; - AB5C80351938017700FA7D5B /* EmoStoreDownloadBtnHL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F9C1938017700FA7D5B /* EmoStoreDownloadBtnHL@2x.png */; }; - AB5C80361938017700FA7D5B /* EmotionDownload@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F9D1938017700FA7D5B /* EmotionDownload@2x.png */; }; - AB5C80371938017700FA7D5B /* EmotionDownloadComplete@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F9E1938017700FA7D5B /* EmotionDownloadComplete@2x.png */; }; - AB5C80381938017700FA7D5B /* EmotionListNewTips@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7F9F1938017700FA7D5B /* EmotionListNewTips@2x.png */; }; - AB5C80391938017700FA7D5B /* emotionShopOne@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7FA01938017700FA7D5B /* emotionShopOne@2x.png */; }; - AB5C803A1938017700FA7D5B /* emotionShopOther@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7FA11938017700FA7D5B /* emotionShopOther@2x.png */; }; - AB5C803B1938017700FA7D5B /* emotionShopTwo@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7FA21938017700FA7D5B /* emotionShopTwo@2x.png */; }; - AB5C803C1938017700FA7D5B /* GreenBtn@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7FA31938017700FA7D5B /* GreenBtn@2x.png */; }; - AB5C803D1938017700FA7D5B /* IMG_1555.MOV in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7FA41938017700FA7D5B /* IMG_1555.MOV */; }; - AB5C803E1938017700FA7D5B /* MeIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7FA51938017700FA7D5B /* MeIcon@2x.png */; }; - AB5C803F1938017700FA7D5B /* NewsBackgroundImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7FA71938017700FA7D5B /* NewsBackgroundImage@2x.png */; }; - AB5C80401938017700FA7D5B /* placeholderImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7FA81938017700FA7D5B /* placeholderImage@2x.png */; }; - AB5C80411938017700FA7D5B /* MoreExpressionShops@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7FAA1938017700FA7D5B /* MoreExpressionShops@2x.png */; }; - AB5C80421938017700FA7D5B /* MoreMyAlbum@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7FAB1938017700FA7D5B /* MoreMyAlbum@2x.png */; }; - AB5C80431938017700FA7D5B /* MoreMyBankCard@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7FAC1938017700FA7D5B /* MoreMyBankCard@2x.png */; }; - AB5C80441938017700FA7D5B /* MoreMyFavorites@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7FAD1938017700FA7D5B /* MoreMyFavorites@2x.png */; }; - AB5C80451938017700FA7D5B /* MoreSetting@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7FAE1938017700FA7D5B /* MoreSetting@2x.png */; }; - AB5C80461938017700FA7D5B /* Contact@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7FB01938017700FA7D5B /* Contact@2x.png */; }; - AB5C80471938017700FA7D5B /* Profile@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7FB11938017700FA7D5B /* Profile@2x.png */; }; - AB5C80481938017700FA7D5B /* SNS@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7FB21938017700FA7D5B /* SNS@2x.png */; }; - AB5C80491938017700FA7D5B /* tabbarBkg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7FB31938017700FA7D5B /* tabbarBkg@2x.png */; }; - AB5C804A1938017700FA7D5B /* WeChat@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7FB41938017700FA7D5B /* WeChat@2x.png */; }; - AB5C804B1938017700FA7D5B /* TableViewBackgroundImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = AB5C7FB51938017700FA7D5B /* TableViewBackgroundImage@2x.png */; }; ABC47CFB193922EB00ECADEA /* MDKMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = ABC47CFA193922EB00ECADEA /* MDKMessage.m */; }; + E4EE9AA61B97610A00866998 /* emotion0.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A791B97610A00866998 /* emotion0.gif */; }; + E4EE9AA71B97610A00866998 /* emotion1.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A7A1B97610A00866998 /* emotion1.gif */; }; + E4EE9AA81B97610A00866998 /* emotion10.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A7B1B97610A00866998 /* emotion10.gif */; }; + E4EE9AA91B97610A00866998 /* emotion11.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A7C1B97610A00866998 /* emotion11.gif */; }; + E4EE9AAA1B97610A00866998 /* emotion12.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A7D1B97610A00866998 /* emotion12.gif */; }; + E4EE9AAB1B97610A00866998 /* emotion13.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A7E1B97610A00866998 /* emotion13.gif */; }; + E4EE9AAC1B97610A00866998 /* emotion14.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A7F1B97610A00866998 /* emotion14.gif */; }; + E4EE9AAD1B97610A00866998 /* emotion15.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A801B97610A00866998 /* emotion15.gif */; }; + E4EE9AAE1B97610A00866998 /* emotion16.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A811B97610A00866998 /* emotion16.gif */; }; + E4EE9AAF1B97610A00866998 /* emotion2.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A821B97610A00866998 /* emotion2.gif */; }; + E4EE9AB01B97610A00866998 /* emotion3.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A831B97610A00866998 /* emotion3.gif */; }; + E4EE9AB11B97610A00866998 /* emotion4.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A841B97610A00866998 /* emotion4.gif */; }; + E4EE9AB21B97610A00866998 /* emotion5.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A851B97610A00866998 /* emotion5.gif */; }; + E4EE9AB31B97610A00866998 /* emotion6.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A861B97610A00866998 /* emotion6.gif */; }; + E4EE9AB41B97610A00866998 /* emotion7.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A871B97610A00866998 /* emotion7.gif */; }; + E4EE9AB51B97610A00866998 /* emotion8.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A881B97610A00866998 /* emotion8.gif */; }; + E4EE9AB61B97610A00866998 /* emotion9.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A891B97610A00866998 /* emotion9.gif */; }; + E4EE9AB71B97610A00866998 /* SearchIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A8A1B97610A00866998 /* SearchIcon@2x.png */; }; + E4EE9AB81B97610A00866998 /* section0_emotion0@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A8B1B97610A00866998 /* section0_emotion0@2x.png */; }; + E4EE9AB91B97610A00866998 /* section0_emotion1@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A8C1B97610A00866998 /* section0_emotion1@2x.png */; }; + E4EE9ABA1B97610A00866998 /* section0_emotion2@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A8D1B97610A00866998 /* section0_emotion2@2x.png */; }; + E4EE9ABB1B97610A00866998 /* section0_emotion3@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A8E1B97610A00866998 /* section0_emotion3@2x.png */; }; + E4EE9ABC1B97610A00866998 /* section0_emotion4@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A8F1B97610A00866998 /* section0_emotion4@2x.png */; }; + E4EE9ABD1B97610A00866998 /* section0_emotion5@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A901B97610A00866998 /* section0_emotion5@2x.png */; }; + E4EE9ABE1B97610A00866998 /* section0_emotion6@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A911B97610A00866998 /* section0_emotion6@2x.png */; }; + E4EE9ABF1B97610A00866998 /* section0_emotion7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A921B97610A00866998 /* section0_emotion7@2x.png */; }; + E4EE9AC01B97610A00866998 /* section0_emotion8@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A931B97610A00866998 /* section0_emotion8@2x.png */; }; + E4EE9AC11B97610A00866998 /* section0_emotion9@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A941B97610A00866998 /* section0_emotion9@2x.png */; }; + E4EE9AC21B97610A00866998 /* section0_emotion10@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A951B97610A00866998 /* section0_emotion10@2x.png */; }; + E4EE9AC31B97610A00866998 /* section0_emotion11@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A961B97610A00866998 /* section0_emotion11@2x.png */; }; + E4EE9AC41B97610A00866998 /* section0_emotion12@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A971B97610A00866998 /* section0_emotion12@2x.png */; }; + E4EE9AC51B97610A00866998 /* section0_emotion13@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A981B97610A00866998 /* section0_emotion13@2x.png */; }; + E4EE9AC61B97610A00866998 /* section0_emotion14@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A991B97610A00866998 /* section0_emotion14@2x.png */; }; + E4EE9AC71B97610A00866998 /* section0_emotion15@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A9A1B97610A00866998 /* section0_emotion15@2x.png */; }; + E4EE9AC81B97610A00866998 /* sharemore_friendcard@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A9B1B97610A00866998 /* sharemore_friendcard@2x.png */; }; + E4EE9AC91B97610A00866998 /* sharemore_location@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A9C1B97610A00866998 /* sharemore_location@2x.png */; }; + E4EE9ACA1B97610A00866998 /* sharemore_myfav@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A9D1B97610A00866998 /* sharemore_myfav@2x.png */; }; + E4EE9ACB1B97610A00866998 /* sharemore_openapi@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A9E1B97610A00866998 /* sharemore_openapi@2x.png */; }; + E4EE9ACC1B97610A00866998 /* sharemore_pic@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A9F1B97610A00866998 /* sharemore_pic@2x.png */; }; + E4EE9ACD1B97610A00866998 /* sharemore_video@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AA01B97610A00866998 /* sharemore_video@2x.png */; }; + E4EE9ACE1B97610A00866998 /* sharemore_videovoip@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AA11B97610A00866998 /* sharemore_videovoip@2x.png */; }; + E4EE9ACF1B97610A00866998 /* sharemore_voiceinput@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AA21B97610A00866998 /* sharemore_voiceinput@2x.png */; }; + E4EE9AD01B97610A00866998 /* sharemore_voipvoice@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AA31B97610A00866998 /* sharemore_voipvoice@2x.png */; }; + E4EE9AD11B97610A00866998 /* sharemore_wxtalk@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AA41B97610A00866998 /* sharemore_wxtalk@2x.png */; }; + E4EE9AD21B97610A00866998 /* TableViewBackgroundImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AA51B97610A00866998 /* TableViewBackgroundImage@2x.png */; }; + F7220AE61A52694000DBDEE7 /* MessageDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7E398DF1A4D437B003AB670 /* MessageDisplayKit.framework */; }; + F7220AE71A52694000DBDEE7 /* MessageDisplayKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F7E398DF1A4D437B003AB670 /* MessageDisplayKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F7B9EAAD1A4D60500072F81B /* avator@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA501A4D60500072F81B /* avator@2x.png */; }; + F7B9EAB81A4D60500072F81B /* MessageDisplayKitString.strings in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA5D1A4D60500072F81B /* MessageDisplayKitString.strings */; }; + F7B9EAB91A4D60500072F81B /* face@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA5E1A4D60500072F81B /* face@2x.png */; }; + F7B9EABA1A4D60500072F81B /* face_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA5F1A4D60500072F81B /* face_HL@2x.png */; }; + F7B9EABB1A4D60500072F81B /* Fav_Cell_Loc@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA601A4D60500072F81B /* Fav_Cell_Loc@2x.png */; }; + F7B9EABE1A4D60500072F81B /* input-bar-flat.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA631A4D60500072F81B /* input-bar-flat.png */; }; + F7B9EABF1A4D60500072F81B /* input-bar-flat@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA641A4D60500072F81B /* input-bar-flat@2x.png */; }; + F7B9EAC41A4D60500072F81B /* MessageVideoPlay@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA691A4D60500072F81B /* MessageVideoPlay@2x.png */; }; + F7B9EAC61A4D60500072F81B /* msg_chat_voice_unread.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA6B1A4D60500072F81B /* msg_chat_voice_unread.png */; }; + F7B9EAC71A4D60500072F81B /* msg_chat_voice_unread@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA6C1A4D60500072F81B /* msg_chat_voice_unread@2x.png */; }; + F7B9EAC81A4D60500072F81B /* multiMedia@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA6D1A4D60500072F81B /* multiMedia@2x.png */; }; + F7B9EAC91A4D60500072F81B /* multiMedia_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA6E1A4D60500072F81B /* multiMedia_HL@2x.png */; }; + F7B9EACC1A4D60500072F81B /* placeholderImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA711A4D60500072F81B /* placeholderImage@2x.png */; }; + F7B9EACD1A4D60500072F81B /* ReceiverVoiceNodePlaying000@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA721A4D60500072F81B /* ReceiverVoiceNodePlaying000@2x.png */; }; + F7B9EACE1A4D60500072F81B /* ReceiverVoiceNodePlaying001@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA731A4D60500072F81B /* ReceiverVoiceNodePlaying001@2x.png */; }; + F7B9EACF1A4D60500072F81B /* ReceiverVoiceNodePlaying002@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA741A4D60500072F81B /* ReceiverVoiceNodePlaying002@2x.png */; }; + F7B9EAD01A4D60500072F81B /* ReceiverVoiceNodePlaying003@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA751A4D60500072F81B /* ReceiverVoiceNodePlaying003@2x.png */; }; + F7B9EAD11A4D60500072F81B /* ReceiverVoiceNodePlaying@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA761A4D60500072F81B /* ReceiverVoiceNodePlaying@2x.png */; }; + F7B9EAD21A4D60500072F81B /* RecordCancel@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA771A4D60500072F81B /* RecordCancel@2x.png */; }; + F7B9EAD31A4D60500072F81B /* RecordingBkg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA781A4D60500072F81B /* RecordingBkg@2x.png */; }; + F7B9EAD41A4D60500072F81B /* RecordingSignal001@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA791A4D60500072F81B /* RecordingSignal001@2x.png */; }; + F7B9EAD51A4D60500072F81B /* RecordingSignal002@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA7A1A4D60500072F81B /* RecordingSignal002@2x.png */; }; + F7B9EAD61A4D60500072F81B /* RecordingSignal003@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA7B1A4D60500072F81B /* RecordingSignal003@2x.png */; }; + F7B9EAD71A4D60500072F81B /* RecordingSignal004@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA7C1A4D60500072F81B /* RecordingSignal004@2x.png */; }; + F7B9EAD81A4D60500072F81B /* RecordingSignal005@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA7D1A4D60500072F81B /* RecordingSignal005@2x.png */; }; + F7B9EAD91A4D60500072F81B /* RecordingSignal006@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA7E1A4D60500072F81B /* RecordingSignal006@2x.png */; }; + F7B9EADA1A4D60500072F81B /* RecordingSignal007@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA7F1A4D60500072F81B /* RecordingSignal007@2x.png */; }; + F7B9EADB1A4D60500072F81B /* RecordingSignal008@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA801A4D60500072F81B /* RecordingSignal008@2x.png */; }; + F7B9EADD1A4D60500072F81B /* SECoreTextView.bundle in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA821A4D60500072F81B /* SECoreTextView.bundle */; }; + F7B9EAEE1A4D60500072F81B /* SenderVoiceNodePlaying000@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA931A4D60500072F81B /* SenderVoiceNodePlaying000@2x.png */; }; + F7B9EAEF1A4D60500072F81B /* SenderVoiceNodePlaying001@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA941A4D60500072F81B /* SenderVoiceNodePlaying001@2x.png */; }; + F7B9EAF01A4D60500072F81B /* SenderVoiceNodePlaying002@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA951A4D60500072F81B /* SenderVoiceNodePlaying002@2x.png */; }; + F7B9EAF11A4D60500072F81B /* SenderVoiceNodePlaying003@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA961A4D60500072F81B /* SenderVoiceNodePlaying003@2x.png */; }; + F7B9EAF21A4D60500072F81B /* SenderVoiceNodePlaying@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EA971A4D60500072F81B /* SenderVoiceNodePlaying@2x.png */; }; + F7B9EAFD1A4D60500072F81B /* voice@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EAA21A4D60500072F81B /* voice@2x.png */; }; + F7B9EAFE1A4D60500072F81B /* voice_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EAA31A4D60500072F81B /* voice_HL@2x.png */; }; + F7B9EAFF1A4D60500072F81B /* VoiceBtn_Black@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EAA41A4D60500072F81B /* VoiceBtn_Black@2x.png */; }; + F7B9EB001A4D60500072F81B /* VoiceBtn_BlackHL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EAA51A4D60500072F81B /* VoiceBtn_BlackHL@2x.png */; }; + F7B9EB021A4D60500072F81B /* weChatBubble_Receiving_Solid@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EAA71A4D60500072F81B /* weChatBubble_Receiving_Solid@2x.png */; }; + F7B9EB041A4D60500072F81B /* weChatBubble_Sending_Solid@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9EAA91A4D60500072F81B /* weChatBubble_Sending_Solid@2x.png */; }; + F7D249EB1A4D072F0015764B /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F7D249EA1A4D072F0015764B /* ViewController.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -255,7 +127,23 @@ }; /* End PBXContainerItemProxy section */ +/* Begin PBXCopyFilesBuildPhase section */ + F7220AE81A52694100DBDEE7 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F7220AE71A52694000DBDEE7 /* MessageDisplayKit.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ + 7053E7171B42F03500DE808D /* keyboard_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyboard_HL@2x.png"; sourceTree = ""; }; + 7053E7181B42F03500DE808D /* keyboard@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyboard@2x.png"; sourceTree = ""; }; AB5C7E401937FE7000FA7D5B /* MessageDisplayKitCoreDataExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MessageDisplayKitCoreDataExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; AB5C7E431937FE7000FA7D5B /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; AB5C7E451937FE7000FA7D5B /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; @@ -275,229 +163,99 @@ AB5C7E731937FE7000FA7D5B /* MessageDisplayKitCoreDataExampleTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "MessageDisplayKitCoreDataExampleTests-Info.plist"; sourceTree = ""; }; AB5C7E751937FE7000FA7D5B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; AB5C7E771937FE7000FA7D5B /* MessageDisplayKitCoreDataExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MessageDisplayKitCoreDataExampleTests.m; sourceTree = ""; }; - AB5C7E821937FF9300FA7D5B /* MessageDisplayFramework.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageDisplayFramework.framework; path = "../../../../../../Library/Developer/Xcode/DerivedData/MessageDisplayKitWorkSpace-etwqpidvrxfrcqffbdxelymxtvnc/Build/Products/Debug-iphoneos/MessageDisplayFramework.framework"; sourceTree = ""; }; - AB5C7E861937FF9B00FA7D5B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/MessageDisplayKitString.strings; sourceTree = ""; }; - AB5C7E871937FF9B00FA7D5B /* face@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "face@2x.png"; sourceTree = ""; }; - AB5C7E881937FF9B00FA7D5B /* face_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "face_HL@2x.png"; sourceTree = ""; }; - AB5C7E891937FF9B00FA7D5B /* Fav_Cell_Loc@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Fav_Cell_Loc@2x.png"; sourceTree = ""; }; - AB5C7E8A1937FF9B00FA7D5B /* input-bar-background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-bar-background.png"; sourceTree = ""; }; - AB5C7E8B1937FF9B00FA7D5B /* input-bar-background@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-bar-background@2x.png"; sourceTree = ""; }; - AB5C7E8C1937FF9B00FA7D5B /* input-bar-flat.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-bar-flat.png"; sourceTree = ""; }; - AB5C7E8D1937FF9B00FA7D5B /* input-bar-flat@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-bar-flat@2x.png"; sourceTree = ""; }; - AB5C7E8E1937FF9B00FA7D5B /* input-field-cover.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-field-cover.png"; sourceTree = ""; }; - AB5C7E8F1937FF9B00FA7D5B /* input-field-cover@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-field-cover@2x.png"; sourceTree = ""; }; - AB5C7E901937FF9B00FA7D5B /* keyborad@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyborad@2x.png"; sourceTree = ""; }; - AB5C7E911937FF9B00FA7D5B /* keyborad_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyborad_HL@2x.png"; sourceTree = ""; }; - AB5C7E921937FF9B00FA7D5B /* MessageVideoPlay@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MessageVideoPlay@2x.png"; sourceTree = ""; }; - AB5C7E931937FF9B00FA7D5B /* multiMedia@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "multiMedia@2x.png"; sourceTree = ""; }; - AB5C7E941937FF9B00FA7D5B /* multiMedia_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "multiMedia_HL@2x.png"; sourceTree = ""; }; - AB5C7E951937FF9B00FA7D5B /* ReceiverVoiceNodePlaying000@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying000@2x.png"; sourceTree = ""; }; - AB5C7E961937FF9B00FA7D5B /* ReceiverVoiceNodePlaying001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying001@2x.png"; sourceTree = ""; }; - AB5C7E971937FF9B00FA7D5B /* ReceiverVoiceNodePlaying002@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying002@2x.png"; sourceTree = ""; }; - AB5C7E981937FF9B00FA7D5B /* ReceiverVoiceNodePlaying003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying003@2x.png"; sourceTree = ""; }; - AB5C7E991937FF9B00FA7D5B /* ReceiverVoiceNodePlaying@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying@2x.png"; sourceTree = ""; }; - AB5C7E9A1937FF9B00FA7D5B /* RecordCancel@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordCancel@2x.png"; sourceTree = ""; }; - AB5C7E9B1937FF9B00FA7D5B /* RecordingBkg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingBkg@2x.png"; sourceTree = ""; }; - AB5C7E9C1937FF9B00FA7D5B /* RecordingSignal001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal001@2x.png"; sourceTree = ""; }; - AB5C7E9D1937FF9B00FA7D5B /* RecordingSignal002@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal002@2x.png"; sourceTree = ""; }; - AB5C7E9E1937FF9B00FA7D5B /* RecordingSignal003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal003@2x.png"; sourceTree = ""; }; - AB5C7E9F1937FF9B00FA7D5B /* RecordingSignal004@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal004@2x.png"; sourceTree = ""; }; - AB5C7EA01937FF9B00FA7D5B /* RecordingSignal005@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal005@2x.png"; sourceTree = ""; }; - AB5C7EA11937FF9B00FA7D5B /* RecordingSignal006@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal006@2x.png"; sourceTree = ""; }; - AB5C7EA21937FF9B00FA7D5B /* RecordingSignal007@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal007@2x.png"; sourceTree = ""; }; - AB5C7EA31937FF9B00FA7D5B /* RecordingSignal008@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal008@2x.png"; sourceTree = ""; }; - AB5C7EA41937FF9B00FA7D5B /* section0_emotion0@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion0@2x.png"; sourceTree = ""; }; - AB5C7EA51937FF9B00FA7D5B /* section0_emotion10@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion10@2x.png"; sourceTree = ""; }; - AB5C7EA61937FF9B00FA7D5B /* section0_emotion11@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion11@2x.png"; sourceTree = ""; }; - AB5C7EA71937FF9B00FA7D5B /* section0_emotion12@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion12@2x.png"; sourceTree = ""; }; - AB5C7EA81937FF9B00FA7D5B /* section0_emotion13@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion13@2x.png"; sourceTree = ""; }; - AB5C7EA91937FF9B00FA7D5B /* section0_emotion14@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion14@2x.png"; sourceTree = ""; }; - AB5C7EAA1937FF9B00FA7D5B /* section0_emotion15@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion15@2x.png"; sourceTree = ""; }; - AB5C7EAB1937FF9B00FA7D5B /* section0_emotion1@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion1@2x.png"; sourceTree = ""; }; - AB5C7EAC1937FF9B00FA7D5B /* section0_emotion2@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion2@2x.png"; sourceTree = ""; }; - AB5C7EAD1937FF9B00FA7D5B /* section0_emotion3@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion3@2x.png"; sourceTree = ""; }; - AB5C7EAE1937FF9B00FA7D5B /* section0_emotion4@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion4@2x.png"; sourceTree = ""; }; - AB5C7EAF1937FF9B00FA7D5B /* section0_emotion5@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion5@2x.png"; sourceTree = ""; }; - AB5C7EB01937FF9B00FA7D5B /* section0_emotion6@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion6@2x.png"; sourceTree = ""; }; - AB5C7EB11937FF9B00FA7D5B /* section0_emotion7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion7@2x.png"; sourceTree = ""; }; - AB5C7EB21937FF9B00FA7D5B /* section0_emotion8@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion8@2x.png"; sourceTree = ""; }; - AB5C7EB31937FF9B00FA7D5B /* section0_emotion9@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion9@2x.png"; sourceTree = ""; }; - AB5C7EB41937FF9B00FA7D5B /* SenderVoiceNodePlaying000@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying000@2x.png"; sourceTree = ""; }; - AB5C7EB51937FF9B00FA7D5B /* SenderVoiceNodePlaying001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying001@2x.png"; sourceTree = ""; }; - AB5C7EB61937FF9B00FA7D5B /* SenderVoiceNodePlaying002@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying002@2x.png"; sourceTree = ""; }; - AB5C7EB71937FF9B00FA7D5B /* SenderVoiceNodePlaying003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying003@2x.png"; sourceTree = ""; }; - AB5C7EB81937FF9B00FA7D5B /* SenderVoiceNodePlaying@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying@2x.png"; sourceTree = ""; }; - AB5C7EB91937FF9B00FA7D5B /* sharemore_friendcard@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_friendcard@2x.png"; sourceTree = ""; }; - AB5C7EBA1937FF9B00FA7D5B /* sharemore_location@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_location@2x.png"; sourceTree = ""; }; - AB5C7EBB1937FF9B00FA7D5B /* sharemore_myfav@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_myfav@2x.png"; sourceTree = ""; }; - AB5C7EBC1937FF9B00FA7D5B /* sharemore_openapi@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_openapi@2x.png"; sourceTree = ""; }; - AB5C7EBD1937FF9B00FA7D5B /* sharemore_pic@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_pic@2x.png"; sourceTree = ""; }; - AB5C7EBE1937FF9B00FA7D5B /* sharemore_video@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_video@2x.png"; sourceTree = ""; }; - AB5C7EBF1937FF9B00FA7D5B /* sharemore_videovoip@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_videovoip@2x.png"; sourceTree = ""; }; - AB5C7EC01937FF9B00FA7D5B /* sharemore_voiceinput@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_voiceinput@2x.png"; sourceTree = ""; }; - AB5C7EC11937FF9B00FA7D5B /* sharemore_voipvoice@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_voipvoice@2x.png"; sourceTree = ""; }; - AB5C7EC21937FF9B00FA7D5B /* sharemore_wxtalk@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_wxtalk@2x.png"; sourceTree = ""; }; - AB5C7EC31937FF9B00FA7D5B /* voice@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "voice@2x.png"; sourceTree = ""; }; - AB5C7EC41937FF9B00FA7D5B /* voice_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "voice_HL@2x.png"; sourceTree = ""; }; - AB5C7EC51937FF9B00FA7D5B /* VoiceBtn_Black@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceBtn_Black@2x.png"; sourceTree = ""; }; - AB5C7EC61937FF9B00FA7D5B /* VoiceBtn_BlackHL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceBtn_BlackHL@2x.png"; sourceTree = ""; }; - AB5C7EC71937FF9B00FA7D5B /* weChatBubble_Receiving_Cavern@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weChatBubble_Receiving_Cavern@2x.png"; sourceTree = ""; }; - AB5C7EC81937FF9B00FA7D5B /* weChatBubble_Receiving_Solid@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weChatBubble_Receiving_Solid@2x.png"; sourceTree = ""; }; - AB5C7EC91937FF9B00FA7D5B /* weChatBubble_Sending_Cavern@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weChatBubble_Sending_Cavern@2x.png"; sourceTree = ""; }; - AB5C7ECA1937FF9B00FA7D5B /* weChatBubble_Sending_Solid@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weChatBubble_Sending_Solid@2x.png"; sourceTree = ""; }; - AB5C7ECB1937FF9B00FA7D5B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MessageDisplayKitString.strings"; sourceTree = ""; }; AB5C7F111937FFCC00FA7D5B /* XHDemoWeChatMessageTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHDemoWeChatMessageTableViewController.h; sourceTree = ""; }; AB5C7F121937FFCC00FA7D5B /* XHDemoWeChatMessageTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHDemoWeChatMessageTableViewController.m; sourceTree = ""; }; - AB5C7F151938017700FA7D5B /* avator@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "avator@2x.png"; sourceTree = ""; }; - AB5C7F171938017700FA7D5B /* Contact_Female@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Contact_Female@2x.png"; sourceTree = ""; }; - AB5C7F181938017700FA7D5B /* Contact_Male@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Contact_Male@2x.png"; sourceTree = ""; }; - AB5C7F1A1938017700FA7D5B /* VoiceSearchBtn@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchBtn@2x.png"; sourceTree = ""; }; - AB5C7F1B1938017700FA7D5B /* VoiceSearchBtn_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchBtn_ios7@2x.png"; sourceTree = ""; }; - AB5C7F1C1938017700FA7D5B /* VoiceSearchBtnHL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchBtnHL@2x.png"; sourceTree = ""; }; - AB5C7F1D1938017700FA7D5B /* VoiceSearchBtnHL_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchBtnHL_ios7@2x.png"; sourceTree = ""; }; - AB5C7F1E1938017700FA7D5B /* VoiceSearchFeedback003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback003@2x.png"; sourceTree = ""; }; - AB5C7F1F1938017700FA7D5B /* VoiceSearchFeedback003_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback003_ios7@2x.png"; sourceTree = ""; }; - AB5C7F201938017700FA7D5B /* VoiceSearchFeedback004@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback004@2x.png"; sourceTree = ""; }; - AB5C7F211938017700FA7D5B /* VoiceSearchFeedback004_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback004_ios7@2x.png"; sourceTree = ""; }; - AB5C7F221938017700FA7D5B /* VoiceSearchFeedback005@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback005@2x.png"; sourceTree = ""; }; - AB5C7F231938017700FA7D5B /* VoiceSearchFeedback005_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback005_ios7@2x.png"; sourceTree = ""; }; - AB5C7F241938017700FA7D5B /* VoiceSearchFeedback006@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback006@2x.png"; sourceTree = ""; }; - AB5C7F251938017700FA7D5B /* VoiceSearchFeedback006_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback006_ios7@2x.png"; sourceTree = ""; }; - AB5C7F261938017700FA7D5B /* VoiceSearchFeedback007@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback007@2x.png"; sourceTree = ""; }; - AB5C7F271938017700FA7D5B /* VoiceSearchFeedback007_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback007_ios7@2x.png"; sourceTree = ""; }; - AB5C7F281938017700FA7D5B /* VoiceSearchFeedback008@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback008@2x.png"; sourceTree = ""; }; - AB5C7F291938017700FA7D5B /* VoiceSearchFeedback008_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback008_ios7@2x.png"; sourceTree = ""; }; - AB5C7F2A1938017700FA7D5B /* VoiceSearchFeedback009@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback009@2x.png"; sourceTree = ""; }; - AB5C7F2B1938017700FA7D5B /* VoiceSearchFeedback009_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback009_ios7@2x.png"; sourceTree = ""; }; - AB5C7F2C1938017700FA7D5B /* VoiceSearchFeedback010@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback010@2x.png"; sourceTree = ""; }; - AB5C7F2D1938017700FA7D5B /* VoiceSearchFeedback010_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback010_ios7@2x.png"; sourceTree = ""; }; - AB5C7F2E1938017700FA7D5B /* VoiceSearchFeedback011@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback011@2x.png"; sourceTree = ""; }; - AB5C7F2F1938017700FA7D5B /* VoiceSearchFeedback011_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback011_ios7@2x.png"; sourceTree = ""; }; - AB5C7F301938017700FA7D5B /* VoiceSearchFeedback012@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback012@2x.png"; sourceTree = ""; }; - AB5C7F311938017700FA7D5B /* VoiceSearchFeedback012_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback012_ios7@2x.png"; sourceTree = ""; }; - AB5C7F321938017700FA7D5B /* VoiceSearchFeedback013@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback013@2x.png"; sourceTree = ""; }; - AB5C7F331938017700FA7D5B /* VoiceSearchFeedback013_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback013_ios7@2x.png"; sourceTree = ""; }; - AB5C7F341938017700FA7D5B /* VoiceSearchFeedback014@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback014@2x.png"; sourceTree = ""; }; - AB5C7F351938017700FA7D5B /* VoiceSearchFeedback014_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback014_ios7@2x.png"; sourceTree = ""; }; - AB5C7F361938017700FA7D5B /* VoiceSearchFeedback015@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback015@2x.png"; sourceTree = ""; }; - AB5C7F371938017700FA7D5B /* VoiceSearchFeedback015_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback015_ios7@2x.png"; sourceTree = ""; }; - AB5C7F381938017700FA7D5B /* VoiceSearchFeedback016@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback016@2x.png"; sourceTree = ""; }; - AB5C7F391938017700FA7D5B /* VoiceSearchFeedback016_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback016_ios7@2x.png"; sourceTree = ""; }; - AB5C7F3A1938017700FA7D5B /* VoiceSearchFeedback017@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback017@2x.png"; sourceTree = ""; }; - AB5C7F3B1938017700FA7D5B /* VoiceSearchFeedback017_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback017_ios7@2x.png"; sourceTree = ""; }; - AB5C7F3C1938017700FA7D5B /* VoiceSearchFeedback018@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback018@2x.png"; sourceTree = ""; }; - AB5C7F3D1938017700FA7D5B /* VoiceSearchFeedback018_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback018_ios7@2x.png"; sourceTree = ""; }; - AB5C7F3E1938017700FA7D5B /* VoiceSearchFeedback019@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback019@2x.png"; sourceTree = ""; }; - AB5C7F3F1938017700FA7D5B /* VoiceSearchFeedback019_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback019_ios7@2x.png"; sourceTree = ""; }; - AB5C7F401938017700FA7D5B /* VoiceSearchFeedback020@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback020@2x.png"; sourceTree = ""; }; - AB5C7F411938017700FA7D5B /* VoiceSearchFeedback020_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchFeedback020_ios7@2x.png"; sourceTree = ""; }; - AB5C7F421938017700FA7D5B /* VoiceSearchIcon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchIcon@2x.png"; sourceTree = ""; }; - AB5C7F431938017700FA7D5B /* VoiceSearchIcon_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchIcon_ios7@2x.png"; sourceTree = ""; }; - AB5C7F441938017700FA7D5B /* VoiceSearchIconHL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchIconHL@2x.png"; sourceTree = ""; }; - AB5C7F451938017700FA7D5B /* VoiceSearchIconHL_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchIconHL_ios7@2x.png"; sourceTree = ""; }; - AB5C7F461938017700FA7D5B /* VoiceSearchLoading001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading001@2x.png"; sourceTree = ""; }; - AB5C7F471938017700FA7D5B /* VoiceSearchLoading001_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading001_ios7@2x.png"; sourceTree = ""; }; - AB5C7F481938017700FA7D5B /* VoiceSearchLoading002@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading002@2x.png"; sourceTree = ""; }; - AB5C7F491938017700FA7D5B /* VoiceSearchLoading002_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading002_ios7@2x.png"; sourceTree = ""; }; - AB5C7F4A1938017700FA7D5B /* VoiceSearchLoading003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading003@2x.png"; sourceTree = ""; }; - AB5C7F4B1938017700FA7D5B /* VoiceSearchLoading003_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading003_ios7@2x.png"; sourceTree = ""; }; - AB5C7F4C1938017700FA7D5B /* VoiceSearchLoading004@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading004@2x.png"; sourceTree = ""; }; - AB5C7F4D1938017700FA7D5B /* VoiceSearchLoading004_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading004_ios7@2x.png"; sourceTree = ""; }; - AB5C7F4E1938017700FA7D5B /* VoiceSearchLoading005@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading005@2x.png"; sourceTree = ""; }; - AB5C7F4F1938017700FA7D5B /* VoiceSearchLoading005_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading005_ios7@2x.png"; sourceTree = ""; }; - AB5C7F501938017700FA7D5B /* VoiceSearchLoading006@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading006@2x.png"; sourceTree = ""; }; - AB5C7F511938017700FA7D5B /* VoiceSearchLoading006_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading006_ios7@2x.png"; sourceTree = ""; }; - AB5C7F521938017700FA7D5B /* VoiceSearchLoading007@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading007@2x.png"; sourceTree = ""; }; - AB5C7F531938017700FA7D5B /* VoiceSearchLoading007_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading007_ios7@2x.png"; sourceTree = ""; }; - AB5C7F541938017700FA7D5B /* VoiceSearchLoading008@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading008@2x.png"; sourceTree = ""; }; - AB5C7F551938017700FA7D5B /* VoiceSearchLoading008_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading008_ios7@2x.png"; sourceTree = ""; }; - AB5C7F561938017700FA7D5B /* VoiceSearchLoading009@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading009@2x.png"; sourceTree = ""; }; - AB5C7F571938017700FA7D5B /* VoiceSearchLoading009_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading009_ios7@2x.png"; sourceTree = ""; }; - AB5C7F581938017700FA7D5B /* VoiceSearchLoading010@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading010@2x.png"; sourceTree = ""; }; - AB5C7F591938017700FA7D5B /* VoiceSearchLoading010_ios7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchLoading010_ios7@2x.png"; sourceTree = ""; }; - AB5C7F5A1938017700FA7D5B /* VoiceSearchOff.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = VoiceSearchOff.wav; sourceTree = ""; }; - AB5C7F5B1938017700FA7D5B /* VoiceSearchOn.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = VoiceSearchOn.wav; sourceTree = ""; }; - AB5C7F5C1938017700FA7D5B /* VoiceSearchStartBtn@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchStartBtn@2x.png"; sourceTree = ""; }; - AB5C7F5D1938017700FA7D5B /* VoiceSearchStartBtnHL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceSearchStartBtnHL@2x.png"; sourceTree = ""; }; - AB5C7F621938017700FA7D5B /* album_add_photo@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "album_add_photo@2x.png"; sourceTree = ""; }; - AB5C7F631938017700FA7D5B /* AlbumFlagMark@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "AlbumFlagMark@2x.png"; sourceTree = ""; }; - AB5C7F641938017700FA7D5B /* AlbumHeaderBackgrounImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "AlbumHeaderBackgrounImage@2x.png"; sourceTree = ""; }; - AB5C7F651938017700FA7D5B /* AlbumOperateMore@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "AlbumOperateMore@2x.png"; sourceTree = ""; }; - AB5C7F661938017700FA7D5B /* AlbumOperateMoreHL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "AlbumOperateMoreHL@2x.png"; sourceTree = ""; }; - AB5C7F671938017700FA7D5B /* circle@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "circle@2x.png"; sourceTree = ""; }; - AB5C7F681938017700FA7D5B /* pullrefresh.aif */ = {isa = PBXFileReference; lastKnownFileType = file; path = pullrefresh.aif; sourceTree = ""; }; - AB5C7F691938017700FA7D5B /* barbuttonicon_more@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "barbuttonicon_more@2x.png"; sourceTree = ""; }; - AB5C7F6A1938017700FA7D5B /* barbuttonicon_set@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "barbuttonicon_set@2x.png"; sourceTree = ""; }; - AB5C7F6C1938017700FA7D5B /* bottleBkg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "bottleBkg@2x.png"; sourceTree = ""; }; - AB5C7F6D1938017700FA7D5B /* bottleBkgSpotLight@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "bottleBkgSpotLight@2x.png"; sourceTree = ""; }; - AB5C7F6E1938017700FA7D5B /* bottleBoard@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "bottleBoard@2x.png"; sourceTree = ""; }; - AB5C7F6F1938017700FA7D5B /* bottleButtonFish@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "bottleButtonFish@2x.png"; sourceTree = ""; }; - AB5C7F701938017700FA7D5B /* bottleButtonMine@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "bottleButtonMine@2x.png"; sourceTree = ""; }; - AB5C7F711938017700FA7D5B /* bottleButtonThrow@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "bottleButtonThrow@2x.png"; sourceTree = ""; }; - AB5C7F721938017700FA7D5B /* bottleNightBkg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "bottleNightBkg@2x.png"; sourceTree = ""; }; - AB5C7F731938017700FA7D5B /* bottleRecord@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "bottleRecord@2x.png"; sourceTree = ""; }; - AB5C7F741938017700FA7D5B /* bottleStarfish@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "bottleStarfish@2x.png"; sourceTree = ""; }; - AB5C7F751938017700FA7D5B /* bottleWriting@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "bottleWriting@2x.png"; sourceTree = ""; }; - AB5C7F761938017700FA7D5B /* fishwater2@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "fishwater2@2x.png"; sourceTree = ""; }; - AB5C7F771938017700FA7D5B /* fishwater3@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "fishwater3@2x.png"; sourceTree = ""; }; - AB5C7F781938017700FA7D5B /* fishwater@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "fishwater@2x.png"; sourceTree = ""; }; - AB5C7F791938017700FA7D5B /* ff_IconBottle@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ff_IconBottle@2x.png"; sourceTree = ""; }; - AB5C7F7A1938017700FA7D5B /* ff_IconLocationService@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ff_IconLocationService@2x.png"; sourceTree = ""; }; - AB5C7F7B1938017700FA7D5B /* ff_IconQRCode@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ff_IconQRCode@2x.png"; sourceTree = ""; }; - AB5C7F7C1938017700FA7D5B /* ff_IconShake@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ff_IconShake@2x.png"; sourceTree = ""; }; - AB5C7F7D1938017700FA7D5B /* ff_IconShowAlbum@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ff_IconShowAlbum@2x.png"; sourceTree = ""; }; - AB5C7F7E1938017700FA7D5B /* MoreGame@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MoreGame@2x.png"; sourceTree = ""; }; - AB5C7F801938017700FA7D5B /* ScanBook@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ScanBook@2x.png"; sourceTree = ""; }; - AB5C7F811938017700FA7D5B /* ScanBook_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ScanBook_HL@2x.png"; sourceTree = ""; }; - AB5C7F821938017700FA7D5B /* ScanQR1@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ScanQR1@2x.png"; sourceTree = ""; }; - AB5C7F831938017700FA7D5B /* ScanQR2@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ScanQR2@2x.png"; sourceTree = ""; }; - AB5C7F841938017700FA7D5B /* ScanQR3@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ScanQR3@2x.png"; sourceTree = ""; }; - AB5C7F851938017700FA7D5B /* ScanQR4@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ScanQR4@2x.png"; sourceTree = ""; }; - AB5C7F861938017700FA7D5B /* ScanQRCode@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ScanQRCode@2x.png"; sourceTree = ""; }; - AB5C7F871938017700FA7D5B /* ScanQRCode_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ScanQRCode_HL@2x.png"; sourceTree = ""; }; - AB5C7F881938017700FA7D5B /* ScanStreet@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ScanStreet@2x.png"; sourceTree = ""; }; - AB5C7F891938017700FA7D5B /* ScanStreet_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ScanStreet_HL@2x.png"; sourceTree = ""; }; - AB5C7F8A1938017700FA7D5B /* ScanWord@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ScanWord@2x.png"; sourceTree = ""; }; - AB5C7F8B1938017700FA7D5B /* ScanWord_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ScanWord_HL@2x.png"; sourceTree = ""; }; - AB5C7F8D1938017700FA7D5B /* Shake_icon_music@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Shake_icon_music@2x.png"; sourceTree = ""; }; - AB5C7F8E1938017700FA7D5B /* Shake_icon_musicHL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Shake_icon_musicHL@2x.png"; sourceTree = ""; }; - AB5C7F8F1938017700FA7D5B /* Shake_icon_people@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Shake_icon_people@2x.png"; sourceTree = ""; }; - AB5C7F901938017700FA7D5B /* Shake_icon_peopleHL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Shake_icon_peopleHL@2x.png"; sourceTree = ""; }; - AB5C7F911938017700FA7D5B /* Shake_Line_Down@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Shake_Line_Down@2x.png"; sourceTree = ""; }; - AB5C7F921938017700FA7D5B /* Shake_Line_Up@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Shake_Line_Up@2x.png"; sourceTree = ""; }; - AB5C7F931938017700FA7D5B /* Shake_Logo_Down@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Shake_Logo_Down@2x.png"; sourceTree = ""; }; - AB5C7F941938017700FA7D5B /* Shake_Logo_Female_Down@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Shake_Logo_Female_Down@2x.png"; sourceTree = ""; }; - AB5C7F951938017700FA7D5B /* Shake_Logo_Female_Up@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Shake_Logo_Female_Up@2x.png"; sourceTree = ""; }; - AB5C7F961938017700FA7D5B /* Shake_Logo_Up@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Shake_Logo_Up@2x.png"; sourceTree = ""; }; - AB5C7F971938017700FA7D5B /* shake_match.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = shake_match.wav; sourceTree = ""; }; - AB5C7F981938017700FA7D5B /* shake_nomatch.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = shake_nomatch.wav; sourceTree = ""; }; - AB5C7F991938017700FA7D5B /* shake_sound_male.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = shake_sound_male.wav; sourceTree = ""; }; - AB5C7F9B1938017700FA7D5B /* EmoStoreDownloadBtn@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "EmoStoreDownloadBtn@2x.png"; sourceTree = ""; }; - AB5C7F9C1938017700FA7D5B /* EmoStoreDownloadBtnHL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "EmoStoreDownloadBtnHL@2x.png"; sourceTree = ""; }; - AB5C7F9D1938017700FA7D5B /* EmotionDownload@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "EmotionDownload@2x.png"; sourceTree = ""; }; - AB5C7F9E1938017700FA7D5B /* EmotionDownloadComplete@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "EmotionDownloadComplete@2x.png"; sourceTree = ""; }; - AB5C7F9F1938017700FA7D5B /* EmotionListNewTips@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "EmotionListNewTips@2x.png"; sourceTree = ""; }; - AB5C7FA01938017700FA7D5B /* emotionShopOne@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "emotionShopOne@2x.png"; sourceTree = ""; }; - AB5C7FA11938017700FA7D5B /* emotionShopOther@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "emotionShopOther@2x.png"; sourceTree = ""; }; - AB5C7FA21938017700FA7D5B /* emotionShopTwo@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "emotionShopTwo@2x.png"; sourceTree = ""; }; - AB5C7FA31938017700FA7D5B /* GreenBtn@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "GreenBtn@2x.png"; sourceTree = ""; }; - AB5C7FA41938017700FA7D5B /* IMG_1555.MOV */ = {isa = PBXFileReference; lastKnownFileType = video.quicktime; path = IMG_1555.MOV; sourceTree = ""; }; - AB5C7FA51938017700FA7D5B /* MeIcon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MeIcon@2x.png"; sourceTree = ""; }; - AB5C7FA71938017700FA7D5B /* NewsBackgroundImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "NewsBackgroundImage@2x.png"; sourceTree = ""; }; - AB5C7FA81938017700FA7D5B /* placeholderImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "placeholderImage@2x.png"; sourceTree = ""; }; - AB5C7FAA1938017700FA7D5B /* MoreExpressionShops@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MoreExpressionShops@2x.png"; sourceTree = ""; }; - AB5C7FAB1938017700FA7D5B /* MoreMyAlbum@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MoreMyAlbum@2x.png"; sourceTree = ""; }; - AB5C7FAC1938017700FA7D5B /* MoreMyBankCard@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MoreMyBankCard@2x.png"; sourceTree = ""; }; - AB5C7FAD1938017700FA7D5B /* MoreMyFavorites@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MoreMyFavorites@2x.png"; sourceTree = ""; }; - AB5C7FAE1938017700FA7D5B /* MoreSetting@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MoreSetting@2x.png"; sourceTree = ""; }; - AB5C7FB01938017700FA7D5B /* Contact@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Contact@2x.png"; sourceTree = ""; }; - AB5C7FB11938017700FA7D5B /* Profile@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Profile@2x.png"; sourceTree = ""; }; - AB5C7FB21938017700FA7D5B /* SNS@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SNS@2x.png"; sourceTree = ""; }; - AB5C7FB31938017700FA7D5B /* tabbarBkg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "tabbarBkg@2x.png"; sourceTree = ""; }; - AB5C7FB41938017700FA7D5B /* WeChat@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "WeChat@2x.png"; sourceTree = ""; }; - AB5C7FB51938017700FA7D5B /* TableViewBackgroundImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "TableViewBackgroundImage@2x.png"; sourceTree = ""; }; ABC47CF9193922EB00ECADEA /* MDKMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MDKMessage.h; sourceTree = ""; }; ABC47CFA193922EB00ECADEA /* MDKMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MDKMessage.m; sourceTree = ""; }; + E4EE9A791B97610A00866998 /* emotion0.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion0.gif; sourceTree = ""; }; + E4EE9A7A1B97610A00866998 /* emotion1.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion1.gif; sourceTree = ""; }; + E4EE9A7B1B97610A00866998 /* emotion10.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion10.gif; sourceTree = ""; }; + E4EE9A7C1B97610A00866998 /* emotion11.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion11.gif; sourceTree = ""; }; + E4EE9A7D1B97610A00866998 /* emotion12.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion12.gif; sourceTree = ""; }; + E4EE9A7E1B97610A00866998 /* emotion13.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion13.gif; sourceTree = ""; }; + E4EE9A7F1B97610A00866998 /* emotion14.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion14.gif; sourceTree = ""; }; + E4EE9A801B97610A00866998 /* emotion15.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion15.gif; sourceTree = ""; }; + E4EE9A811B97610A00866998 /* emotion16.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion16.gif; sourceTree = ""; }; + E4EE9A821B97610A00866998 /* emotion2.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion2.gif; sourceTree = ""; }; + E4EE9A831B97610A00866998 /* emotion3.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion3.gif; sourceTree = ""; }; + E4EE9A841B97610A00866998 /* emotion4.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion4.gif; sourceTree = ""; }; + E4EE9A851B97610A00866998 /* emotion5.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion5.gif; sourceTree = ""; }; + E4EE9A861B97610A00866998 /* emotion6.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion6.gif; sourceTree = ""; }; + E4EE9A871B97610A00866998 /* emotion7.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion7.gif; sourceTree = ""; }; + E4EE9A881B97610A00866998 /* emotion8.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion8.gif; sourceTree = ""; }; + E4EE9A891B97610A00866998 /* emotion9.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion9.gif; sourceTree = ""; }; + E4EE9A8A1B97610A00866998 /* SearchIcon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SearchIcon@2x.png"; sourceTree = ""; }; + E4EE9A8B1B97610A00866998 /* section0_emotion0@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion0@2x.png"; sourceTree = ""; }; + E4EE9A8C1B97610A00866998 /* section0_emotion1@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion1@2x.png"; sourceTree = ""; }; + E4EE9A8D1B97610A00866998 /* section0_emotion2@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion2@2x.png"; sourceTree = ""; }; + E4EE9A8E1B97610A00866998 /* section0_emotion3@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion3@2x.png"; sourceTree = ""; }; + E4EE9A8F1B97610A00866998 /* section0_emotion4@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion4@2x.png"; sourceTree = ""; }; + E4EE9A901B97610A00866998 /* section0_emotion5@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion5@2x.png"; sourceTree = ""; }; + E4EE9A911B97610A00866998 /* section0_emotion6@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion6@2x.png"; sourceTree = ""; }; + E4EE9A921B97610A00866998 /* section0_emotion7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion7@2x.png"; sourceTree = ""; }; + E4EE9A931B97610A00866998 /* section0_emotion8@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion8@2x.png"; sourceTree = ""; }; + E4EE9A941B97610A00866998 /* section0_emotion9@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion9@2x.png"; sourceTree = ""; }; + E4EE9A951B97610A00866998 /* section0_emotion10@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion10@2x.png"; sourceTree = ""; }; + E4EE9A961B97610A00866998 /* section0_emotion11@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion11@2x.png"; sourceTree = ""; }; + E4EE9A971B97610A00866998 /* section0_emotion12@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion12@2x.png"; sourceTree = ""; }; + E4EE9A981B97610A00866998 /* section0_emotion13@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion13@2x.png"; sourceTree = ""; }; + E4EE9A991B97610A00866998 /* section0_emotion14@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion14@2x.png"; sourceTree = ""; }; + E4EE9A9A1B97610A00866998 /* section0_emotion15@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion15@2x.png"; sourceTree = ""; }; + E4EE9A9B1B97610A00866998 /* sharemore_friendcard@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_friendcard@2x.png"; sourceTree = ""; }; + E4EE9A9C1B97610A00866998 /* sharemore_location@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_location@2x.png"; sourceTree = ""; }; + E4EE9A9D1B97610A00866998 /* sharemore_myfav@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_myfav@2x.png"; sourceTree = ""; }; + E4EE9A9E1B97610A00866998 /* sharemore_openapi@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_openapi@2x.png"; sourceTree = ""; }; + E4EE9A9F1B97610A00866998 /* sharemore_pic@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_pic@2x.png"; sourceTree = ""; }; + E4EE9AA01B97610A00866998 /* sharemore_video@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_video@2x.png"; sourceTree = ""; }; + E4EE9AA11B97610A00866998 /* sharemore_videovoip@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_videovoip@2x.png"; sourceTree = ""; }; + E4EE9AA21B97610A00866998 /* sharemore_voiceinput@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_voiceinput@2x.png"; sourceTree = ""; }; + E4EE9AA31B97610A00866998 /* sharemore_voipvoice@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_voipvoice@2x.png"; sourceTree = ""; }; + E4EE9AA41B97610A00866998 /* sharemore_wxtalk@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_wxtalk@2x.png"; sourceTree = ""; }; + E4EE9AA51B97610A00866998 /* TableViewBackgroundImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "TableViewBackgroundImage@2x.png"; sourceTree = ""; }; + F7B9EA501A4D60500072F81B /* avator@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "avator@2x.png"; sourceTree = ""; }; + F7B9EA5B1A4D60500072F81B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/MessageDisplayKitString.strings; sourceTree = ""; }; + F7B9EA5C1A4D60500072F81B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MessageDisplayKitString.strings"; sourceTree = ""; }; + F7B9EA5E1A4D60500072F81B /* face@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "face@2x.png"; sourceTree = ""; }; + F7B9EA5F1A4D60500072F81B /* face_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "face_HL@2x.png"; sourceTree = ""; }; + F7B9EA601A4D60500072F81B /* Fav_Cell_Loc@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Fav_Cell_Loc@2x.png"; sourceTree = ""; }; + F7B9EA631A4D60500072F81B /* input-bar-flat.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-bar-flat.png"; sourceTree = ""; }; + F7B9EA641A4D60500072F81B /* input-bar-flat@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-bar-flat@2x.png"; sourceTree = ""; }; + F7B9EA691A4D60500072F81B /* MessageVideoPlay@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MessageVideoPlay@2x.png"; sourceTree = ""; }; + F7B9EA6B1A4D60500072F81B /* msg_chat_voice_unread.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = msg_chat_voice_unread.png; sourceTree = ""; }; + F7B9EA6C1A4D60500072F81B /* msg_chat_voice_unread@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "msg_chat_voice_unread@2x.png"; sourceTree = ""; }; + F7B9EA6D1A4D60500072F81B /* multiMedia@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "multiMedia@2x.png"; sourceTree = ""; }; + F7B9EA6E1A4D60500072F81B /* multiMedia_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "multiMedia_HL@2x.png"; sourceTree = ""; }; + F7B9EA711A4D60500072F81B /* placeholderImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "placeholderImage@2x.png"; sourceTree = ""; }; + F7B9EA721A4D60500072F81B /* ReceiverVoiceNodePlaying000@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying000@2x.png"; sourceTree = ""; }; + F7B9EA731A4D60500072F81B /* ReceiverVoiceNodePlaying001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying001@2x.png"; sourceTree = ""; }; + F7B9EA741A4D60500072F81B /* ReceiverVoiceNodePlaying002@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying002@2x.png"; sourceTree = ""; }; + F7B9EA751A4D60500072F81B /* ReceiverVoiceNodePlaying003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying003@2x.png"; sourceTree = ""; }; + F7B9EA761A4D60500072F81B /* ReceiverVoiceNodePlaying@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying@2x.png"; sourceTree = ""; }; + F7B9EA771A4D60500072F81B /* RecordCancel@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordCancel@2x.png"; sourceTree = ""; }; + F7B9EA781A4D60500072F81B /* RecordingBkg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingBkg@2x.png"; sourceTree = ""; }; + F7B9EA791A4D60500072F81B /* RecordingSignal001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal001@2x.png"; sourceTree = ""; }; + F7B9EA7A1A4D60500072F81B /* RecordingSignal002@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal002@2x.png"; sourceTree = ""; }; + F7B9EA7B1A4D60500072F81B /* RecordingSignal003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal003@2x.png"; sourceTree = ""; }; + F7B9EA7C1A4D60500072F81B /* RecordingSignal004@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal004@2x.png"; sourceTree = ""; }; + F7B9EA7D1A4D60500072F81B /* RecordingSignal005@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal005@2x.png"; sourceTree = ""; }; + F7B9EA7E1A4D60500072F81B /* RecordingSignal006@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal006@2x.png"; sourceTree = ""; }; + F7B9EA7F1A4D60500072F81B /* RecordingSignal007@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal007@2x.png"; sourceTree = ""; }; + F7B9EA801A4D60500072F81B /* RecordingSignal008@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal008@2x.png"; sourceTree = ""; }; + F7B9EA821A4D60500072F81B /* SECoreTextView.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = SECoreTextView.bundle; sourceTree = ""; }; + F7B9EA931A4D60500072F81B /* SenderVoiceNodePlaying000@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying000@2x.png"; sourceTree = ""; }; + F7B9EA941A4D60500072F81B /* SenderVoiceNodePlaying001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying001@2x.png"; sourceTree = ""; }; + F7B9EA951A4D60500072F81B /* SenderVoiceNodePlaying002@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying002@2x.png"; sourceTree = ""; }; + F7B9EA961A4D60500072F81B /* SenderVoiceNodePlaying003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying003@2x.png"; sourceTree = ""; }; + F7B9EA971A4D60500072F81B /* SenderVoiceNodePlaying@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying@2x.png"; sourceTree = ""; }; + F7B9EAA21A4D60500072F81B /* voice@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "voice@2x.png"; sourceTree = ""; }; + F7B9EAA31A4D60500072F81B /* voice_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "voice_HL@2x.png"; sourceTree = ""; }; + F7B9EAA41A4D60500072F81B /* VoiceBtn_Black@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceBtn_Black@2x.png"; sourceTree = ""; }; + F7B9EAA51A4D60500072F81B /* VoiceBtn_BlackHL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceBtn_BlackHL@2x.png"; sourceTree = ""; }; + F7B9EAA71A4D60500072F81B /* weChatBubble_Receiving_Solid@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weChatBubble_Receiving_Solid@2x.png"; sourceTree = ""; }; + F7B9EAA91A4D60500072F81B /* weChatBubble_Sending_Solid@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weChatBubble_Sending_Solid@2x.png"; sourceTree = ""; }; + F7D249E91A4D072F0015764B /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; + F7D249EA1A4D072F0015764B /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; + F7E398DF1A4D437B003AB670 /* MessageDisplayKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = MessageDisplayKit.framework; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -506,10 +264,10 @@ buildActionMask = 2147483647; files = ( AB5C7E461937FE7000FA7D5B /* CoreGraphics.framework in Frameworks */, + F7220AE61A52694000DBDEE7 /* MessageDisplayKit.framework in Frameworks */, AB5C7E4A1937FE7000FA7D5B /* CoreData.framework in Frameworks */, AB5C7E481937FE7000FA7D5B /* UIKit.framework in Frameworks */, AB5C7E441937FE7000FA7D5B /* Foundation.framework in Frameworks */, - AB5C7E831937FF9300FA7D5B /* MessageDisplayFramework.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -561,10 +319,12 @@ AB5C7E4B1937FE7000FA7D5B /* MessageDisplayKitCoreDataExample */ = { isa = PBXGroup; children = ( - AB5C7E811937FF8800FA7D5B /* Vendor */, + F7E398DE1A4D437B003AB670 /* Vendor */, AB5C7E541937FE7000FA7D5B /* AppDelegate.h */, AB5C7E551937FE7000FA7D5B /* AppDelegate.m */, AB5C7E571937FE7000FA7D5B /* Main.storyboard */, + F7D249E91A4D072F0015764B /* ViewController.h */, + F7D249EA1A4D072F0015764B /* ViewController.m */, AB5C7F111937FFCC00FA7D5B /* XHDemoWeChatMessageTableViewController.h */, AB5C7F121937FFCC00FA7D5B /* XHDemoWeChatMessageTableViewController.m */, AB5C7E631937FE7000FA7D5B /* Images.xcassets */, @@ -579,7 +339,35 @@ AB5C7E4C1937FE7000FA7D5B /* Supporting Files */ = { isa = PBXGroup; children = ( - AB5C7F141938017700FA7D5B /* ExampleResources */, + E4EE9A781B97610A00866998 /* emoticons */, + E4EE9A8A1B97610A00866998 /* SearchIcon@2x.png */, + E4EE9A8B1B97610A00866998 /* section0_emotion0@2x.png */, + E4EE9A8C1B97610A00866998 /* section0_emotion1@2x.png */, + E4EE9A8D1B97610A00866998 /* section0_emotion2@2x.png */, + E4EE9A8E1B97610A00866998 /* section0_emotion3@2x.png */, + E4EE9A8F1B97610A00866998 /* section0_emotion4@2x.png */, + E4EE9A901B97610A00866998 /* section0_emotion5@2x.png */, + E4EE9A911B97610A00866998 /* section0_emotion6@2x.png */, + E4EE9A921B97610A00866998 /* section0_emotion7@2x.png */, + E4EE9A931B97610A00866998 /* section0_emotion8@2x.png */, + E4EE9A941B97610A00866998 /* section0_emotion9@2x.png */, + E4EE9A951B97610A00866998 /* section0_emotion10@2x.png */, + E4EE9A961B97610A00866998 /* section0_emotion11@2x.png */, + E4EE9A971B97610A00866998 /* section0_emotion12@2x.png */, + E4EE9A981B97610A00866998 /* section0_emotion13@2x.png */, + E4EE9A991B97610A00866998 /* section0_emotion14@2x.png */, + E4EE9A9A1B97610A00866998 /* section0_emotion15@2x.png */, + E4EE9A9B1B97610A00866998 /* sharemore_friendcard@2x.png */, + E4EE9A9C1B97610A00866998 /* sharemore_location@2x.png */, + E4EE9A9D1B97610A00866998 /* sharemore_myfav@2x.png */, + E4EE9A9E1B97610A00866998 /* sharemore_openapi@2x.png */, + E4EE9A9F1B97610A00866998 /* sharemore_pic@2x.png */, + E4EE9AA01B97610A00866998 /* sharemore_video@2x.png */, + E4EE9AA11B97610A00866998 /* sharemore_videovoip@2x.png */, + E4EE9AA21B97610A00866998 /* sharemore_voiceinput@2x.png */, + E4EE9AA31B97610A00866998 /* sharemore_voipvoice@2x.png */, + E4EE9AA41B97610A00866998 /* sharemore_wxtalk@2x.png */, + E4EE9AA51B97610A00866998 /* TableViewBackgroundImage@2x.png */, AB5C7E4D1937FE7000FA7D5B /* MessageDisplayKitCoreDataExample-Info.plist */, AB5C7E4E1937FE7000FA7D5B /* InfoPlist.strings */, AB5C7E511937FE7000FA7D5B /* main.m */, @@ -606,334 +394,87 @@ name = "Supporting Files"; sourceTree = ""; }; - AB5C7E811937FF8800FA7D5B /* Vendor */ = { + E4EE9A781B97610A00866998 /* emoticons */ = { isa = PBXGroup; children = ( - AB5C7E841937FF9B00FA7D5B /* Resources */, - AB5C7E821937FF9300FA7D5B /* MessageDisplayFramework.framework */, - ); - name = Vendor; + E4EE9A791B97610A00866998 /* emotion0.gif */, + E4EE9A7A1B97610A00866998 /* emotion1.gif */, + E4EE9A7B1B97610A00866998 /* emotion10.gif */, + E4EE9A7C1B97610A00866998 /* emotion11.gif */, + E4EE9A7D1B97610A00866998 /* emotion12.gif */, + E4EE9A7E1B97610A00866998 /* emotion13.gif */, + E4EE9A7F1B97610A00866998 /* emotion14.gif */, + E4EE9A801B97610A00866998 /* emotion15.gif */, + E4EE9A811B97610A00866998 /* emotion16.gif */, + E4EE9A821B97610A00866998 /* emotion2.gif */, + E4EE9A831B97610A00866998 /* emotion3.gif */, + E4EE9A841B97610A00866998 /* emotion4.gif */, + E4EE9A851B97610A00866998 /* emotion5.gif */, + E4EE9A861B97610A00866998 /* emotion6.gif */, + E4EE9A871B97610A00866998 /* emotion7.gif */, + E4EE9A881B97610A00866998 /* emotion8.gif */, + E4EE9A891B97610A00866998 /* emotion9.gif */, + ); + path = emoticons; sourceTree = ""; }; - AB5C7E841937FF9B00FA7D5B /* Resources */ = { + F7B9EAAA1A4D60500072F81B /* Resources */ = { isa = PBXGroup; children = ( - AB5C7E851937FF9B00FA7D5B /* MessageDisplayKitString.strings */, - AB5C7E871937FF9B00FA7D5B /* face@2x.png */, - AB5C7E881937FF9B00FA7D5B /* face_HL@2x.png */, - AB5C7E891937FF9B00FA7D5B /* Fav_Cell_Loc@2x.png */, - AB5C7E8A1937FF9B00FA7D5B /* input-bar-background.png */, - AB5C7E8B1937FF9B00FA7D5B /* input-bar-background@2x.png */, - AB5C7E8C1937FF9B00FA7D5B /* input-bar-flat.png */, - AB5C7E8D1937FF9B00FA7D5B /* input-bar-flat@2x.png */, - AB5C7E8E1937FF9B00FA7D5B /* input-field-cover.png */, - AB5C7E8F1937FF9B00FA7D5B /* input-field-cover@2x.png */, - AB5C7E901937FF9B00FA7D5B /* keyborad@2x.png */, - AB5C7E911937FF9B00FA7D5B /* keyborad_HL@2x.png */, - AB5C7E921937FF9B00FA7D5B /* MessageVideoPlay@2x.png */, - AB5C7E931937FF9B00FA7D5B /* multiMedia@2x.png */, - AB5C7E941937FF9B00FA7D5B /* multiMedia_HL@2x.png */, - AB5C7E951937FF9B00FA7D5B /* ReceiverVoiceNodePlaying000@2x.png */, - AB5C7E961937FF9B00FA7D5B /* ReceiverVoiceNodePlaying001@2x.png */, - AB5C7E971937FF9B00FA7D5B /* ReceiverVoiceNodePlaying002@2x.png */, - AB5C7E981937FF9B00FA7D5B /* ReceiverVoiceNodePlaying003@2x.png */, - AB5C7E991937FF9B00FA7D5B /* ReceiverVoiceNodePlaying@2x.png */, - AB5C7E9A1937FF9B00FA7D5B /* RecordCancel@2x.png */, - AB5C7E9B1937FF9B00FA7D5B /* RecordingBkg@2x.png */, - AB5C7E9C1937FF9B00FA7D5B /* RecordingSignal001@2x.png */, - AB5C7E9D1937FF9B00FA7D5B /* RecordingSignal002@2x.png */, - AB5C7E9E1937FF9B00FA7D5B /* RecordingSignal003@2x.png */, - AB5C7E9F1937FF9B00FA7D5B /* RecordingSignal004@2x.png */, - AB5C7EA01937FF9B00FA7D5B /* RecordingSignal005@2x.png */, - AB5C7EA11937FF9B00FA7D5B /* RecordingSignal006@2x.png */, - AB5C7EA21937FF9B00FA7D5B /* RecordingSignal007@2x.png */, - AB5C7EA31937FF9B00FA7D5B /* RecordingSignal008@2x.png */, - AB5C7EA41937FF9B00FA7D5B /* section0_emotion0@2x.png */, - AB5C7EA51937FF9B00FA7D5B /* section0_emotion10@2x.png */, - AB5C7EA61937FF9B00FA7D5B /* section0_emotion11@2x.png */, - AB5C7EA71937FF9B00FA7D5B /* section0_emotion12@2x.png */, - AB5C7EA81937FF9B00FA7D5B /* section0_emotion13@2x.png */, - AB5C7EA91937FF9B00FA7D5B /* section0_emotion14@2x.png */, - AB5C7EAA1937FF9B00FA7D5B /* section0_emotion15@2x.png */, - AB5C7EAB1937FF9B00FA7D5B /* section0_emotion1@2x.png */, - AB5C7EAC1937FF9B00FA7D5B /* section0_emotion2@2x.png */, - AB5C7EAD1937FF9B00FA7D5B /* section0_emotion3@2x.png */, - AB5C7EAE1937FF9B00FA7D5B /* section0_emotion4@2x.png */, - AB5C7EAF1937FF9B00FA7D5B /* section0_emotion5@2x.png */, - AB5C7EB01937FF9B00FA7D5B /* section0_emotion6@2x.png */, - AB5C7EB11937FF9B00FA7D5B /* section0_emotion7@2x.png */, - AB5C7EB21937FF9B00FA7D5B /* section0_emotion8@2x.png */, - AB5C7EB31937FF9B00FA7D5B /* section0_emotion9@2x.png */, - AB5C7EB41937FF9B00FA7D5B /* SenderVoiceNodePlaying000@2x.png */, - AB5C7EB51937FF9B00FA7D5B /* SenderVoiceNodePlaying001@2x.png */, - AB5C7EB61937FF9B00FA7D5B /* SenderVoiceNodePlaying002@2x.png */, - AB5C7EB71937FF9B00FA7D5B /* SenderVoiceNodePlaying003@2x.png */, - AB5C7EB81937FF9B00FA7D5B /* SenderVoiceNodePlaying@2x.png */, - AB5C7EB91937FF9B00FA7D5B /* sharemore_friendcard@2x.png */, - AB5C7EBA1937FF9B00FA7D5B /* sharemore_location@2x.png */, - AB5C7EBB1937FF9B00FA7D5B /* sharemore_myfav@2x.png */, - AB5C7EBC1937FF9B00FA7D5B /* sharemore_openapi@2x.png */, - AB5C7EBD1937FF9B00FA7D5B /* sharemore_pic@2x.png */, - AB5C7EBE1937FF9B00FA7D5B /* sharemore_video@2x.png */, - AB5C7EBF1937FF9B00FA7D5B /* sharemore_videovoip@2x.png */, - AB5C7EC01937FF9B00FA7D5B /* sharemore_voiceinput@2x.png */, - AB5C7EC11937FF9B00FA7D5B /* sharemore_voipvoice@2x.png */, - AB5C7EC21937FF9B00FA7D5B /* sharemore_wxtalk@2x.png */, - AB5C7EC31937FF9B00FA7D5B /* voice@2x.png */, - AB5C7EC41937FF9B00FA7D5B /* voice_HL@2x.png */, - AB5C7EC51937FF9B00FA7D5B /* VoiceBtn_Black@2x.png */, - AB5C7EC61937FF9B00FA7D5B /* VoiceBtn_BlackHL@2x.png */, - AB5C7EC71937FF9B00FA7D5B /* weChatBubble_Receiving_Cavern@2x.png */, - AB5C7EC81937FF9B00FA7D5B /* weChatBubble_Receiving_Solid@2x.png */, - AB5C7EC91937FF9B00FA7D5B /* weChatBubble_Sending_Cavern@2x.png */, - AB5C7ECA1937FF9B00FA7D5B /* weChatBubble_Sending_Solid@2x.png */, + F7B9EA501A4D60500072F81B /* avator@2x.png */, + F7B9EA5D1A4D60500072F81B /* MessageDisplayKitString.strings */, + F7B9EA5E1A4D60500072F81B /* face@2x.png */, + F7B9EA5F1A4D60500072F81B /* face_HL@2x.png */, + 7053E7171B42F03500DE808D /* keyboard_HL@2x.png */, + 7053E7181B42F03500DE808D /* keyboard@2x.png */, + F7B9EA601A4D60500072F81B /* Fav_Cell_Loc@2x.png */, + F7B9EA631A4D60500072F81B /* input-bar-flat.png */, + F7B9EA641A4D60500072F81B /* input-bar-flat@2x.png */, + F7B9EA691A4D60500072F81B /* MessageVideoPlay@2x.png */, + F7B9EA6B1A4D60500072F81B /* msg_chat_voice_unread.png */, + F7B9EA6C1A4D60500072F81B /* msg_chat_voice_unread@2x.png */, + F7B9EA6D1A4D60500072F81B /* multiMedia@2x.png */, + F7B9EA6E1A4D60500072F81B /* multiMedia_HL@2x.png */, + F7B9EA711A4D60500072F81B /* placeholderImage@2x.png */, + F7B9EA721A4D60500072F81B /* ReceiverVoiceNodePlaying000@2x.png */, + F7B9EA731A4D60500072F81B /* ReceiverVoiceNodePlaying001@2x.png */, + F7B9EA741A4D60500072F81B /* ReceiverVoiceNodePlaying002@2x.png */, + F7B9EA751A4D60500072F81B /* ReceiverVoiceNodePlaying003@2x.png */, + F7B9EA761A4D60500072F81B /* ReceiverVoiceNodePlaying@2x.png */, + F7B9EA771A4D60500072F81B /* RecordCancel@2x.png */, + F7B9EA781A4D60500072F81B /* RecordingBkg@2x.png */, + F7B9EA791A4D60500072F81B /* RecordingSignal001@2x.png */, + F7B9EA7A1A4D60500072F81B /* RecordingSignal002@2x.png */, + F7B9EA7B1A4D60500072F81B /* RecordingSignal003@2x.png */, + F7B9EA7C1A4D60500072F81B /* RecordingSignal004@2x.png */, + F7B9EA7D1A4D60500072F81B /* RecordingSignal005@2x.png */, + F7B9EA7E1A4D60500072F81B /* RecordingSignal006@2x.png */, + F7B9EA7F1A4D60500072F81B /* RecordingSignal007@2x.png */, + F7B9EA801A4D60500072F81B /* RecordingSignal008@2x.png */, + F7B9EA821A4D60500072F81B /* SECoreTextView.bundle */, + F7B9EA931A4D60500072F81B /* SenderVoiceNodePlaying000@2x.png */, + F7B9EA941A4D60500072F81B /* SenderVoiceNodePlaying001@2x.png */, + F7B9EA951A4D60500072F81B /* SenderVoiceNodePlaying002@2x.png */, + F7B9EA961A4D60500072F81B /* SenderVoiceNodePlaying003@2x.png */, + F7B9EA971A4D60500072F81B /* SenderVoiceNodePlaying@2x.png */, + F7B9EAA21A4D60500072F81B /* voice@2x.png */, + F7B9EAA31A4D60500072F81B /* voice_HL@2x.png */, + F7B9EAA41A4D60500072F81B /* VoiceBtn_Black@2x.png */, + F7B9EAA51A4D60500072F81B /* VoiceBtn_BlackHL@2x.png */, + F7B9EAA71A4D60500072F81B /* weChatBubble_Receiving_Solid@2x.png */, + F7B9EAA91A4D60500072F81B /* weChatBubble_Sending_Solid@2x.png */, ); name = Resources; - path = ../../../MessageDisplayKit/Resources; - sourceTree = ""; - }; - AB5C7F141938017700FA7D5B /* ExampleResources */ = { - isa = PBXGroup; - children = ( - AB5C7F151938017700FA7D5B /* avator@2x.png */, - AB5C7F161938017700FA7D5B /* ContactImages */, - AB5C7F601938017700FA7D5B /* DisconverImages */, - AB5C7F9A1938017700FA7D5B /* EmotionImages */, - AB5C7FA41938017700FA7D5B /* IMG_1555.MOV */, - AB5C7FA51938017700FA7D5B /* MeIcon@2x.png */, - AB5C7FA61938017700FA7D5B /* NewsTemplateImages */, - AB5C7FA81938017700FA7D5B /* placeholderImage@2x.png */, - AB5C7FA91938017700FA7D5B /* ProfileImages */, - AB5C7FAF1938017700FA7D5B /* TabbarImages */, - AB5C7FB51938017700FA7D5B /* TableViewBackgroundImage@2x.png */, - ); - name = ExampleResources; - path = ../../MessageDisplayExample/MessageDisplayExample/ExampleResources; - sourceTree = ""; - }; - AB5C7F161938017700FA7D5B /* ContactImages */ = { - isa = PBXGroup; - children = ( - AB5C7F171938017700FA7D5B /* Contact_Female@2x.png */, - AB5C7F181938017700FA7D5B /* Contact_Male@2x.png */, - AB5C7F191938017700FA7D5B /* VoiceImages */, - ); - path = ContactImages; - sourceTree = ""; - }; - AB5C7F191938017700FA7D5B /* VoiceImages */ = { - isa = PBXGroup; - children = ( - AB5C7F1A1938017700FA7D5B /* VoiceSearchBtn@2x.png */, - AB5C7F1B1938017700FA7D5B /* VoiceSearchBtn_ios7@2x.png */, - AB5C7F1C1938017700FA7D5B /* VoiceSearchBtnHL@2x.png */, - AB5C7F1D1938017700FA7D5B /* VoiceSearchBtnHL_ios7@2x.png */, - AB5C7F1E1938017700FA7D5B /* VoiceSearchFeedback003@2x.png */, - AB5C7F1F1938017700FA7D5B /* VoiceSearchFeedback003_ios7@2x.png */, - AB5C7F201938017700FA7D5B /* VoiceSearchFeedback004@2x.png */, - AB5C7F211938017700FA7D5B /* VoiceSearchFeedback004_ios7@2x.png */, - AB5C7F221938017700FA7D5B /* VoiceSearchFeedback005@2x.png */, - AB5C7F231938017700FA7D5B /* VoiceSearchFeedback005_ios7@2x.png */, - AB5C7F241938017700FA7D5B /* VoiceSearchFeedback006@2x.png */, - AB5C7F251938017700FA7D5B /* VoiceSearchFeedback006_ios7@2x.png */, - AB5C7F261938017700FA7D5B /* VoiceSearchFeedback007@2x.png */, - AB5C7F271938017700FA7D5B /* VoiceSearchFeedback007_ios7@2x.png */, - AB5C7F281938017700FA7D5B /* VoiceSearchFeedback008@2x.png */, - AB5C7F291938017700FA7D5B /* VoiceSearchFeedback008_ios7@2x.png */, - AB5C7F2A1938017700FA7D5B /* VoiceSearchFeedback009@2x.png */, - AB5C7F2B1938017700FA7D5B /* VoiceSearchFeedback009_ios7@2x.png */, - AB5C7F2C1938017700FA7D5B /* VoiceSearchFeedback010@2x.png */, - AB5C7F2D1938017700FA7D5B /* VoiceSearchFeedback010_ios7@2x.png */, - AB5C7F2E1938017700FA7D5B /* VoiceSearchFeedback011@2x.png */, - AB5C7F2F1938017700FA7D5B /* VoiceSearchFeedback011_ios7@2x.png */, - AB5C7F301938017700FA7D5B /* VoiceSearchFeedback012@2x.png */, - AB5C7F311938017700FA7D5B /* VoiceSearchFeedback012_ios7@2x.png */, - AB5C7F321938017700FA7D5B /* VoiceSearchFeedback013@2x.png */, - AB5C7F331938017700FA7D5B /* VoiceSearchFeedback013_ios7@2x.png */, - AB5C7F341938017700FA7D5B /* VoiceSearchFeedback014@2x.png */, - AB5C7F351938017700FA7D5B /* VoiceSearchFeedback014_ios7@2x.png */, - AB5C7F361938017700FA7D5B /* VoiceSearchFeedback015@2x.png */, - AB5C7F371938017700FA7D5B /* VoiceSearchFeedback015_ios7@2x.png */, - AB5C7F381938017700FA7D5B /* VoiceSearchFeedback016@2x.png */, - AB5C7F391938017700FA7D5B /* VoiceSearchFeedback016_ios7@2x.png */, - AB5C7F3A1938017700FA7D5B /* VoiceSearchFeedback017@2x.png */, - AB5C7F3B1938017700FA7D5B /* VoiceSearchFeedback017_ios7@2x.png */, - AB5C7F3C1938017700FA7D5B /* VoiceSearchFeedback018@2x.png */, - AB5C7F3D1938017700FA7D5B /* VoiceSearchFeedback018_ios7@2x.png */, - AB5C7F3E1938017700FA7D5B /* VoiceSearchFeedback019@2x.png */, - AB5C7F3F1938017700FA7D5B /* VoiceSearchFeedback019_ios7@2x.png */, - AB5C7F401938017700FA7D5B /* VoiceSearchFeedback020@2x.png */, - AB5C7F411938017700FA7D5B /* VoiceSearchFeedback020_ios7@2x.png */, - AB5C7F421938017700FA7D5B /* VoiceSearchIcon@2x.png */, - AB5C7F431938017700FA7D5B /* VoiceSearchIcon_ios7@2x.png */, - AB5C7F441938017700FA7D5B /* VoiceSearchIconHL@2x.png */, - AB5C7F451938017700FA7D5B /* VoiceSearchIconHL_ios7@2x.png */, - AB5C7F461938017700FA7D5B /* VoiceSearchLoading001@2x.png */, - AB5C7F471938017700FA7D5B /* VoiceSearchLoading001_ios7@2x.png */, - AB5C7F481938017700FA7D5B /* VoiceSearchLoading002@2x.png */, - AB5C7F491938017700FA7D5B /* VoiceSearchLoading002_ios7@2x.png */, - AB5C7F4A1938017700FA7D5B /* VoiceSearchLoading003@2x.png */, - AB5C7F4B1938017700FA7D5B /* VoiceSearchLoading003_ios7@2x.png */, - AB5C7F4C1938017700FA7D5B /* VoiceSearchLoading004@2x.png */, - AB5C7F4D1938017700FA7D5B /* VoiceSearchLoading004_ios7@2x.png */, - AB5C7F4E1938017700FA7D5B /* VoiceSearchLoading005@2x.png */, - AB5C7F4F1938017700FA7D5B /* VoiceSearchLoading005_ios7@2x.png */, - AB5C7F501938017700FA7D5B /* VoiceSearchLoading006@2x.png */, - AB5C7F511938017700FA7D5B /* VoiceSearchLoading006_ios7@2x.png */, - AB5C7F521938017700FA7D5B /* VoiceSearchLoading007@2x.png */, - AB5C7F531938017700FA7D5B /* VoiceSearchLoading007_ios7@2x.png */, - AB5C7F541938017700FA7D5B /* VoiceSearchLoading008@2x.png */, - AB5C7F551938017700FA7D5B /* VoiceSearchLoading008_ios7@2x.png */, - AB5C7F561938017700FA7D5B /* VoiceSearchLoading009@2x.png */, - AB5C7F571938017700FA7D5B /* VoiceSearchLoading009_ios7@2x.png */, - AB5C7F581938017700FA7D5B /* VoiceSearchLoading010@2x.png */, - AB5C7F591938017700FA7D5B /* VoiceSearchLoading010_ios7@2x.png */, - AB5C7F5A1938017700FA7D5B /* VoiceSearchOff.wav */, - AB5C7F5B1938017700FA7D5B /* VoiceSearchOn.wav */, - AB5C7F5C1938017700FA7D5B /* VoiceSearchStartBtn@2x.png */, - AB5C7F5D1938017700FA7D5B /* VoiceSearchStartBtnHL@2x.png */, - ); - path = VoiceImages; - sourceTree = ""; - }; - AB5C7F601938017700FA7D5B /* DisconverImages */ = { - isa = PBXGroup; - children = ( - AB5C7F611938017700FA7D5B /* AlbumImages */, - AB5C7F691938017700FA7D5B /* barbuttonicon_more@2x.png */, - AB5C7F6A1938017700FA7D5B /* barbuttonicon_set@2x.png */, - AB5C7F6B1938017700FA7D5B /* BottleImages */, - AB5C7F791938017700FA7D5B /* ff_IconBottle@2x.png */, - AB5C7F7A1938017700FA7D5B /* ff_IconLocationService@2x.png */, - AB5C7F7B1938017700FA7D5B /* ff_IconQRCode@2x.png */, - AB5C7F7C1938017700FA7D5B /* ff_IconShake@2x.png */, - AB5C7F7D1938017700FA7D5B /* ff_IconShowAlbum@2x.png */, - AB5C7F7E1938017700FA7D5B /* MoreGame@2x.png */, - AB5C7F7F1938017700FA7D5B /* ScanningImages */, - AB5C7F8C1938017700FA7D5B /* ShakeImages */, - ); - path = DisconverImages; - sourceTree = ""; - }; - AB5C7F611938017700FA7D5B /* AlbumImages */ = { - isa = PBXGroup; - children = ( - AB5C7F621938017700FA7D5B /* album_add_photo@2x.png */, - AB5C7F631938017700FA7D5B /* AlbumFlagMark@2x.png */, - AB5C7F641938017700FA7D5B /* AlbumHeaderBackgrounImage@2x.png */, - AB5C7F651938017700FA7D5B /* AlbumOperateMore@2x.png */, - AB5C7F661938017700FA7D5B /* AlbumOperateMoreHL@2x.png */, - AB5C7F671938017700FA7D5B /* circle@2x.png */, - AB5C7F681938017700FA7D5B /* pullrefresh.aif */, - ); - path = AlbumImages; + path = ../../../../MessageDisplayKit/Resources; sourceTree = ""; }; - AB5C7F6B1938017700FA7D5B /* BottleImages */ = { + F7E398DE1A4D437B003AB670 /* Vendor */ = { isa = PBXGroup; children = ( - AB5C7F6C1938017700FA7D5B /* bottleBkg@2x.png */, - AB5C7F6D1938017700FA7D5B /* bottleBkgSpotLight@2x.png */, - AB5C7F6E1938017700FA7D5B /* bottleBoard@2x.png */, - AB5C7F6F1938017700FA7D5B /* bottleButtonFish@2x.png */, - AB5C7F701938017700FA7D5B /* bottleButtonMine@2x.png */, - AB5C7F711938017700FA7D5B /* bottleButtonThrow@2x.png */, - AB5C7F721938017700FA7D5B /* bottleNightBkg@2x.png */, - AB5C7F731938017700FA7D5B /* bottleRecord@2x.png */, - AB5C7F741938017700FA7D5B /* bottleStarfish@2x.png */, - AB5C7F751938017700FA7D5B /* bottleWriting@2x.png */, - AB5C7F761938017700FA7D5B /* fishwater2@2x.png */, - AB5C7F771938017700FA7D5B /* fishwater3@2x.png */, - AB5C7F781938017700FA7D5B /* fishwater@2x.png */, + F7E398DF1A4D437B003AB670 /* MessageDisplayKit.framework */, + F7B9EAAA1A4D60500072F81B /* Resources */, ); - path = BottleImages; - sourceTree = ""; - }; - AB5C7F7F1938017700FA7D5B /* ScanningImages */ = { - isa = PBXGroup; - children = ( - AB5C7F801938017700FA7D5B /* ScanBook@2x.png */, - AB5C7F811938017700FA7D5B /* ScanBook_HL@2x.png */, - AB5C7F821938017700FA7D5B /* ScanQR1@2x.png */, - AB5C7F831938017700FA7D5B /* ScanQR2@2x.png */, - AB5C7F841938017700FA7D5B /* ScanQR3@2x.png */, - AB5C7F851938017700FA7D5B /* ScanQR4@2x.png */, - AB5C7F861938017700FA7D5B /* ScanQRCode@2x.png */, - AB5C7F871938017700FA7D5B /* ScanQRCode_HL@2x.png */, - AB5C7F881938017700FA7D5B /* ScanStreet@2x.png */, - AB5C7F891938017700FA7D5B /* ScanStreet_HL@2x.png */, - AB5C7F8A1938017700FA7D5B /* ScanWord@2x.png */, - AB5C7F8B1938017700FA7D5B /* ScanWord_HL@2x.png */, - ); - path = ScanningImages; - sourceTree = ""; - }; - AB5C7F8C1938017700FA7D5B /* ShakeImages */ = { - isa = PBXGroup; - children = ( - AB5C7F8D1938017700FA7D5B /* Shake_icon_music@2x.png */, - AB5C7F8E1938017700FA7D5B /* Shake_icon_musicHL@2x.png */, - AB5C7F8F1938017700FA7D5B /* Shake_icon_people@2x.png */, - AB5C7F901938017700FA7D5B /* Shake_icon_peopleHL@2x.png */, - AB5C7F911938017700FA7D5B /* Shake_Line_Down@2x.png */, - AB5C7F921938017700FA7D5B /* Shake_Line_Up@2x.png */, - AB5C7F931938017700FA7D5B /* Shake_Logo_Down@2x.png */, - AB5C7F941938017700FA7D5B /* Shake_Logo_Female_Down@2x.png */, - AB5C7F951938017700FA7D5B /* Shake_Logo_Female_Up@2x.png */, - AB5C7F961938017700FA7D5B /* Shake_Logo_Up@2x.png */, - AB5C7F971938017700FA7D5B /* shake_match.wav */, - AB5C7F981938017700FA7D5B /* shake_nomatch.wav */, - AB5C7F991938017700FA7D5B /* shake_sound_male.wav */, - ); - path = ShakeImages; - sourceTree = ""; - }; - AB5C7F9A1938017700FA7D5B /* EmotionImages */ = { - isa = PBXGroup; - children = ( - AB5C7F9B1938017700FA7D5B /* EmoStoreDownloadBtn@2x.png */, - AB5C7F9C1938017700FA7D5B /* EmoStoreDownloadBtnHL@2x.png */, - AB5C7F9D1938017700FA7D5B /* EmotionDownload@2x.png */, - AB5C7F9E1938017700FA7D5B /* EmotionDownloadComplete@2x.png */, - AB5C7F9F1938017700FA7D5B /* EmotionListNewTips@2x.png */, - AB5C7FA01938017700FA7D5B /* emotionShopOne@2x.png */, - AB5C7FA11938017700FA7D5B /* emotionShopOther@2x.png */, - AB5C7FA21938017700FA7D5B /* emotionShopTwo@2x.png */, - AB5C7FA31938017700FA7D5B /* GreenBtn@2x.png */, - ); - path = EmotionImages; - sourceTree = ""; - }; - AB5C7FA61938017700FA7D5B /* NewsTemplateImages */ = { - isa = PBXGroup; - children = ( - AB5C7FA71938017700FA7D5B /* NewsBackgroundImage@2x.png */, - ); - path = NewsTemplateImages; - sourceTree = ""; - }; - AB5C7FA91938017700FA7D5B /* ProfileImages */ = { - isa = PBXGroup; - children = ( - AB5C7FAA1938017700FA7D5B /* MoreExpressionShops@2x.png */, - AB5C7FAB1938017700FA7D5B /* MoreMyAlbum@2x.png */, - AB5C7FAC1938017700FA7D5B /* MoreMyBankCard@2x.png */, - AB5C7FAD1938017700FA7D5B /* MoreMyFavorites@2x.png */, - AB5C7FAE1938017700FA7D5B /* MoreSetting@2x.png */, - ); - path = ProfileImages; - sourceTree = ""; - }; - AB5C7FAF1938017700FA7D5B /* TabbarImages */ = { - isa = PBXGroup; - children = ( - AB5C7FB01938017700FA7D5B /* Contact@2x.png */, - AB5C7FB11938017700FA7D5B /* Profile@2x.png */, - AB5C7FB21938017700FA7D5B /* SNS@2x.png */, - AB5C7FB31938017700FA7D5B /* tabbarBkg@2x.png */, - AB5C7FB41938017700FA7D5B /* WeChat@2x.png */, - ); - path = TabbarImages; + path = Vendor; sourceTree = ""; }; /* End PBXGroup section */ @@ -946,6 +487,7 @@ AB5C7E3C1937FE7000FA7D5B /* Sources */, AB5C7E3D1937FE7000FA7D5B /* Frameworks */, AB5C7E3E1937FE7000FA7D5B /* Resources */, + F7220AE81A52694100DBDEE7 /* Embed Frameworks */, ); buildRules = ( ); @@ -1013,226 +555,96 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - AB5C7FD21938017700FA7D5B /* VoiceSearchFeedback013_ios7@2x.png in Resources */, - AB5C7FF91938017700FA7D5B /* VoiceSearchOff.wav in Resources */, - AB5C7F091937FF9B00FA7D5B /* voice@2x.png in Resources */, - AB5C7FCC1938017700FA7D5B /* VoiceSearchFeedback010_ios7@2x.png in Resources */, - AB5C80331938017700FA7D5B /* shake_sound_male.wav in Resources */, - AB5C7FB71938017700FA7D5B /* Contact_Female@2x.png in Resources */, - AB5C7F0A1937FF9B00FA7D5B /* voice_HL@2x.png in Resources */, - AB5C7FFC1938017700FA7D5B /* VoiceSearchStartBtnHL@2x.png in Resources */, - AB5C80111938017700FA7D5B /* bottleWriting@2x.png in Resources */, + F7B9EAC71A4D60500072F81B /* msg_chat_voice_unread@2x.png in Resources */, + E4EE9ACA1B97610A00866998 /* sharemore_myfav@2x.png in Resources */, + F7B9EAD91A4D60500072F81B /* RecordingSignal006@2x.png in Resources */, + F7B9EAD01A4D60500072F81B /* ReceiverVoiceNodePlaying003@2x.png in Resources */, + E4EE9AB71B97610A00866998 /* SearchIcon@2x.png in Resources */, + E4EE9AC01B97610A00866998 /* section0_emotion8@2x.png in Resources */, + F7B9EAD61A4D60500072F81B /* RecordingSignal003@2x.png in Resources */, + E4EE9AC31B97610A00866998 /* section0_emotion11@2x.png in Resources */, + E4EE9ABD1B97610A00866998 /* section0_emotion5@2x.png in Resources */, AB5C7E641937FE7000FA7D5B /* Images.xcassets in Resources */, - AB5C7FD71938017700FA7D5B /* VoiceSearchFeedback016@2x.png in Resources */, - AB5C7FC61938017700FA7D5B /* VoiceSearchFeedback007_ios7@2x.png in Resources */, - AB5C7EFB1937FF9B00FA7D5B /* SenderVoiceNodePlaying001@2x.png in Resources */, - AB5C80321938017700FA7D5B /* shake_nomatch.wav in Resources */, - AB5C7FF01938017700FA7D5B /* VoiceSearchLoading006_ios7@2x.png in Resources */, - AB5C80371938017700FA7D5B /* EmotionDownloadComplete@2x.png in Resources */, - AB5C80401938017700FA7D5B /* placeholderImage@2x.png in Resources */, - AB5C80251938017700FA7D5B /* ScanWord@2x.png in Resources */, - AB5C7ED91937FF9B00FA7D5B /* multiMedia@2x.png in Resources */, - AB5C80311938017700FA7D5B /* shake_match.wav in Resources */, - AB5C7ED41937FF9B00FA7D5B /* input-field-cover.png in Resources */, - AB5C800A1938017700FA7D5B /* bottleBoard@2x.png in Resources */, - AB5C80161938017700FA7D5B /* ff_IconLocationService@2x.png in Resources */, - AB5C7FF51938017700FA7D5B /* VoiceSearchLoading009@2x.png in Resources */, - AB5C7FE71938017700FA7D5B /* VoiceSearchLoading002@2x.png in Resources */, - AB5C7EEC1937FF9B00FA7D5B /* section0_emotion11@2x.png in Resources */, - AB5C7EFD1937FF9B00FA7D5B /* SenderVoiceNodePlaying003@2x.png in Resources */, - AB5C7FDC1938017700FA7D5B /* VoiceSearchFeedback018_ios7@2x.png in Resources */, - AB5C800B1938017700FA7D5B /* bottleButtonFish@2x.png in Resources */, - AB5C7FB81938017700FA7D5B /* Contact_Male@2x.png in Resources */, - AB5C7F011937FF9B00FA7D5B /* sharemore_myfav@2x.png in Resources */, - AB5C7F051937FF9B00FA7D5B /* sharemore_videovoip@2x.png in Resources */, - AB5C80451938017700FA7D5B /* MoreSetting@2x.png in Resources */, - AB5C7FE91938017700FA7D5B /* VoiceSearchLoading003@2x.png in Resources */, - AB5C7FD61938017700FA7D5B /* VoiceSearchFeedback015_ios7@2x.png in Resources */, - AB5C7EF61937FF9B00FA7D5B /* section0_emotion6@2x.png in Resources */, - AB5C80081938017700FA7D5B /* bottleBkg@2x.png in Resources */, - AB5C800E1938017700FA7D5B /* bottleNightBkg@2x.png in Resources */, - AB5C7EDE1937FF9B00FA7D5B /* ReceiverVoiceNodePlaying003@2x.png in Resources */, - AB5C80151938017700FA7D5B /* ff_IconBottle@2x.png in Resources */, - AB5C80141938017700FA7D5B /* fishwater@2x.png in Resources */, - AB5C7EF51937FF9B00FA7D5B /* section0_emotion5@2x.png in Resources */, - AB5C803D1938017700FA7D5B /* IMG_1555.MOV in Resources */, - AB5C7EE11937FF9B00FA7D5B /* RecordingBkg@2x.png in Resources */, - AB5C801D1938017700FA7D5B /* ScanQR1@2x.png in Resources */, - AB5C7FED1938017700FA7D5B /* VoiceSearchLoading005@2x.png in Resources */, - AB5C7ED31937FF9B00FA7D5B /* input-bar-flat@2x.png in Resources */, - AB5C803C1938017700FA7D5B /* GreenBtn@2x.png in Resources */, - AB5C80441938017700FA7D5B /* MoreMyFavorites@2x.png in Resources */, - AB5C7EE31937FF9B00FA7D5B /* RecordingSignal002@2x.png in Resources */, - AB5C7FCA1938017700FA7D5B /* VoiceSearchFeedback009_ios7@2x.png in Resources */, - AB5C7FC51938017700FA7D5B /* VoiceSearchFeedback007@2x.png in Resources */, - AB5C7EFA1937FF9B00FA7D5B /* SenderVoiceNodePlaying000@2x.png in Resources */, - AB5C801E1938017700FA7D5B /* ScanQR2@2x.png in Resources */, - AB5C80291938017700FA7D5B /* Shake_icon_people@2x.png in Resources */, - AB5C7FD11938017700FA7D5B /* VoiceSearchFeedback013@2x.png in Resources */, - AB5C80041938017700FA7D5B /* circle@2x.png in Resources */, - AB5C7FD51938017700FA7D5B /* VoiceSearchFeedback015@2x.png in Resources */, - AB5C7ED61937FF9B00FA7D5B /* keyborad@2x.png in Resources */, - AB5C7FD81938017700FA7D5B /* VoiceSearchFeedback016_ios7@2x.png in Resources */, - AB5C80121938017700FA7D5B /* fishwater2@2x.png in Resources */, - AB5C7FC41938017700FA7D5B /* VoiceSearchFeedback006_ios7@2x.png in Resources */, - AB5C7EE81937FF9B00FA7D5B /* RecordingSignal007@2x.png in Resources */, - AB5C7EE61937FF9B00FA7D5B /* RecordingSignal005@2x.png in Resources */, - AB5C7FE61938017700FA7D5B /* VoiceSearchLoading001_ios7@2x.png in Resources */, - AB5C7FF71938017700FA7D5B /* VoiceSearchLoading010@2x.png in Resources */, - AB5C800D1938017700FA7D5B /* bottleButtonThrow@2x.png in Resources */, - AB5C800C1938017700FA7D5B /* bottleButtonMine@2x.png in Resources */, - AB5C803B1938017700FA7D5B /* emotionShopTwo@2x.png in Resources */, - AB5C7FB61938017700FA7D5B /* avator@2x.png in Resources */, - AB5C80091938017700FA7D5B /* bottleBkgSpotLight@2x.png in Resources */, - AB5C80391938017700FA7D5B /* emotionShopOne@2x.png in Resources */, - AB5C7FF21938017700FA7D5B /* VoiceSearchLoading007_ios7@2x.png in Resources */, - AB5C80481938017700FA7D5B /* SNS@2x.png in Resources */, - AB5C7FE41938017700FA7D5B /* VoiceSearchIconHL_ios7@2x.png in Resources */, - AB5C7ECF1937FF9B00FA7D5B /* Fav_Cell_Loc@2x.png in Resources */, - AB5C7FBE1938017700FA7D5B /* VoiceSearchFeedback003_ios7@2x.png in Resources */, - AB5C7FD31938017700FA7D5B /* VoiceSearchFeedback014@2x.png in Resources */, - AB5C80411938017700FA7D5B /* MoreExpressionShops@2x.png in Resources */, - AB5C7EDB1937FF9B00FA7D5B /* ReceiverVoiceNodePlaying000@2x.png in Resources */, - AB5C80001938017700FA7D5B /* AlbumFlagMark@2x.png in Resources */, - AB5C802B1938017700FA7D5B /* Shake_Line_Down@2x.png in Resources */, - AB5C802D1938017700FA7D5B /* Shake_Logo_Down@2x.png in Resources */, - AB5C7ED01937FF9B00FA7D5B /* input-bar-background.png in Resources */, - AB5C7FD41938017700FA7D5B /* VoiceSearchFeedback014_ios7@2x.png in Resources */, - AB5C7EFE1937FF9B00FA7D5B /* SenderVoiceNodePlaying@2x.png in Resources */, - AB5C7EF71937FF9B00FA7D5B /* section0_emotion7@2x.png in Resources */, - AB5C80031938017700FA7D5B /* AlbumOperateMoreHL@2x.png in Resources */, - AB5C80351938017700FA7D5B /* EmoStoreDownloadBtnHL@2x.png in Resources */, - AB5C7FFB1938017700FA7D5B /* VoiceSearchStartBtn@2x.png in Resources */, - AB5C7FDA1938017700FA7D5B /* VoiceSearchFeedback017_ios7@2x.png in Resources */, - AB5C7EE51937FF9B00FA7D5B /* RecordingSignal004@2x.png in Resources */, - AB5C80131938017700FA7D5B /* fishwater3@2x.png in Resources */, - AB5C7EFC1937FF9B00FA7D5B /* SenderVoiceNodePlaying002@2x.png in Resources */, - AB5C7FCF1938017700FA7D5B /* VoiceSearchFeedback012@2x.png in Resources */, - AB5C7FD01938017700FA7D5B /* VoiceSearchFeedback012_ios7@2x.png in Resources */, - AB5C7EEE1937FF9B00FA7D5B /* section0_emotion13@2x.png in Resources */, - AB5C80281938017700FA7D5B /* Shake_icon_musicHL@2x.png in Resources */, - AB5C7EEA1937FF9B00FA7D5B /* section0_emotion0@2x.png in Resources */, - AB5C7FCE1938017700FA7D5B /* VoiceSearchFeedback011_ios7@2x.png in Resources */, - AB5C801F1938017700FA7D5B /* ScanQR3@2x.png in Resources */, - AB5C801C1938017700FA7D5B /* ScanBook_HL@2x.png in Resources */, - AB5C7F101937FF9B00FA7D5B /* weChatBubble_Sending_Solid@2x.png in Resources */, - AB5C7FEC1938017700FA7D5B /* VoiceSearchLoading004_ios7@2x.png in Resources */, - AB5C7FC71938017700FA7D5B /* VoiceSearchFeedback008@2x.png in Resources */, - AB5C802A1938017700FA7D5B /* Shake_icon_peopleHL@2x.png in Resources */, - AB5C80381938017700FA7D5B /* EmotionListNewTips@2x.png in Resources */, - AB5C7FDB1938017700FA7D5B /* VoiceSearchFeedback018@2x.png in Resources */, - AB5C801B1938017700FA7D5B /* ScanBook@2x.png in Resources */, - AB5C7EEF1937FF9B00FA7D5B /* section0_emotion14@2x.png in Resources */, - AB5C7FB91938017700FA7D5B /* VoiceSearchBtn@2x.png in Resources */, - AB5C7FE01938017700FA7D5B /* VoiceSearchFeedback020_ios7@2x.png in Resources */, - AB5C801A1938017700FA7D5B /* MoreGame@2x.png in Resources */, - AB5C80271938017700FA7D5B /* Shake_icon_music@2x.png in Resources */, - AB5C7F0F1937FF9B00FA7D5B /* weChatBubble_Sending_Cavern@2x.png in Resources */, - AB5C7F071937FF9B00FA7D5B /* sharemore_voipvoice@2x.png in Resources */, - AB5C7FD91938017700FA7D5B /* VoiceSearchFeedback017@2x.png in Resources */, - AB5C7ED81937FF9B00FA7D5B /* MessageVideoPlay@2x.png in Resources */, - AB5C7FFA1938017700FA7D5B /* VoiceSearchOn.wav in Resources */, - AB5C7EF01937FF9B00FA7D5B /* section0_emotion15@2x.png in Resources */, - AB5C7FC11938017700FA7D5B /* VoiceSearchFeedback005@2x.png in Resources */, - AB5C80191938017700FA7D5B /* ff_IconShowAlbum@2x.png in Resources */, - AB5C7FF81938017700FA7D5B /* VoiceSearchLoading010_ios7@2x.png in Resources */, - AB5C80011938017700FA7D5B /* AlbumHeaderBackgrounImage@2x.png in Resources */, - AB5C7EF41937FF9B00FA7D5B /* section0_emotion4@2x.png in Resources */, - AB5C80101938017700FA7D5B /* bottleStarfish@2x.png in Resources */, - AB5C7FDF1938017700FA7D5B /* VoiceSearchFeedback020@2x.png in Resources */, - AB5C80241938017700FA7D5B /* ScanStreet_HL@2x.png in Resources */, - AB5C7F0C1937FF9B00FA7D5B /* VoiceBtn_BlackHL@2x.png in Resources */, - AB5C7FC31938017700FA7D5B /* VoiceSearchFeedback006@2x.png in Resources */, - AB5C7ED71937FF9B00FA7D5B /* keyborad_HL@2x.png in Resources */, - AB5C7FBB1938017700FA7D5B /* VoiceSearchBtnHL@2x.png in Resources */, - AB5C80301938017700FA7D5B /* Shake_Logo_Up@2x.png in Resources */, - AB5C7FE21938017700FA7D5B /* VoiceSearchIcon_ios7@2x.png in Resources */, - AB5C7ED51937FF9B00FA7D5B /* input-field-cover@2x.png in Resources */, - AB5C80341938017700FA7D5B /* EmoStoreDownloadBtn@2x.png in Resources */, - AB5C80171938017700FA7D5B /* ff_IconQRCode@2x.png in Resources */, - AB5C7FF31938017700FA7D5B /* VoiceSearchLoading008@2x.png in Resources */, - AB5C7ED21937FF9B00FA7D5B /* input-bar-flat.png in Resources */, - AB5C7FDD1938017700FA7D5B /* VoiceSearchFeedback019@2x.png in Resources */, - AB5C7FE81938017700FA7D5B /* VoiceSearchLoading002_ios7@2x.png in Resources */, - AB5C80421938017700FA7D5B /* MoreMyAlbum@2x.png in Resources */, - AB5C7EFF1937FF9B00FA7D5B /* sharemore_friendcard@2x.png in Resources */, - AB5C7F021937FF9B00FA7D5B /* sharemore_openapi@2x.png in Resources */, - AB5C802F1938017700FA7D5B /* Shake_Logo_Female_Up@2x.png in Resources */, - AB5C80051938017700FA7D5B /* pullrefresh.aif in Resources */, - AB5C80071938017700FA7D5B /* barbuttonicon_set@2x.png in Resources */, - AB5C7EE01937FF9B00FA7D5B /* RecordCancel@2x.png in Resources */, - AB5C7EF81937FF9B00FA7D5B /* section0_emotion8@2x.png in Resources */, - AB5C7EE71937FF9B00FA7D5B /* RecordingSignal006@2x.png in Resources */, - AB5C80461938017700FA7D5B /* Contact@2x.png in Resources */, - AB5C7EDA1937FF9B00FA7D5B /* multiMedia_HL@2x.png in Resources */, - AB5C7EDD1937FF9B00FA7D5B /* ReceiverVoiceNodePlaying002@2x.png in Resources */, - AB5C7EF11937FF9B00FA7D5B /* section0_emotion1@2x.png in Resources */, - AB5C802E1938017700FA7D5B /* Shake_Logo_Female_Down@2x.png in Resources */, - AB5C803A1938017700FA7D5B /* emotionShopOther@2x.png in Resources */, - AB5C7FDE1938017700FA7D5B /* VoiceSearchFeedback019_ios7@2x.png in Resources */, - AB5C7ECC1937FF9B00FA7D5B /* MessageDisplayKitString.strings in Resources */, - AB5C7FE51938017700FA7D5B /* VoiceSearchLoading001@2x.png in Resources */, - AB5C80261938017700FA7D5B /* ScanWord_HL@2x.png in Resources */, - AB5C800F1938017700FA7D5B /* bottleRecord@2x.png in Resources */, - AB5C7F031937FF9B00FA7D5B /* sharemore_pic@2x.png in Resources */, - AB5C7F041937FF9B00FA7D5B /* sharemore_video@2x.png in Resources */, - AB5C80361938017700FA7D5B /* EmotionDownload@2x.png in Resources */, - AB5C7FC01938017700FA7D5B /* VoiceSearchFeedback004_ios7@2x.png in Resources */, - AB5C7EE21937FF9B00FA7D5B /* RecordingSignal001@2x.png in Resources */, - AB5C7EE41937FF9B00FA7D5B /* RecordingSignal003@2x.png in Resources */, - AB5C7F0E1937FF9B00FA7D5B /* weChatBubble_Receiving_Solid@2x.png in Resources */, - AB5C7FF11938017700FA7D5B /* VoiceSearchLoading007@2x.png in Resources */, - AB5C7F061937FF9B00FA7D5B /* sharemore_voiceinput@2x.png in Resources */, - AB5C80471938017700FA7D5B /* Profile@2x.png in Resources */, - AB5C7FF41938017700FA7D5B /* VoiceSearchLoading008_ios7@2x.png in Resources */, - AB5C7FBF1938017700FA7D5B /* VoiceSearchFeedback004@2x.png in Resources */, - AB5C80221938017700FA7D5B /* ScanQRCode_HL@2x.png in Resources */, - AB5C80231938017700FA7D5B /* ScanStreet@2x.png in Resources */, - AB5C804B1938017700FA7D5B /* TableViewBackgroundImage@2x.png in Resources */, - AB5C7F0D1937FF9B00FA7D5B /* weChatBubble_Receiving_Cavern@2x.png in Resources */, - AB5C7EED1937FF9B00FA7D5B /* section0_emotion12@2x.png in Resources */, - AB5C7FCB1938017700FA7D5B /* VoiceSearchFeedback010@2x.png in Resources */, - AB5C80201938017700FA7D5B /* ScanQR4@2x.png in Resources */, - AB5C80211938017700FA7D5B /* ScanQRCode@2x.png in Resources */, + F7B9EAD31A4D60500072F81B /* RecordingBkg@2x.png in Resources */, + F7B9EB021A4D60500072F81B /* weChatBubble_Receiving_Solid@2x.png in Resources */, + E4EE9AA61B97610A00866998 /* emotion0.gif in Resources */, + F7B9EABA1A4D60500072F81B /* face_HL@2x.png in Resources */, + E4EE9ACF1B97610A00866998 /* sharemore_voiceinput@2x.png in Resources */, + E4EE9AB31B97610A00866998 /* emotion6.gif in Resources */, + F7B9EABF1A4D60500072F81B /* input-bar-flat@2x.png in Resources */, + F7B9EACD1A4D60500072F81B /* ReceiverVoiceNodePlaying000@2x.png in Resources */, + E4EE9AC11B97610A00866998 /* section0_emotion9@2x.png in Resources */, + E4EE9ABB1B97610A00866998 /* section0_emotion3@2x.png in Resources */, + F7B9EAAD1A4D60500072F81B /* avator@2x.png in Resources */, + F7B9EADA1A4D60500072F81B /* RecordingSignal007@2x.png in Resources */, + F7B9EB041A4D60500072F81B /* weChatBubble_Sending_Solid@2x.png in Resources */, + F7B9EAD11A4D60500072F81B /* ReceiverVoiceNodePlaying@2x.png in Resources */, + F7B9EAD41A4D60500072F81B /* RecordingSignal001@2x.png in Resources */, + E4EE9AA71B97610A00866998 /* emotion1.gif in Resources */, + E4EE9AB61B97610A00866998 /* emotion9.gif in Resources */, + E4EE9AB41B97610A00866998 /* emotion7.gif in Resources */, + E4EE9AAC1B97610A00866998 /* emotion14.gif in Resources */, + F7B9EAC91A4D60500072F81B /* multiMedia_HL@2x.png in Resources */, + E4EE9ACE1B97610A00866998 /* sharemore_videovoip@2x.png in Resources */, + F7B9EAEF1A4D60500072F81B /* SenderVoiceNodePlaying001@2x.png in Resources */, + F7B9EAFD1A4D60500072F81B /* voice@2x.png in Resources */, + F7B9EADD1A4D60500072F81B /* SECoreTextView.bundle in Resources */, + F7B9EAB91A4D60500072F81B /* face@2x.png in Resources */, + F7B9EAB81A4D60500072F81B /* MessageDisplayKitString.strings in Resources */, + E4EE9AB91B97610A00866998 /* section0_emotion1@2x.png in Resources */, + F7B9EABB1A4D60500072F81B /* Fav_Cell_Loc@2x.png in Resources */, + 7053E71A1B42F03500DE808D /* keyboard@2x.png in Resources */, + F7B9EAF01A4D60500072F81B /* SenderVoiceNodePlaying002@2x.png in Resources */, + E4EE9ABA1B97610A00866998 /* section0_emotion2@2x.png in Resources */, + F7B9EACE1A4D60500072F81B /* ReceiverVoiceNodePlaying001@2x.png in Resources */, AB5C7E501937FE7000FA7D5B /* InfoPlist.strings in Resources */, - AB5C7ECE1937FF9B00FA7D5B /* face_HL@2x.png in Resources */, - AB5C7F081937FF9B00FA7D5B /* sharemore_wxtalk@2x.png in Resources */, - AB5C7ECD1937FF9B00FA7D5B /* face@2x.png in Resources */, - AB5C7FC21938017700FA7D5B /* VoiceSearchFeedback005_ios7@2x.png in Resources */, - AB5C7FC91938017700FA7D5B /* VoiceSearchFeedback009@2x.png in Resources */, - AB5C7EDF1937FF9B00FA7D5B /* ReceiverVoiceNodePlaying@2x.png in Resources */, - AB5C7FEB1938017700FA7D5B /* VoiceSearchLoading004@2x.png in Resources */, - AB5C7EEB1937FF9B00FA7D5B /* section0_emotion10@2x.png in Resources */, - AB5C7EDC1937FF9B00FA7D5B /* ReceiverVoiceNodePlaying001@2x.png in Resources */, - AB5C7FBC1938017700FA7D5B /* VoiceSearchBtnHL_ios7@2x.png in Resources */, - AB5C7FBA1938017700FA7D5B /* VoiceSearchBtn_ios7@2x.png in Resources */, - AB5C80061938017700FA7D5B /* barbuttonicon_more@2x.png in Resources */, - AB5C7FE11938017700FA7D5B /* VoiceSearchIcon@2x.png in Resources */, - AB5C7FFF1938017700FA7D5B /* album_add_photo@2x.png in Resources */, - AB5C80491938017700FA7D5B /* tabbarBkg@2x.png in Resources */, - AB5C7FEA1938017700FA7D5B /* VoiceSearchLoading003_ios7@2x.png in Resources */, - AB5C80181938017700FA7D5B /* ff_IconShake@2x.png in Resources */, - AB5C80021938017700FA7D5B /* AlbumOperateMore@2x.png in Resources */, - AB5C802C1938017700FA7D5B /* Shake_Line_Up@2x.png in Resources */, - AB5C7EF91937FF9B00FA7D5B /* section0_emotion9@2x.png in Resources */, - AB5C7F0B1937FF9B00FA7D5B /* VoiceBtn_Black@2x.png in Resources */, - AB5C7FC81938017700FA7D5B /* VoiceSearchFeedback008_ios7@2x.png in Resources */, - AB5C7EF21937FF9B00FA7D5B /* section0_emotion2@2x.png in Resources */, - AB5C7EF31937FF9B00FA7D5B /* section0_emotion3@2x.png in Resources */, - AB5C80431938017700FA7D5B /* MoreMyBankCard@2x.png in Resources */, - AB5C7F001937FF9B00FA7D5B /* sharemore_location@2x.png in Resources */, - AB5C7FE31938017700FA7D5B /* VoiceSearchIconHL@2x.png in Resources */, - AB5C7FEF1938017700FA7D5B /* VoiceSearchLoading006@2x.png in Resources */, - AB5C803F1938017700FA7D5B /* NewsBackgroundImage@2x.png in Resources */, - AB5C803E1938017700FA7D5B /* MeIcon@2x.png in Resources */, - AB5C804A1938017700FA7D5B /* WeChat@2x.png in Resources */, - AB5C7FF61938017700FA7D5B /* VoiceSearchLoading009_ios7@2x.png in Resources */, - AB5C7FEE1938017700FA7D5B /* VoiceSearchLoading005_ios7@2x.png in Resources */, + E4EE9ABC1B97610A00866998 /* section0_emotion4@2x.png in Resources */, + F7B9EAFF1A4D60500072F81B /* VoiceBtn_Black@2x.png in Resources */, + E4EE9AB21B97610A00866998 /* emotion5.gif in Resources */, + E4EE9AB51B97610A00866998 /* emotion8.gif in Resources */, + E4EE9AC41B97610A00866998 /* section0_emotion12@2x.png in Resources */, + E4EE9AD01B97610A00866998 /* sharemore_voipvoice@2x.png in Resources */, + E4EE9AB81B97610A00866998 /* section0_emotion0@2x.png in Resources */, + F7B9EAD51A4D60500072F81B /* RecordingSignal002@2x.png in Resources */, + E4EE9AC81B97610A00866998 /* sharemore_friendcard@2x.png in Resources */, + F7B9EAD81A4D60500072F81B /* RecordingSignal005@2x.png in Resources */, + E4EE9AC21B97610A00866998 /* section0_emotion10@2x.png in Resources */, + F7B9EAC61A4D60500072F81B /* msg_chat_voice_unread.png in Resources */, + E4EE9AAE1B97610A00866998 /* emotion16.gif in Resources */, + E4EE9AA91B97610A00866998 /* emotion11.gif in Resources */, + F7B9EAC81A4D60500072F81B /* multiMedia@2x.png in Resources */, + E4EE9ABE1B97610A00866998 /* section0_emotion6@2x.png in Resources */, + E4EE9ABF1B97610A00866998 /* section0_emotion7@2x.png in Resources */, + F7B9EAC41A4D60500072F81B /* MessageVideoPlay@2x.png in Resources */, + E4EE9AC61B97610A00866998 /* section0_emotion14@2x.png in Resources */, + F7B9EB001A4D60500072F81B /* VoiceBtn_BlackHL@2x.png in Resources */, + E4EE9AB01B97610A00866998 /* emotion3.gif in Resources */, + E4EE9AC51B97610A00866998 /* section0_emotion13@2x.png in Resources */, + E4EE9AD11B97610A00866998 /* sharemore_wxtalk@2x.png in Resources */, + E4EE9AB11B97610A00866998 /* emotion4.gif in Resources */, + E4EE9ACD1B97610A00866998 /* sharemore_video@2x.png in Resources */, + F7B9EAF11A4D60500072F81B /* SenderVoiceNodePlaying003@2x.png in Resources */, + E4EE9AC71B97610A00866998 /* section0_emotion15@2x.png in Resources */, + E4EE9AAA1B97610A00866998 /* emotion12.gif in Resources */, + E4EE9ACB1B97610A00866998 /* sharemore_openapi@2x.png in Resources */, + F7B9EACC1A4D60500072F81B /* placeholderImage@2x.png in Resources */, + E4EE9AC91B97610A00866998 /* sharemore_location@2x.png in Resources */, + F7B9EAFE1A4D60500072F81B /* voice_HL@2x.png in Resources */, + E4EE9ACC1B97610A00866998 /* sharemore_pic@2x.png in Resources */, + F7B9EACF1A4D60500072F81B /* ReceiverVoiceNodePlaying002@2x.png in Resources */, + E4EE9AAF1B97610A00866998 /* emotion2.gif in Resources */, + F7B9EABE1A4D60500072F81B /* input-bar-flat.png in Resources */, + F7B9EADB1A4D60500072F81B /* RecordingSignal008@2x.png in Resources */, + E4EE9AD21B97610A00866998 /* TableViewBackgroundImage@2x.png in Resources */, + F7B9EAD71A4D60500072F81B /* RecordingSignal004@2x.png in Resources */, + F7B9EAD21A4D60500072F81B /* RecordCancel@2x.png in Resources */, + E4EE9AAB1B97610A00866998 /* emotion13.gif in Resources */, + F7B9EAEE1A4D60500072F81B /* SenderVoiceNodePlaying000@2x.png in Resources */, AB5C7E591937FE7000FA7D5B /* Main.storyboard in Resources */, - AB5C7EE91937FF9B00FA7D5B /* RecordingSignal008@2x.png in Resources */, - AB5C7FCD1938017700FA7D5B /* VoiceSearchFeedback011@2x.png in Resources */, - AB5C7FBD1938017700FA7D5B /* VoiceSearchFeedback003@2x.png in Resources */, - AB5C7ED11937FF9B00FA7D5B /* input-bar-background@2x.png in Resources */, + E4EE9AA81B97610A00866998 /* emotion10.gif in Resources */, + E4EE9AAD1B97610A00866998 /* emotion15.gif in Resources */, + 7053E7191B42F03500DE808D /* keyboard_HL@2x.png in Resources */, + F7B9EAF21A4D60500072F81B /* SenderVoiceNodePlaying@2x.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -1251,6 +663,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + F7D249EB1A4D072F0015764B /* ViewController.m in Sources */, AB5C7F131937FFCC00FA7D5B /* XHDemoWeChatMessageTableViewController.m in Sources */, ABC47CFB193922EB00ECADEA /* MDKMessage.m in Sources */, AB5C7E561937FE7000FA7D5B /* AppDelegate.m in Sources */, @@ -1302,11 +715,11 @@ name = InfoPlist.strings; sourceTree = ""; }; - AB5C7E851937FF9B00FA7D5B /* MessageDisplayKitString.strings */ = { + F7B9EA5D1A4D60500072F81B /* MessageDisplayKitString.strings */ = { isa = PBXVariantGroup; children = ( - AB5C7E861937FF9B00FA7D5B /* en */, - AB5C7ECB1937FF9B00FA7D5B /* zh-Hans */, + F7B9EA5B1A4D60500072F81B /* en */, + F7B9EA5C1A4D60500072F81B /* zh-Hans */, ); name = MessageDisplayKitString.strings; sourceTree = ""; @@ -1346,7 +759,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.1; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; @@ -1378,7 +791,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.1; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; @@ -1391,12 +804,13 @@ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", - "$(USER_LIBRARY_DIR)/Developer/Xcode/DerivedData/MessageDisplayKitWorkSpace-etwqpidvrxfrcqffbdxelymxtvnc/Build/Products/Debug-iphoneos", + "$(PROJECT_DIR)/MessageDisplayKitCoreDataExample/Vendor", ); GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample-Prefix.pch"; INFOPLIST_FILE = "MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 6.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( "-ObjC", "-all_load", @@ -1413,12 +827,13 @@ ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", - "$(USER_LIBRARY_DIR)/Developer/Xcode/DerivedData/MessageDisplayKitWorkSpace-etwqpidvrxfrcqffbdxelymxtvnc/Build/Products/Debug-iphoneos", + "$(PROJECT_DIR)/MessageDisplayKitCoreDataExample/Vendor", ); GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample-Prefix.pch"; INFOPLIST_FILE = "MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 6.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( "-ObjC", "-all_load", diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/AppDelegate.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/AppDelegate.h index 0745c51..5bc2411 100644 --- a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/AppDelegate.h +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/AppDelegate.h @@ -3,7 +3,7 @@ // MessageDisplayKitCoreDataExample // // Created by 曾 宪华 on 14-5-29. -// Copyright (c) 2014年 曾宪华 QQ群: (142557668) QQ:543413507 Gmail:xhzengAIB@gmail.com. All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/AppDelegate.m b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/AppDelegate.m index 2d2a25b..20ebd75 100644 --- a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/AppDelegate.m +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/AppDelegate.m @@ -3,12 +3,11 @@ // MessageDisplayKitCoreDataExample // // Created by 曾 宪华 on 14-5-29. -// Copyright (c) 2014年 曾宪华 QQ群: (142557668) QQ:543413507 Gmail:xhzengAIB@gmail.com. All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "AppDelegate.h" -#import "XHDemoWeChatMessageTableViewController.h" @implementation AppDelegate @@ -19,9 +18,6 @@ @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. - UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController; - XHDemoWeChatMessageTableViewController *controller = (XHDemoWeChatMessageTableViewController *)navigationController.topViewController; - controller.managedObjectContext = self.managedObjectContext; return YES; } diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Base.lproj/Main.storyboard b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Base.lproj/Main.storyboard index 2f84eec..894a9f4 100644 --- a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Base.lproj/Main.storyboard +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Base.lproj/Main.storyboard @@ -1,11 +1,11 @@ - + - - + + - + @@ -35,12 +35,42 @@ - + - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/MDKMessage.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/MDKMessage.h index 3d76417..a139e8a 100644 --- a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/MDKMessage.h +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/MDKMessage.h @@ -3,7 +3,7 @@ // MessageDisplayKitCoreDataExample // // Created by 曾 宪华 on 14-5-30. -// Copyright (c) 2014年 曾宪华 QQ群: (142557668) QQ:543413507 Gmail:xhzengAIB@gmail.com. All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/MDKMessage.m b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/MDKMessage.m index a594e41..a1dd7e3 100644 --- a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/MDKMessage.m +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/MDKMessage.m @@ -3,7 +3,7 @@ // MessageDisplayKitCoreDataExample // // Created by 曾 宪华 on 14-5-30. -// Copyright (c) 2014年 曾宪华 QQ群: (142557668) QQ:543413507 Gmail:xhzengAIB@gmail.com. All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "MDKMessage.h" diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample-Info.plist b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample-Info.plist index 5a8cdd7..4b22ba4 100644 --- a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample-Info.plist +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample-Info.plist @@ -13,7 +13,7 @@ CFBundleInfoDictionaryVersion 6.0 CFBundleName - ${PRODUCT_NAME} + 华捷微信 CFBundlePackageType APPL CFBundleShortVersionString diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample-Prefix.pch b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample-Prefix.pch index 8266469..d324859 100644 --- a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample-Prefix.pch +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample-Prefix.pch @@ -6,8 +6,8 @@ #import -#ifndef __IPHONE_5_0 -#warning "This project uses features only available in iOS SDK 5.0 and later." +#ifndef __IPHONE_6_0 +#warning "This project uses features only available in iOS SDK 6.0 and later." #endif #ifdef __OBJC__ diff --git a/MessageDisplayKit/Resources/SearchIcon@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/SearchIcon@2x.png similarity index 100% rename from MessageDisplayKit/Resources/SearchIcon@2x.png rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/SearchIcon@2x.png diff --git a/Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/TableViewBackgroundImage@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/TableViewBackgroundImage@2x.png similarity index 100% rename from Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/TableViewBackgroundImage@2x.png rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/TableViewBackgroundImage@2x.png diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Fav_Cell_Loc@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Fav_Cell_Loc@2x.png new file mode 100644 index 0000000..5b509e9 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Fav_Cell_Loc@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/FLAnimatedImage.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/FLAnimatedImage.h new file mode 100755 index 0000000..6425f3c --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/FLAnimatedImage.h @@ -0,0 +1,72 @@ +// +// FLAnimatedImage.h +// Flipboard +// +// Created by Raphael Schaad on 7/8/13. +// Copyright (c) 2013-2014 Flipboard. All rights reserved. +// + + +#import + +@protocol FLAnimatedImageDebugDelegate; + + +// +// An `FLAnimatedImage`'s job is to deliver frames in a highly performant way and works in conjunction with `FLAnimatedImageView`. +// It subclasses `NSObject` and not `UIImage` because it's only an "image" in the sense that a sea lion is a lion. +// It tries to intelligently choose the frame cache size depending on the image and memory situation with the goal to lower CPU usage for smaller ones, lower memory usage for larger ones and always deliver frames for high performant play-back. +// Note: `posterImage`, `size`, `loopCount`, `delayTimes` and `frameCount` don't change after successful initialization. +// +@interface FLAnimatedImage : NSObject + +@property (nonatomic, strong, readonly) UIImage *posterImage; // Guaranteed to be loaded; usually equivalent to `-imageLazilyCachedAtIndex:0` +@property (nonatomic, assign, readonly) CGSize size; // The `.posterImage`'s `.size` + +@property (nonatomic, assign, readonly) NSUInteger loopCount; // 0 means repeating the animation indefinitely +@property (nonatomic, strong, readonly) NSArray *delayTimes; // Of type `NSTimeInterval` boxed in `NSNumber`s +@property (nonatomic, assign, readonly) NSUInteger frameCount; // Number of valid frames; equal to `[.delayTimes count]` + +@property (nonatomic, assign, readonly) NSUInteger frameCacheSizeCurrent; // Current size of intelligently chosen buffer window; can range in the interval [1..frameCount] +@property (nonatomic, assign) NSUInteger frameCacheSizeMax; // Allow to cap the cache size; 0 means no specific limit (default) + +// Intended to be called from main thread synchronously; will return immediately. +// If the result isn't cached, will return `nil`; the caller should then pause playback, not increment frame counter and keep polling. +// After an initial loading time, depending on `frameCacheSize`, frames should be available immediately from the cache. +- (UIImage *)imageLazilyCachedAtIndex:(NSUInteger)index; + +// Pass either a `UIImage` or an `FLAnimatedImage` and get back its size ++ (CGSize)sizeForImage:(id)image; + +// Designated initializer +// On success, returns a new `FLAnimatedImage` with all fields populated, on failure returns `nil` and an error will be logged. +- (instancetype)initWithAnimatedGIFData:(NSData *)data; + +@property (nonatomic, strong, readonly) NSData *data; // The data the receiver was initialized with; read-only + +#if DEBUG +// Only intended to report internal state for debugging +@property (nonatomic, weak) id debug_delegate; +#endif + +@end + + +@interface FLWeakProxy : NSProxy + ++ (instancetype)weakProxyForObject:(id)targetObject; + +@end + + +#if DEBUG +@protocol FLAnimatedImageDebugDelegate + +@optional + +- (void)debug_animatedImage:(FLAnimatedImage *)animatedImage didUpdateCachedFrames:(NSIndexSet *)indexesOfFramesInCache; +- (void)debug_animatedImage:(FLAnimatedImage *)animatedImage didRequestCachedFrame:(NSUInteger)index; +- (CGFloat)debug_animatedImagePredrawingSlowdownFactor:(FLAnimatedImage *)animatedImage; + +@end +#endif diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/FLAnimatedImageView.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/FLAnimatedImageView.h new file mode 100755 index 0000000..fbb4103 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/FLAnimatedImageView.h @@ -0,0 +1,47 @@ +// +// FLAnimatedImageView.h +// Flipboard +// +// Created by Raphael Schaad on 7/8/13. +// Copyright (c) 2013-2014 Flipboard. All rights reserved. +// + + +#import + +@class FLAnimatedImage; +@protocol FLAnimatedImageViewDebugDelegate; + + +// +// An `FLAnimatedImageView` can take an `FLAnimatedImage` and plays it automatically when in view hierarchy and stops when removed. +// The animation can also be controlled with the `UIImageView` methods `-start/stop/isAnimating`. +// It is a fully compatible `UIImageView` subclass and can be used as a drop-in component to work with existing code paths expecting to display a `UIImage`. +// Under the hood it uses a `CADisplayLink` for playback, which can be inspected with `currentFrame` & `currentFrameIndex`. +// +@interface FLAnimatedImageView : UIImageView + +// Setting `[UIImageView.image]` to a non-`nil` value clears out existing `animatedImage`. +// And vice versa, setting `animatedImage` will initially populate the `[UIImageView.image]` to its `posterImage` and then start animating and hold `currentFrame`. +@property (nonatomic, strong) FLAnimatedImage *animatedImage; + +@property (nonatomic, strong, readonly) UIImage *currentFrame; +@property (nonatomic, assign, readonly) NSUInteger currentFrameIndex; + +#if DEBUG +// Only intended to report internal state for debugging +@property (nonatomic, weak) id debug_delegate; +#endif + +@end + + +#if DEBUG +@protocol FLAnimatedImageViewDebugDelegate + +@optional + +- (void)debug_animatedImageView:(FLAnimatedImageView *)animatedImageView waitingForFrame:(NSUInteger)index duration:(NSTimeInterval)duration; + +@end +#endif diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/LKBadgeView.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/LKBadgeView.h new file mode 100755 index 0000000..97f3714 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/LKBadgeView.h @@ -0,0 +1,75 @@ +// +// Copyright (c) 2011 Hiroshi Hashiguchi +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#import + +// Enums +typedef enum { + LKBadgeViewHorizontalAlignmentLeft = 0, + LKBadgeViewHorizontalAlignmentCenter, + LKBadgeViewHorizontalAlignmentRight + +} LKBadgeViewHorizontalAlignment; + +typedef enum { + LKBadgeViewWidthModeStandard = 0, // 30x20 + LKBadgeViewWidthModeSmall // 22x20 +} LKBadgeViewWidthMode; + +typedef enum { + LKBadgeViewHeightModeStandard = 0, // 20 + LKBadgeViewHeightModeLarge // 30 +} LKBadgeViewHeightMode; + + +// Constants +#define LK_BADGE_VIEW_STANDARD_HEIGHT 20.0 +#define LK_BADGE_VIEW_LARGE_HEIGHT 30.0 +#define LK_BADGE_VIEw_STANDARD_WIDTH 30.0 +#define LK_BADGE_VIEw_MINIMUM_WIDTH 22.0 +#define LK_BADGE_VIEW_FONT_SIZE 16.0 + + +@interface LKBadgeView : UIView + +@property (nonatomic, copy) NSString* text; +@property (nonatomic, strong) UIColor* textColor; +@property (nonatomic, strong) UIFont* font; +@property (nonatomic, strong) UIColor* badgeColor; +@property (nonatomic, strong) UIColor* outlineColor; +@property (nonatomic, assign) CGFloat outlineWidth; +@property (nonatomic, assign) BOOL outline; +@property (nonatomic, assign) LKBadgeViewHorizontalAlignment horizontalAlignment; +@property (nonatomic, assign) LKBadgeViewWidthMode widthMode; +@property (nonatomic, assign) LKBadgeViewHeightMode heightMode; +@property (nonatomic, assign) BOOL shadow; +@property (nonatomic, assign) CGSize shadowOffset; +@property (nonatomic, assign) CGFloat shadowBlur; +@property (nonatomic, strong) UIColor* shadowColor; +@property (nonatomic, assign) BOOL shadowOfOutline; +@property (nonatomic, assign) BOOL shadowOfText; +@property (nonatomic, assign) CGSize textOffset; + ++ (CGFloat)badgeHeight; // @depricated +- (CGFloat)badgeHeight; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/MessageDisplayKit-Prefix.pch b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/MessageDisplayKit-Prefix.pch new file mode 100644 index 0000000..d3ab371 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/MessageDisplayKit-Prefix.pch @@ -0,0 +1,19 @@ +// +// MessageDisplayKit-Prefix.pch +// MessageDisplayKit +// +// Created by HUAJIE on 14/12/25. +// Copyright (c) 2014年 iOS软件开发工程师 曾宪华 热衷于简洁的UI QQ:543413507 http://www.pailixiu.com/blog http://www.pailixiu.com/Jack/personal. All rights reserved. +// + +#import + +#ifndef __IPHONE_6_0 +#warning "This project uses features only available in iOS SDK 6.0 and later." +#endif + +#ifdef __OBJC__ + #import + #import + +#endif diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/NSString+MessageInputView.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/NSString+MessageInputView.h new file mode 100644 index 0000000..7e5b2f9 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/NSString+MessageInputView.h @@ -0,0 +1,19 @@ +// +// NSString+MessageInputView.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +@interface NSString (MessageInputView) + +- (NSString *)stringByTrimingWhitespace; + + +- (NSUInteger)numberOfLines; + + +@end diff --git a/MessageDisplayKit/Classes/Common/XHFoundationCommon.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/NSString+XHMD5.h similarity index 55% rename from MessageDisplayKit/Classes/Common/XHFoundationCommon.h rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/NSString+XHMD5.h index 7c14c9c..f041db2 100644 --- a/MessageDisplayKit/Classes/Common/XHFoundationCommon.h +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/NSString+XHMD5.h @@ -1,15 +1,15 @@ // -// XHFoundationCommon.h -// MessageDisplayExample +// NSString+XHMD5.h +// XHImageViewer // -// Created by qtone-1 on 14-4-28. +// Created by 曾 宪华 on 14-2-18. // Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. // #import -@interface XHFoundationCommon : NSObject +@interface NSString (XHMD5) -+ (CGFloat)getAdapterHeight; +- (NSString *)MD5Hash; @end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SECompatibility.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SECompatibility.h new file mode 100755 index 0000000..21187dc --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SECompatibility.h @@ -0,0 +1,57 @@ +// +// SECompatibility.h +// SECoreTextView +// +// Created by kishikawa katsumi on 2013/04/21. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import + +#if TARGET_OS_IPHONE +#import + +@compatibility_alias NSView UIView; +@compatibility_alias NSColor UIColor; +@compatibility_alias NSBezierPath UIBezierPath; +@compatibility_alias NSImage UIImage; + +typedef UIEdgeInsets NSEdgeInsets; + +#define NSEdgeInsetsMake UIEdgeInsetsMake +#define NSRectFill UIRectFill +#define NSStringFromRect NSStringFromCGRect +#define NSStringFromSize NSStringFromCGSize +#define NSTextInputClient UITextInput + +extern NSString * const NSLinkAttributeName; +extern NSString * const NSStrikethroughStyleAttributeName; + +#else +#import + +@compatibility_alias UIView NSView; +@compatibility_alias UIFont NSFont; +@compatibility_alias UIColor NSColor; +@compatibility_alias UIBezierPath NSBezierPath; +@compatibility_alias UIImage NSImage; + +typedef NSEdgeInsets UIEdgeInsets; + +#define UIEdgeInsetsMake NSEdgeInsetsMake +#define UIRectFill NSRectFill +#define NSStringFromCGRect NSStringFromRect +#define NSStringFromCGSize NSStringFromSize +#define UITextInput NSTextInputClient + +@interface NSColor (Compatibility) + +- (CGColorRef)createCGColor CF_RETURNS_RETAINED; + +@end + +#endif + +@interface SECompatibility : NSObject + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SEConstants.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SEConstants.h new file mode 100755 index 0000000..336c591 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SEConstants.h @@ -0,0 +1,19 @@ +// +// SEConstants.h +// SECoreTextView-iOS +// +// Created by kishikawa katsumi on 2013/04/27. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import +#import "SECompatibility.h" + +@interface SEConstants : NSObject + ++ (NSColor *)selectedTextBackgroundColor; ++ (NSColor *)linkColor; ++ (NSColor *)selectionCaretColor; ++ (NSColor *)caretColor; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SELineLayout.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SELineLayout.h new file mode 100755 index 0000000..5f25049 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SELineLayout.h @@ -0,0 +1,51 @@ +// +// SELine.h +// SECoreTextView +// +// Created by kishikawa katsumi on 2013/04/20. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import +#import + +@class SELinkText; + +typedef struct { + CGFloat ascent; + CGFloat descent; + CGFloat width; + CGFloat leading; + double trailingWhitespaceWidth; +} SELineMetrics; + +@interface SELineLayout : NSObject + +@property (nonatomic, readonly) CTLineRef line; +@property (nonatomic, readonly) NSInteger index; +@property (nonatomic, readonly) CGRect rect; +@property (nonatomic) CGRect drawingRect; +@property (nonatomic) CGFloat truncationTokenWidth; +@property (nonatomic, readonly) SELineMetrics metrics; + +@property (nonatomic, readonly) NSRange stringRange; + +@property (nonatomic, readonly) NSArray *links; +@property (nonatomic, readonly) BOOL containsLink; +@property (nonatomic, readonly) NSUInteger numberOfLinks; + +@property (nonatomic, getter = isTruncated) BOOL truncated; + +- (id)initWithLine:(CTLineRef)line index:(NSInteger)index rect:(CGRect)rect metrics:(SELineMetrics)metrics; + +- (NSRange)stringRange; + +- (BOOL)containsPoint:(CGPoint)point; +- (CFIndex)stringIndexForPosition:(CGPoint)point; + +- (CGRect)rectOfStringWithRange:(NSRange)range; + +- (void)addLink:(SELinkText *)link; +- (SELinkText *)linkAtPoint:(CGPoint)point; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SELinkText.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SELinkText.h new file mode 100755 index 0000000..3ba6db5 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SELinkText.h @@ -0,0 +1,23 @@ +// +// SELinkText.h +// SECoreTextView +// +// Created by kishikawa katsumi on 2013/04/20. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import + +@class SETextGeometry; + +@interface SELinkText : NSObject + +@property (nonatomic, readonly) NSString *text; +@property (nonatomic, readonly) id object; +@property (nonatomic, readonly) NSRange range; +@property (nonatomic, readonly) NSArray *geometries; + +- (id)initWithText:(NSString *)text object:(id)object range:(NSRange)range; +- (void)addLinkGeometry:(SETextGeometry *)geometry; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SESelectionGrabber.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SESelectionGrabber.h new file mode 100755 index 0000000..1295396 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SESelectionGrabber.h @@ -0,0 +1,25 @@ +// +// SESelectionGrabber.h +// SECoreTextView-iOS +// +// Created by kishikawa katsumi on 2013/04/23. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import + +#if TARGET_OS_IPHONE +#import + +typedef NS_ENUM(NSUInteger, SESelectionGrabberDotMetric) { + SESelectionGrabberDotMetricTop, + SESelectionGrabberDotMetricBottom +}; + +@interface SESelectionGrabber : UIView + +@property (nonatomic) BOOL dragging; +@property (nonatomic) SESelectionGrabberDotMetric dotMetric; + +@end +#endif diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextAttachment.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextAttachment.h new file mode 100755 index 0000000..acaea8f --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextAttachment.h @@ -0,0 +1,53 @@ +// +// SETextAttachment.h +// SECoreTextView-iOS +// +// Created by kishikawa katsumi on 2013/04/26. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import +#import + +#if !TARGET_OS_IPHONE +#if !defined(MAC_OS_X_VERSION_10_9) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_9 +enum { + kCTRunDelegateVersion1 = 1, + kCTRunDelegateCurrentVersion = kCTRunDelegateVersion1 +}; + +typedef void (*CTRunDelegateDeallocateCallback) (void *refCon); +typedef CGFloat (*CTRunDelegateGetAscentCallback) (void *refCon); +typedef CGFloat (*CTRunDelegateGetDescentCallback) (void *refCon); +typedef CGFloat (*CTRunDelegateGetWidthCallback) (void *refCon); + +typedef struct { + CFIndex version; + CTRunDelegateDeallocateCallback dealloc; + CTRunDelegateGetAscentCallback getAscent; + CTRunDelegateGetDescentCallback getDescent; + CTRunDelegateGetWidthCallback getWidth; +} CTRunDelegateCallbacks; + +typedef const struct __CTRunDelegate * CTRunDelegateRef; +CTRunDelegateRef CTRunDelegateCreate(const CTRunDelegateCallbacks* callbacks, + void* refCon ); +void* CTRunDelegateGetRefCon( + CTRunDelegateRef runDelegate ); +#endif +#endif + +@interface SETextAttachment : NSObject + +@property (nonatomic, readonly) id object; +@property (nonatomic, readonly) CGSize size; +@property (nonatomic, readonly) NSRange range; + +@property (nonatomic, readonly) CTRunDelegateCallbacks callbacks; + +@property (nonatomic) NSAttributedString *originalAttributedString; +@property (nonatomic) NSString *replacedString; + +- (id)initWithObject:(id)object size:(CGSize)size range:(NSRange)range; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextEditingCaret.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextEditingCaret.h new file mode 100755 index 0000000..4eac34b --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextEditingCaret.h @@ -0,0 +1,20 @@ +// +// SETextEditingCaret.h +// CoreTextEditor +// +// Created by kishikawa katsumi on 2013/09/24. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import + +#if TARGET_OS_IPHONE +#import + +@interface SETextEditingCaret : UIView + +- (void)delayBlink; +- (void)stopBlink; + +@end +#endif diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextGeometry.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextGeometry.h new file mode 100755 index 0000000..2c98c69 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextGeometry.h @@ -0,0 +1,19 @@ +// +// SETextGeometry.h +// SECoreTextView +// +// Created by kishikawa katsumi on 2013/04/20. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import +#import + +@interface SETextGeometry : NSObject + +@property (nonatomic, readonly) CGRect rect; +@property (nonatomic, readonly) NSInteger lineNumber; + +- (id)initWithRect:(CGRect)rect lineNumber:(NSInteger)lineNumber; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextInput.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextInput.h new file mode 100755 index 0000000..9a1351c --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextInput.h @@ -0,0 +1,31 @@ +// +// SETextInput.h +// SECoreTextView +// +// Created by kishikawa katsumi on 2013/09/22. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import + +#if TARGET_OS_IPHONE +#import +#import + +@interface SETextRange : UITextRange + +@property (nonatomic) NSRange range; + ++ (SETextRange *)rangeWithNSRange:(NSRange)theRange; + +@end + +@interface SETextPosition : UITextPosition + +@property (nonatomic, weak) id delegate; +@property (nonatomic) NSUInteger index; + ++ (SETextPosition *)positionWithIndex:(NSUInteger)index; + +@end +#endif diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextLayout.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextLayout.h new file mode 100755 index 0000000..318df16 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextLayout.h @@ -0,0 +1,56 @@ +// +// SETextView.h +// SECoreTextView +// +// Created by kishikawa katsumi on 2013/04/19. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import +#import +#import "SECompatibility.h" + +@class SETextSelection, SELinkText; + +@interface SETextLayout : NSObject + +@property (nonatomic, copy) NSAttributedString *attributedString; + +@property (nonatomic) CGRect bounds; + +@property (nonatomic, readonly) CGRect frameRect; +@property (nonatomic, readonly) NSArray *lineLayouts; + +@property (nonatomic) SETextSelection *textSelection; +@property (nonatomic, readonly) NSArray *links; + +@property (nonatomic) NSRange markedTextRange; +@property (nonatomic, getter = isEditing) BOOL editing; + +@property (nonatomic) CTTextAlignment textAlignment; +@property (nonatomic) CTLineBreakMode lineBreakMode; + +- (id)initWithAttributedString:(NSAttributedString *)attributedString; +- (void)update; +- (void)drawInContext:(CGContextRef)context; + +- (CFIndex)stringIndexForPosition:(CGPoint)point; +- (CFIndex)stringIndexForClosestPosition:(CGPoint)point; +- (CGRect)rectOfStringForIndex:(CFIndex)index; +- (CGRect)rectOfStringForLastLine; + +- (void)setSelectionStartWithPoint:(CGPoint)point; +- (void)setSelectionEndWithPoint:(CGPoint)point; +- (void)setSelectionEndWithClosestPoint:(CGPoint)point; +- (void)setSelectionStartWithFirstPoint:(CGPoint)firstPoint; + +- (void)setSelectionWithPoint:(CGPoint)point; +- (void)setSelectionWithFirstPoint:(CGPoint)firstPoint secondPoint:(CGPoint)secondPoint; + +- (void)selectAll; +- (void)clearSelection; + ++ (CGRect)frameRectWithAttributtedString:(NSAttributedString *)attributedString + constraintSize:(CGSize)constraintSize; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextMagnifierCaret.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextMagnifierCaret.h new file mode 100755 index 0000000..fd4b6e6 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextMagnifierCaret.h @@ -0,0 +1,22 @@ +// +// SETextMagnifierCaret.h +// SECoreTextView-iOS +// +// Created by kishikawa katsumi on 2013/04/23. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import + +#if TARGET_OS_IPHONE +#import +#import + +@interface SETextMagnifierCaret : UIView + +- (void)showInView:(UIView *)view atPoint:(CGPoint)point; +- (void)moveToPoint:(CGPoint)point; +- (void)hide; + +@end +#endif diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextMagnifierRanged.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextMagnifierRanged.h new file mode 100755 index 0000000..aa13fd0 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextMagnifierRanged.h @@ -0,0 +1,22 @@ +// +// SETextMagnifierRanged.h +// SECoreTextView-iOS +// +// Created by kishikawa katsumi on 2013/04/26. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import + +#if TARGET_OS_IPHONE +#import +#import + +@interface SETextMagnifierRanged : UIView + +- (void)showInView:(UIView *)view atPoint:(CGPoint)point; +- (void)moveToPoint:(CGPoint)point; +- (void)hide; + +@end +#endif diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextSelection.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextSelection.h new file mode 100755 index 0000000..f27d5ec --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextSelection.h @@ -0,0 +1,18 @@ +// +// SETextSelection.h +// SECoreTextView +// +// Created by kishikawa katsumi on 2013/04/20. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import + +@interface SETextSelection : NSObject + +@property (nonatomic) NSRange selectedRange; + +- (id)initWithIndex:(NSInteger)index; +- (void)setSelectionEndAtIndex:(NSInteger)index; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextSelectionView.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextSelectionView.h new file mode 100755 index 0000000..df2c4d6 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextSelectionView.h @@ -0,0 +1,38 @@ +// +// SETextSelectionView.h +// SECoreTextView-iOS +// +// Created by kishikawa katsumi on 2013/09/23. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import + +#if TARGET_OS_IPHONE +#import + +@class SETextView, SESelectionGrabber, SETextLayout; + +@interface SETextSelectionView : UIView + +- (instancetype)initWithFrame:(CGRect)frame textView:(SETextView *)textView; + +@property (nonatomic, weak) SETextView *textView; + +@property (nonatomic) SESelectionGrabber *startGrabber; +@property (nonatomic) SESelectionGrabber *endGrabber; + +@property (nonatomic) UILongPressGestureRecognizer *selectionGestureRecognizer; +@property (nonatomic) UIPanGestureRecognizer *startGrabberGestureRecognizer; +@property (nonatomic) UIPanGestureRecognizer *endGrabberGestureRecognizer; + +@property (nonatomic) CGRect startFrame; +@property (nonatomic) CGRect endFrame; + +- (void)update; + +- (void)showControls; +- (void)hideControls; + +@end +#endif diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextView.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextView.h new file mode 100755 index 0000000..8cf76d9 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/SETextView.h @@ -0,0 +1,151 @@ +// +// SETextView.h +// SECoreTextView +// +// Created by kishikawa katsumi on 2013/04/20. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import +#import +#import "SELinkText.h" +#import "SETextAttachment.h" +#import "SECompatibility.h" + +typedef void(^SETextAttachmentDrawingBlock)(CGRect rect, CGContextRef context); + +typedef NS_ENUM(NSUInteger, SETextAttachmentDrawingOptions) { + SETextAttachmentDrawingOptionNone = 0, + SETextAttachmentDrawingOptionNewLine = 1 << 0 +}; + +@protocol SETextViewDelegate; + +@class SELinkText; + +#if TARGET_OS_IPHONE +@interface SETextView : UIView +#else +@interface SETextView : NSView +#endif + +@property (nonatomic, weak) IBOutlet id delegate; + +@property (nonatomic, copy) NSString *text; +@property (nonatomic, copy) NSAttributedString *attributedText; + +#if TARGET_OS_IPHONE +@property (nonatomic) UIFont *font; +#else +@property (nonatomic) NSFont *font; +#endif +@property (nonatomic) NSColor *textColor; +@property (nonatomic) NSColor *highlightedTextColor; +@property (nonatomic) NSTextAlignment textAlignment; +@property (nonatomic) NSLineBreakMode lineBreakMode; +@property (nonatomic) CGFloat lineSpacing; +@property (nonatomic) CGFloat lineHeight; +@property (nonatomic) CGFloat paragraphSpacing; + +@property (nonatomic) NSColor *selectedTextBackgroundColor; +@property (nonatomic) NSColor *linkHighlightColor; +@property (nonatomic) NSColor *linkRolloverEffectColor; + +@property (nonatomic, readonly) CGRect layoutFrame; + +@property (nonatomic, getter = isHighlighted) BOOL highlighted; +@property (nonatomic, getter = isSelectable) BOOL selectable; +#if TARGET_OS_IPHONE +@property (nonatomic) BOOL showsEditingMenuAutomatically; +#endif + +#if TARGET_OS_IPHONE +@property (nonatomic) NSRange selectedRange; +#else +@property (nonatomic, readonly) NSRange selectedRange; +#endif +@property (nonatomic, readonly) NSString *selectedText; +@property (nonatomic, readonly) NSAttributedString *selectedAttributedText; + +@property (nonatomic) NSTimeInterval minimumLongPressDuration; + +@property (nonatomic, getter = isEditable) BOOL editable; +@property (nonatomic, readonly, getter = isEditing) BOOL editing; +@property (nonatomic, readonly) CGRect caretRect; + +@property (readwrite) UIView *inputView; +@property (readwrite) UIView *inputAccessoryView; + +#if TARGET_OS_IPHONE +@property (nonatomic) UITextAutocapitalizationType autocapitalizationType; +@property (nonatomic) UITextAutocorrectionType autocorrectionType; +@property (nonatomic) UITextSpellCheckingType spellCheckingType; +@property (nonatomic) UIKeyboardType keyboardType; +@property (nonatomic) UIKeyboardAppearance keyboardAppearance; +@property (nonatomic) UIReturnKeyType returnKeyType; +@property (nonatomic) BOOL enablesReturnKeyAutomatically; +@property (nonatomic, getter = isSecureTextEntry) BOOL secureTextEntry; +#endif + +- (id)initWithFrame:(CGRect)frame; + ++ (CGRect)frameRectWithAttributtedString:(NSAttributedString *)attributedString + constraintSize:(CGSize)constraintSize; ++ (CGRect)frameRectWithAttributtedString:(NSAttributedString *)attributedString + constraintSize:(CGSize)constraintSize + lineSpacing:(CGFloat)lineSpacing; +#if TARGET_OS_IPHONE ++ (CGRect)frameRectWithAttributtedString:(NSAttributedString *)attributedString + constraintSize:(CGSize)constraintSize + lineSpacing:(CGFloat)lineSpacing + font:(UIFont *)font; ++ (CGRect)frameRectWithAttributtedString:(NSAttributedString *)attributedString + constraintSize:(CGSize)constraintSize + lineSpacing:(CGFloat)lineSpacing + paragraphSpacing:(CGFloat)paragraphSpacing + font:(UIFont *)font; +#else ++ (CGRect)frameRectWithAttributtedString:(NSAttributedString *)attributedString + constraintSize:(CGSize)constraintSize + lineSpacing:(CGFloat)lineSpacing + font:(NSFont *)font; ++ (CGRect)frameRectWithAttributtedString:(NSAttributedString *)attributedString + constraintSize:(CGSize)constraintSize + lineSpacing:(CGFloat)lineSpacing + paragraphSpacing:(CGFloat)paragraphSpacing + font:(NSFont *)font; +#endif + +- (void)addObject:(id)object size:(CGSize)size atIndex:(NSInteger)index; +- (void)addObject:(id)object size:(CGSize)size replaceRange:(NSRange)range; +#if TARGET_OS_IPHONE +- (void)insertAttributedText:(NSAttributedString *)attributedText; +- (void)insertObject:(id)object size:(CGSize)size; +#endif + +- (void)clearSelection; + +@end + +@protocol SETextViewDelegate + +@optional +- (BOOL)textViewShouldBeginEditing:(SETextView *)textView; +- (BOOL)textViewShouldEndEditing:(SETextView *)textView; + +- (void)textViewDidBeginEditing:(SETextView *)textView; +- (void)textViewDidEndEditing:(SETextView *)textView; + +- (BOOL)textView:(SETextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text; +- (void)textViewDidChange:(SETextView *)textView; + +- (void)textViewDidChangeSelection:(SETextView *)textView; +- (void)textViewDidEndSelecting:(SETextView *)textView; + +//- (BOOL)textView:(SETextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange; +//- (BOOL)textView:(SETextView *)textView shouldInteractWithTextAttachment:(NSTextAttachment *)textAttachment inRange:(NSRange)characterRange; + +- (BOOL)textView:(SETextView *)textView clickedOnLink:(SELinkText *)link atIndex:(NSUInteger)charIndex; +- (BOOL)textView:(SETextView *)textView longPressedOnLink:(SELinkText *)link atIndex:(NSUInteger)charIndex; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/UIImage+Alpha.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/UIImage+Alpha.h new file mode 100755 index 0000000..370d978 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/UIImage+Alpha.h @@ -0,0 +1,11 @@ +// UIImage+Alpha.h +// Created by Trevor Harmon on 9/20/09. +// Free for personal or commercial use, with or without modification. +// No warranty is expressed or implied. + +// Helper methods for adding an alpha layer to an image +@interface UIImage (Alpha) +- (BOOL)hasAlpha; +- (UIImage *)imageWithAlpha; +- (UIImage *)transparentBorderImage:(NSUInteger)borderSize; +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/UIImage+Resize.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/UIImage+Resize.h new file mode 100755 index 0000000..f143381 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/UIImage+Resize.h @@ -0,0 +1,18 @@ +// UIImage+Resize.h +// Created by Trevor Harmon on 8/5/09. +// Free for personal or commercial use, with or without modification. +// No warranty is expressed or implied. + +// Extends the UIImage class to support resizing/cropping +@interface UIImage (Resize) +- (UIImage *)croppedImage:(CGRect)bounds; +- (UIImage *)thumbnailImage:(NSInteger)thumbnailSize + transparentBorder:(NSUInteger)borderSize + cornerRadius:(NSUInteger)cornerRadius + interpolationQuality:(CGInterpolationQuality)quality; +- (UIImage *)resizedImage:(CGSize)newSize + interpolationQuality:(CGInterpolationQuality)quality; +- (UIImage *)resizedImageWithContentMode:(UIViewContentMode)contentMode + bounds:(CGSize)bounds + interpolationQuality:(CGInterpolationQuality)quality; +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/UIImage+RoundedCorner.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/UIImage+RoundedCorner.h new file mode 100755 index 0000000..630ebb3 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/UIImage+RoundedCorner.h @@ -0,0 +1,9 @@ +// UIImage+RoundedCorner.h +// Created by Trevor Harmon on 9/20/09. +// Free for personal or commercial use, with or without modification. +// No warranty is expressed or implied. + +// Extends the UIImage class to support making rounded corners +@interface UIImage (RoundedCorner) +- (UIImage *)roundedCornerImage:(NSInteger)cornerSize borderSize:(NSInteger)borderSize; +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/UIImage+Utility.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/UIImage+Utility.h new file mode 100644 index 0000000..5fb0e84 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/UIImage+Utility.h @@ -0,0 +1,16 @@ +// +// UIImage+Utility.h +// XHImageViewer +// +// Created by 曾 宪华 on 14-2-18. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +@interface UIImage (Utility) + ++ (UIImage *)fastImageWithData:(NSData *)data; ++ (UIImage *)fastImageWithContentsOfFile:(NSString *)path; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/UIImage+XHRounded.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/UIImage+XHRounded.h new file mode 100644 index 0000000..399f35c --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/UIImage+XHRounded.h @@ -0,0 +1,15 @@ +// +// UIImage+XHRounded.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-25. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +@interface UIImage (XHRounded) + +- (UIImage *)createRoundedWithRadius:(CGFloat)radius; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/UIScrollView+XHkeyboardControl.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/UIScrollView+XHkeyboardControl.h new file mode 100644 index 0000000..3528fe8 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/UIScrollView+XHkeyboardControl.h @@ -0,0 +1,74 @@ +// +// UIScrollView+XHkeyboardControl.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import + +typedef void(^KeyboardWillBeDismissedBlock)(void); +typedef void(^KeyboardDidHideBlock)(void); +typedef void(^KeyboardDidShowBlock)(BOOL didShowed); +typedef void(^KeyboardDidScrollToPointBlock)(CGPoint point); +typedef void(^KeyboardWillSnapBackToPointBlock)(CGPoint point); + +typedef void(^KeyboardWillChangeBlock)(CGRect keyboardRect, UIViewAnimationOptions options, double duration, BOOL showKeyboard); + + +@interface UIScrollView (XHkeyboardControl) + +@property (nonatomic, weak) UIView *keyboardView; + +/** + * 根据是否需要手势控制键盘消失注册键盘的通知 + * + * @param isPanGestured 手势的需要与否 + */ +- (void)setupPanGestureControlKeyboardHide:(BOOL)isPanGestured; + +/** + * 不需要根据是否需要手势控制键盘消失remove键盘的通知,因为注册的时候,已经固定了这里是否需要释放手势对象了 + * + * @param isPanGestured 根据注册通知里面的YES or NO来进行设置,千万别搞错了 + */ +- (void)disSetupPanGestureControlKeyboardHide:(BOOL)isPanGestured; + +/** + * 手势控制的时候,将要开始消失了,意思在UIView动画里面的animation里面,告诉键盘也需要跟着移动了,顺便需要移动inputView的位置啊! + */ +@property (nonatomic, copy) KeyboardWillBeDismissedBlock keyboardWillBeDismissed; + +/** + * 键盘刚好隐藏 + */ +@property (nonatomic, copy) KeyboardDidHideBlock keyboardDidHide; + +/** + * 键盘刚好变换完成 + */ +@property (nonatomic, copy) KeyboardDidShowBlock keyboardDidChange; + +/** + * 手势控制键盘,滑动到某一点的回调 + */ +@property (nonatomic, copy) KeyboardDidScrollToPointBlock keyboardDidScrollToPoint; + +/** + * 手势控制键盘,滑动到键盘以下的某个位置,然后又想撤销隐藏的手势,告诉键盘又要显示出来啦!顺便需要移动inputView的位置啊! + */ +@property (nonatomic, copy) KeyboardWillSnapBackToPointBlock keyboardWillSnapBackToPoint; + +/** + * 键盘状态改变的回调 + */ +@property (nonatomic, copy) KeyboardWillChangeBlock keyboardWillChange; + +/** + * 手势控制键盘的偏移量 + */ +@property (nonatomic, assign) CGFloat messageInputBarHeight; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/UIView+XHRemoteImage.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/UIView+XHRemoteImage.h new file mode 100644 index 0000000..351760d --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/UIView+XHRemoteImage.h @@ -0,0 +1,52 @@ +// +// UIView+XHRemoteImage.h +// MessageDisplayExample +// +// Created by 曾 宪华 on 14-5-30. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import "XHMessageAvatarFactory.h" + +typedef NS_ENUM(NSInteger, UIImageViewURLDownloadState) { + UIImageViewURLDownloadStateUnknown = 0, + UIImageViewURLDownloadStateLoaded, + UIImageViewURLDownloadStateWaitingForLoad, + UIImageViewURLDownloadStateNowLoading, + UIImageViewURLDownloadStateFailed, +}; + +@interface UIView (XHRemoteImage) + +// url +@property (nonatomic, strong) NSURL *url; + +// download state +@property (nonatomic, readonly) UIImageViewURLDownloadState loadingState; + +// +@property (nonatomic, assign) XHMessageAvatarType messageAvatarType; + +// UI +@property (nonatomic, strong) UIView *loadingView; +// Set UIActivityIndicatorView as loadingView +- (void)setDefaultLoadingView; + +// instancetype ++ (id)imageViewWithURL:(NSURL *)url autoLoading:(BOOL)autoLoading; + +// Get instance that has UIActivityIndicatorView as loadingView by default ++ (id)indicatorImageView; ++ (id)indicatorImageViewWithURL:(NSURL *)url autoLoading:(BOOL)autoLoading; + +// Download +- (void)setImageWithURL:(NSURL *)url; +- (void)setImageWithURL:(NSURL *)url placeholer:(UIImage *)placeholerImage; +- (void)setImageWithURL:(NSURL *)url placeholer:(UIImage *)placeholerImage showActivityIndicatorView:(BOOL)show; +- (void)setImageWithURL:(NSURL *)url placeholer:(UIImage *)placeholerImage showActivityIndicatorView:(BOOL)show completionBlock:(void(^)(UIImage *image, NSURL *url, NSError *error))handler; + +- (void)setImageUrl:(NSURL *)url autoLoading:(BOOL)autoLoading; +- (void)load; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHAnnotation.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHAnnotation.h new file mode 100644 index 0000000..64583e3 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHAnnotation.h @@ -0,0 +1,35 @@ +// +// XHAnnotation.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-9. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import + +@interface XHAnnotation : NSObject + +/** + * 实现MKAnnotation协议必须要定义这个属性 + */ +@property (nonatomic, readwrite) CLLocationCoordinate2D coordinate; + +/** + * 标题 + */ +@property (nonatomic, copy) NSString *title; + +/** + * 子标题 + */ +@property (nonatomic, copy) NSString *subtitle; + +@property (nonatomic, strong) CLRegion *region; + +@property (nonatomic, readwrite) CLLocationDistance radius; + +- (id)initWithCLRegion:(CLRegion *)newRegion title:(NSString *)title subtitle:(NSString *)subtitle; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHAudioPlayerHelper.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHAudioPlayerHelper.h new file mode 100755 index 0000000..89ddc12 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHAudioPlayerHelper.h @@ -0,0 +1,46 @@ +// +// XHAudioPlayerHelper.h +// MessageDisplayKit +// +// Created by Aevitx on 14-1-22. +// Copyright (c) 2014年 Aevitx. All rights reserved. +// + +#import +#import + +#import "XHMacro.h" + +@protocol XHAudioPlayerHelperDelegate + +@optional +- (void)didAudioPlayerBeginPlay:(AVAudioPlayer*)audioPlayer; +- (void)didAudioPlayerStopPlay:(AVAudioPlayer*)audioPlayer; +- (void)didAudioPlayerPausePlay:(AVAudioPlayer*)audioPlayer; + +@end + +@interface XHAudioPlayerHelper : NSObject + +@property (nonatomic, strong) AVAudioPlayer *player; + +@property (nonatomic, copy) NSString *playingFileName; + +@property (nonatomic, assign) id delegate; + +@property (nonatomic, strong) NSIndexPath *playingIndexPathInFeedList;//给动态列表用 + ++ (id)shareInstance; + +- (AVAudioPlayer*)player; +- (BOOL)isPlaying; + +- (void)managerAudioWithFileName:(NSString*)amrName toPlay:(BOOL)toPlay; +- (void)pausePlayingAudio;//暂停 +- (void)stopAudio;//停止 + + + +@end + + diff --git a/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageDisplayTextView.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHBaseTableViewCell.h similarity index 64% rename from MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageDisplayTextView.h rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHBaseTableViewCell.h index 198e304..fd51340 100644 --- a/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageDisplayTextView.h +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHBaseTableViewCell.h @@ -1,13 +1,13 @@ // -// XHMessageDisplayTextView.h +// XHBaseTableViewCell.h // MessageDisplayExample // -// Created by qtone-1 on 14-4-28. +// Created by dw_iOS on 14-5-20. // Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. // #import -@interface XHMessageDisplayTextView : UITextView +@interface XHBaseTableViewCell : UITableViewCell @end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHBubblePhotoImageView.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHBubblePhotoImageView.h new file mode 100644 index 0000000..a6ce3ad --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHBubblePhotoImageView.h @@ -0,0 +1,49 @@ +// +// XHBubblePhotoImageView.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-28. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import "XHMessageBubbleFactory.h" + +#define kXHBubblePhotoMargin 8.0f // 上下左右的边距 + +@interface XHBubblePhotoImageView : UIView + +/** + * 发送后,需要显示的图片消息的图片,或者是视频的封面 + */ +@property (nonatomic, strong) UIImage *messagePhoto; + +/** + * 加载网络图片的时候,需要用到转圈的控件 + */ +@property (nonatomic, strong) UIActivityIndicatorView *activityIndicatorView; + +/** + * + * + * @param messagePhoto + * @param bubbleMessageType + */ +/** + * 根据目标图片配置三角形具体位置 + * + * @param messagePhoto 目标图片 + * @param thumbnailUrl 目标图片缩略图的URL链接 + * @param originPhotoUrl 目标图片原图的URL链接 + * @param bubbleMessageType 目标消息类型 + */ +- (void)configureMessagePhoto:(UIImage *)messagePhoto thumbnailUrl:(NSString *)thumbnailUrl originPhotoUrl:(NSString *)originPhotoUrl onBubbleMessageType:(XHBubbleMessageType)bubbleMessageType; + +/** + * 获取消息类型比如发送或接收 + * + * @return 消息类型 + */ +- (XHBubbleMessageType)getBubbleMessageType; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHCacheManager.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHCacheManager.h new file mode 100644 index 0000000..6ff4352 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHCacheManager.h @@ -0,0 +1,51 @@ +// +// XHCacheManager.h +// XHImageViewer +// +// Created by 曾 宪华 on 14-2-18. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import + +@interface XHCacheManager : NSObject + +// instancetype ++ (instancetype)shareCacheManager; ++ (instancetype)cacheManagerWithIdentifier:(NSString *)identifier; + +// file/url to uer ++ (void)limitNumberOfCacheFiles:(NSInteger)numberOfCacheFiles; +- (void)limitNumberOfCacheFiles:(NSInteger)numberOfCacheFiles; + ++ (void)removeCacheForURL:(NSURL *)url; +- (void)removeCacheForURL:(NSURL *)url; + ++ (void)removeCacheDirectory; +- (void)removeCacheDirectory; + ++ (unsigned long long)diskSize; +- (unsigned long long)diskSize; + +// NSData caching ++ (void)storeData:(NSData *)data forURL:(NSURL *)url storeMemoryCache:(BOOL)storeMemoryCache; +- (void)storeData:(NSData *)data forURL:(NSURL *)url storeMemoryCache:(BOOL)storeMemoryCache; + ++ (NSData *)localCachedDataWithURL:(NSURL *)url; +- (NSData *)localCachedDataWithURL:(NSURL *)url; + ++ (NSData *)dataWithURL:(NSURL *)url storeMemoryCache:(BOOL)storeMemoryCache; +- (NSData *)dataWithURL:(NSURL *)url storeMemoryCache:(BOOL)storeMemoryCache; + ++ (BOOL)existsDataForURL:(NSURL *)url; +- (BOOL)existsDataForURL:(NSURL *)url; + +// UIImage caching ++ (void)storeMemoryCacheWithImage:(UIImage *)image forURL:(NSURL *)url; +- (void)storeMemoryCacheWithImage:(UIImage *)image forURL:(NSURL *)url; + ++ (UIImage *)imageWithURL:(NSURL *)url storeMemoryCache:(BOOL)storeMemoryCache; +- (UIImage *)imageWithURL:(NSURL *)url storeMemoryCache:(BOOL)storeMemoryCache; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHCaptureHelper.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHCaptureHelper.h new file mode 100644 index 0000000..8e62b50 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHCaptureHelper.h @@ -0,0 +1,21 @@ +// +// XHCaptureHelper.h +// MessageDisplayExample +// +// Created by 曾 宪华 on 14-5-25. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +#import + +typedef void(^DidOutputSampleBufferBlock)(CMSampleBufferRef sampleBuffer); + +@interface XHCaptureHelper : NSObject + +- (void)setDidOutputSampleBufferHandle:(DidOutputSampleBufferBlock)didOutputSampleBuffer; + +- (void)showCaptureOnView:(UIView *)preview; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHConfigurationHelper.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHConfigurationHelper.h new file mode 100644 index 0000000..bae0c0f --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHConfigurationHelper.h @@ -0,0 +1,54 @@ +// +// XHConfigurationHelper.h +// MessageDisplayKit +// +// Created by Jack_iMac on 15/6/30. +// Copyright (c) 2015年 iOS软件开发工程师 曾宪华 热衷于简洁的UI QQ:543413507 http://www.pailixiu.com/blog http://www.pailixiu.com/Jack/personal. All rights reserved. +// + +#import + +// (Input Tool Bar Style Key) +extern NSString *kXHMessageInputViewVoiceNormalImageNameKey; +extern NSString *kXHMessageInputViewVoiceHLImageNameKey; +extern NSString *kXHMessageInputViewVoiceHolderImageNameKey; +extern NSString *kXHMessageInputViewVoiceHolderHLImageNameKey; +extern NSString *kXHMessageInputViewExtensionNormalImageNameKey; +extern NSString *kXHMessageInputViewExtensionHLImageNameKey; +extern NSString *kXHMessageInputViewKeyboardNormalImageNameKey; +extern NSString *kXHMessageInputViewKeyboardHLImageNameKey; +extern NSString *kXHMessageInputViewEmotionNormalImageNameKey; +extern NSString *kXHMessageInputViewEmotionHLImageNameKey; +extern NSString *kXHMessageInputViewBackgroundImageNameKey; + +// (Message Table Style Key) +extern NSString *kXHMessageTablePlaceholderImageNameKey; +extern NSString *kXHMessageTableReceivingSolidImageNameKey; +extern NSString *kXHMessageTableSendingSolidImageNameKey; +extern NSString *kXHMessageTableVoiceUnreadImageNameKey; +extern NSString *kXHMessageTableAvatarPalceholderImageNameKey; +extern NSString *kXHMessageTableTimestampBackgroundColorKey; +extern NSString *kXHMessageTableTimestampTextColorKey; +extern NSString *kXHMessageTableAvatarTypeKey; // XHMessageAvatarType for NSNumber, if kXHMessageTableCustomLoadAvatarNetworImageKey is YES, kXHMessageTableAvatarTypeKey is invalid +extern NSString *kXHMessageTableCustomLoadAvatarNetworImageKey; // for NSNumber(BOOL) + +// 优先控制MDK的UI控件样式,比如输入框的按钮图 +@interface XHConfigurationHelper : NSObject + +@property (nonatomic, strong, readonly) NSArray *popMenuTitles; + +@property (nonatomic, strong, readonly) NSDictionary *messageInputViewStyle; + +@property (nonatomic, strong, readonly) NSDictionary *messageTableStyle; + ++ (instancetype)appearance; + +- (void)setupPopMenuTitles:(NSArray *)popMenuTitles; + +// The key from (Input Tool Bar Style Key) +- (void)setupMessageInputViewStyle:(NSDictionary *)messageInputViewStyle; + +// The key from (Message Table Style Key) +- (void)setupMessageTableStyle:(NSDictionary *)messageTableStyle; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHDisplayEmotionViewController.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHDisplayEmotionViewController.h new file mode 100644 index 0000000..573497b --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHDisplayEmotionViewController.h @@ -0,0 +1,13 @@ +// +// XHDisplayEmotionViewController.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-6. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +@interface XHDisplayEmotionViewController : UIViewController + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHDisplayLocationViewController.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHDisplayLocationViewController.h new file mode 100644 index 0000000..82663ab --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHDisplayLocationViewController.h @@ -0,0 +1,18 @@ +// +// XHDisplayLocationViewController.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-6. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import + +#import "XHMessageModel.h" + +@interface XHDisplayLocationViewController : UIViewController + +@property (nonatomic, strong) id message; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHDisplayMediaViewController.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHDisplayMediaViewController.h new file mode 100644 index 0000000..920bb03 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHDisplayMediaViewController.h @@ -0,0 +1,16 @@ +// +// XHDisplayMediaViewController.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-6. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import "XHMessageModel.h" + +@interface XHDisplayMediaViewController : UIViewController + +@property (nonatomic, strong) id message; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHDisplayTextViewController.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHDisplayTextViewController.h new file mode 100644 index 0000000..6fb80d0 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHDisplayTextViewController.h @@ -0,0 +1,16 @@ +// +// XHDisplayTextViewController.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-6. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import "XHMessageModel.h" + +@interface XHDisplayTextViewController : UIViewController + +@property (nonatomic, strong) id message; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHEmotion.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHEmotion.h new file mode 100644 index 0000000..0b84004 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHEmotion.h @@ -0,0 +1,26 @@ +// +// XHEmotion.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-3. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +#define kXHEmotionImageViewSize 60 +#define kXHEmotionMinimumLineSpacing 12 + +@interface XHEmotion : NSObject + +/** + * gif表情的封面图 + */ +@property (nonatomic, strong) UIImage *emotionConverPhoto; + +/** + * gif表情的路径 + */ +@property (nonatomic, copy) NSString *emotionPath; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHEmotionCollectionViewCell.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHEmotionCollectionViewCell.h new file mode 100644 index 0000000..2b7ed72 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHEmotionCollectionViewCell.h @@ -0,0 +1,21 @@ +// +// XHEmotionCollectionViewCell.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-3. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import "XHEmotion.h" + +#define kXHEmotionCollectionViewCellIdentifier @"XHEmotionCollectionViewCellIdentifier" + +@interface XHEmotionCollectionViewCell : UICollectionViewCell + +/** + * 需要显示和配置的gif表情对象 + */ +@property (nonatomic, strong) XHEmotion *emotion; + +@end diff --git a/Example/MessageDisplayExample/MessageDisplayExample/AppDelegate.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHEmotionCollectionViewFlowLayout.h similarity index 53% rename from Example/MessageDisplayExample/MessageDisplayExample/AppDelegate.h rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHEmotionCollectionViewFlowLayout.h index 6062e0c..bea3149 100644 --- a/Example/MessageDisplayExample/MessageDisplayExample/AppDelegate.h +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHEmotionCollectionViewFlowLayout.h @@ -1,15 +1,14 @@ // -// AppDelegate.h +// XHEmotionCollectionViewFlowLayout.h // MessageDisplayExample // -// Created by qtone-1 on 14-4-24. +// Created by HUAJIE-1 on 14-5-3. // Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. // #import +#import "XHEmotionManager.h" -@interface AppDelegate : UIResponder - -@property (strong, nonatomic) UIWindow *window; +@interface XHEmotionCollectionViewFlowLayout : UICollectionViewFlowLayout @end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHEmotionManager.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHEmotionManager.h new file mode 100644 index 0000000..8fe48be --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHEmotionManager.h @@ -0,0 +1,20 @@ +// +// XHEmotionManager.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-3. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import "XHEmotion.h" + +@interface XHEmotionManager : NSObject + +@property (nonatomic, copy) NSString *emotionName; +/** + * 某一类表情的数据源 + */ +@property (nonatomic, strong) NSMutableArray *emotions; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHEmotionManagerView.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHEmotionManagerView.h new file mode 100644 index 0000000..a807b5e --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHEmotionManagerView.h @@ -0,0 +1,75 @@ +// +// XHEmotionManagerView.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-3. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import "XHEmotionManager.h" +#import "XHMacro.h" + +#define kXHEmotionPerRowItemCount (kIsiPad ? 10 : 4) +#define kXHEmotionPageControlHeight 38 +#define kXHEmotionSectionBarHeight 36 + +@protocol XHEmotionManagerViewDelegate + +@optional +/** + * 第三方gif表情被点击的回调事件 + * + * @param emotion 被点击的gif表情Model + * @param indexPath 被点击的位置 + */ +- (void)didSelecteEmotion:(XHEmotion *)emotion atIndexPath:(NSIndexPath *)indexPath; + +@end + +@protocol XHEmotionManagerViewDataSource + +@required +/** + * 通过数据源获取统一管理一类表情的回调方法 + * + * @param column 列数 + * + * @return 返回统一管理表情的Model对象 + */ +- (XHEmotionManager *)emotionManagerForColumn:(NSInteger)column; + +/** + * 通过数据源获取一系列的统一管理表情的Model数组 + * + * @return 返回包含统一管理表情Model元素的数组 + */ +- (NSArray *)emotionManagersAtManager; + +/** + * 通过数据源获取总共有多少类gif表情 + * + * @return 返回总数 + */ +- (NSInteger)numberOfEmotionManagers; + +@end + +@interface XHEmotionManagerView : UIView + +@property (nonatomic, weak) id delegate; + +@property (nonatomic, weak) id dataSource; + +/** + * 是否显示表情商店的按钮 + */ +@property (nonatomic, assign) BOOL isShowEmotionStoreButton; // default is YES + +/** + * 根据数据源刷新UI布局和数据 + */ +- (void)reloadData; + + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHEmotionSectionBar.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHEmotionSectionBar.h new file mode 100644 index 0000000..853a28f --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHEmotionSectionBar.h @@ -0,0 +1,41 @@ +// +// XHEmotionSectionBar.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-3. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import "XHEmotionManager.h" + +@protocol XHEmotionSectionBarDelegate + +/** + * 点击某一类gif表情的回调方法 + * + * @param emotionManager 被点击的管理表情Model对象 + * @param section 被点击的位置 + */ +- (void)didSelecteEmotionManager:(XHEmotionManager *)emotionManager atSection:(NSInteger)section; + +@end + +@interface XHEmotionSectionBar : UIView + +@property (nonatomic, weak) id delegate; + +/** + * 数据源 + */ +@property (nonatomic, strong) NSArray *emotionManagers; + +- (instancetype)initWithFrame:(CGRect)frame showEmotionStoreButton:(BOOL)isShowEmotionStoreButtoned; + + +/** + * 根据数据源刷新UI布局和数据 + */ +- (void)reloadData; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHFileAttribute.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHFileAttribute.h new file mode 100644 index 0000000..5c33dd1 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHFileAttribute.h @@ -0,0 +1,18 @@ +// +// XHFileAttribute.h +// XHImageViewer +// +// Created by 曾 宪华 on 14-2-18. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +@interface XHFileAttribute : NSObject + +@property (nonatomic, strong) NSString *filePath; +@property (nonatomic, strong) NSDictionary *fileAttributes; +@property (nonatomic, readonly) NSDate *fileModificationDate; +- (id)initWithPath:(NSString *)filePath attributes:(NSDictionary *)attributes; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHFoundationMacro.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHFoundationMacro.h new file mode 100644 index 0000000..9055804 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHFoundationMacro.h @@ -0,0 +1,39 @@ +// +// XHFoundationMacro.h +// MessageDisplayExample +// +// Created by dw_iOS on 14-5-22. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#ifndef MessageDisplayExample_XHFoundationMacro_h +#define MessageDisplayExample_XHFoundationMacro_h + +#ifdef DEBUG +# define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); +#else +# define DLog(...) +#endif + +// block self +#define WEAKSELF typeof(self) __weak weakSelf = self; +#define STRONGSELF typeof(weakSelf) __strong strongSelf = weakSelf; + +// device verson float value +#define CURRENT_SYS_VERSION [[[UIDevice currentDevice] systemVersion] floatValue] + +// Size +#define MDK_SCREEN_WIDTH [[UIScreen mainScreen] bounds].size.width +#define MDK_SCREEN_HEIGHT [[UIScreen mainScreen] bounds].size.height + +// iPad +#define kIsiPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) +#define kIs_iPhone (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) +#define kIs_iPhone_6 (kIs_iPhone && MDK_SCREEN_HEIGHT == 667.0) +#define kIs_iPhone_6P (kIs_iPhone && MDK_SCREEN_HEIGHT == 736.0) + +// image STRETCH +#define XH_STRETCH_IMAGE(image, edgeInsets) (CURRENT_SYS_VERSION < 6.0 ? [image stretchableImageWithLeftCapWidth:edgeInsets.left topCapHeight:edgeInsets.top] : [image resizableImageWithCapInsets:edgeInsets resizingMode:UIImageResizingModeStretch]) + + +#endif diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHHTTPClient.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHHTTPClient.h new file mode 100644 index 0000000..557a726 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHHTTPClient.h @@ -0,0 +1,28 @@ +// +// XHHTTPClient.h +// MessageDisplayExample +// +// Created by 曾 宪华 on 14-5-30. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +#import "XHOperationNetworkKit.h" + +#define kXHBaseHomeURL @"http://.......set there" + +#define XHHTTPClientTimeoutInterval 30 + +@interface XHHTTPClient : NSObject + ++ (void)GETPath:(NSString *)urlString parameters:(NSDictionary *)parameters jsonSuccessHandler:(XHJSONSuccessHandler)jsonSuccessHandler + failureHandler:(XHHTTPFailureHandler)failureHandler; + ++ (void)POSTPath:(NSString *)urlString parameters:(NSDictionary *)parameters jsonSuccessHandler:(XHJSONSuccessHandler)jsonSuccessHandler + failureHandler:(XHHTTPFailureHandler)failureHandler; + ++ (void)DELETEPath:(NSString *)urlString parameters:(NSDictionary *)parameters jsonSuccessHandler:(XHJSONSuccessHandler)jsonSuccessHandler + failureHandler:(XHHTTPFailureHandler)failureHandler; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHLocationHelper.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHLocationHelper.h new file mode 100644 index 0000000..636aa1e --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHLocationHelper.h @@ -0,0 +1,18 @@ +// +// XHLocationHelper.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-8. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import + +typedef void(^DidGetGeolocationsCompledBlock)(NSArray *placemarks); + +@interface XHLocationHelper : NSObject + +- (void)getCurrentGeolocationsCompled:(DidGetGeolocationsCompledBlock)compled; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMacro.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMacro.h new file mode 100644 index 0000000..6d48864 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMacro.h @@ -0,0 +1,24 @@ +// +// XHMacro.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#ifndef MessageDisplayExample_XHMacro_h +#define MessageDisplayExample_XHMacro_h + +// Foundation 框架宏定义 +#import "XHFoundationMacro.h" + +// UIKit 框架宏定义 +#import "XHUIKitMacro.h" + + +// User Default Configure Value + +// Max record Time +#define kVoiceRecorderTotalTime 60.0 + +#endif diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessage.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessage.h new file mode 100644 index 0000000..cf83021 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessage.h @@ -0,0 +1,166 @@ +// +// XHMessage.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import +#import "XHMessageModel.h" + +@interface XHMessage : NSObject + +@property (nonatomic, copy) NSString *text; + +@property (nonatomic, strong) UIImage *photo; +@property (nonatomic, copy) NSString *thumbnailUrl; +@property (nonatomic, copy) NSString *originPhotoUrl; + +@property (nonatomic, strong) UIImage *videoConverPhoto; +@property (nonatomic, copy) NSString *videoPath; +@property (nonatomic, copy) NSString *videoUrl; + +@property (nonatomic, copy) NSString *voicePath; +@property (nonatomic, copy) NSString *voiceUrl; +@property (nonatomic, copy) NSString *voiceDuration; + +@property (nonatomic, copy) NSString *emotionPath; + +@property (nonatomic, strong) UIImage *localPositionPhoto; +@property (nonatomic, copy) NSString *geolocations; +@property (nonatomic, strong) CLLocation *location; + +@property (nonatomic, strong) UIImage *avatar; +@property (nonatomic, copy) NSString *avatarUrl; + +@property (nonatomic, copy) NSString *sender; + +@property (nonatomic, strong) NSDate *timestamp; + +@property (nonatomic, assign) BOOL shouldShowUserName; + +@property (nonatomic, assign) BOOL sended; + +@property (nonatomic, assign) XHBubbleMessageMediaType messageMediaType; + +@property (nonatomic, assign) XHBubbleMessageType bubbleMessageType; + +@property (nonatomic) BOOL isRead; + + +/** + * 初始化文本消息 + * + * @param text 发送的目标文本 + * @param sender 发送者的名称 + * @param date 发送的时间 + * + * @return 返回Message model 对象 + */ +- (instancetype)initWithText:(NSString *)text + sender:(NSString *)sender + timestamp:(NSDate *)timestamp; + +/** + * 初始化图片类型的消息 + * + * @param photo 目标图片 + * @param thumbnailUrl 目标图片在服务器的缩略图地址 + * @param originPhotoUrl 目标图片在服务器的原图地址 + * @param sender 发送者 + * @param date 发送时间 + * + * @return 返回Message model 对象 + */ +- (instancetype)initWithPhoto:(UIImage *)photo + thumbnailUrl:(NSString *)thumbnailUrl + originPhotoUrl:(NSString *)originPhotoUrl + sender:(NSString *)sender + timestamp:(NSDate *)timestamp; + +/** + * 初始化视频类型的消息 + * + * @param videoConverPhoto 目标视频的封面图 + * @param videoPath 目标视频的本地路径,如果是下载过,或者是从本地发送的时候,会存在 + * @param videoUrl 目标视频在服务器上的地址 + * @param sender 发送者 + * @param date 发送时间 + * + * @return 返回Message model 对象 + */ +- (instancetype)initWithVideoConverPhoto:(UIImage *)videoConverPhoto + videoPath:(NSString *)videoPath + videoUrl:(NSString *)videoUrl + sender:(NSString *)sender + timestamp:(NSDate *)timestamp; + +/** + * 初始化语音类型的消息 + * + * @param voicePath 目标语音的本地路径 + * @param voiceUrl 目标语音在服务器的地址 + * @param voiceDuration 目标语音的时长 + * @param sender 发送者 + * @param date 发送时间 + * + * @return 返回Message model 对象 + */ +- (instancetype)initWithVoicePath:(NSString *)voicePath + voiceUrl:(NSString *)voiceUrl + voiceDuration:(NSString *)voiceDuration + sender:(NSString *)sender + timestamp:(NSDate *)timestamp; + +/** + * 初始化语音类型的消息。增加已读未读标记 + * + * @param voicePath 目标语音的本地路径 + * @param voiceUrl 目标语音在服务器的地址 + * @param voiceDuration 目标语音的时长 + * @param sender 发送者 + * @param date 发送时间 + * @param isRead 已读未读标记 + * + * @return 返回Message model 对象 + */ +- (instancetype)initWithVoicePath:(NSString *)voicePath + voiceUrl:(NSString *)voiceUrl + voiceDuration:(NSString *)voiceDuration + sender:(NSString *)sender + timestamp:(NSDate *)timestamp + isRead:(BOOL)isRead; + +/** + * 初始化gif表情类型的消息 + * + * @param emotionPath 表情的路径 + * @param sender 发送者 + * @param timestamp 发送时间 + * + * @return 返回Message model 对象 + */ +- (instancetype)initWithEmotionPath:(NSString *)emotionPath + sender:(NSString *)sender + timestamp:(NSDate *)timestamp; + +/** + * 初始化地理位置的消息 + * + * @param localPositionPhoto 地理位置默认显示的图 + * @param geolocations 地理位置的信息 + * @param location 地理位置的经纬度 + * @param sender 发送者 + * @param timestamp 发送时间 + * + * @return 返回Message model 对象 + */ +- (instancetype)initWithLocalPositionPhoto:(UIImage *)localPositionPhoto + geolocations:(NSString *)geolocations + location:(CLLocation *)location + sender:(NSString *)sender + timestamp:(NSDate *)timestamp; + +@end diff --git a/MessageDisplayKit/Classes/Factorys/XHMessageAvatorFactory.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageAvatarFactory.h similarity index 50% rename from MessageDisplayKit/Classes/Factorys/XHMessageAvatorFactory.h rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageAvatarFactory.h index 8322771..acd5319 100644 --- a/MessageDisplayKit/Classes/Factorys/XHMessageAvatorFactory.h +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageAvatarFactory.h @@ -1,8 +1,8 @@ // -// XHMessageAvatorFactory.h +// XHMessageAvatarFactory.h // MessageDisplayExample // -// Created by qtone-1 on 14-4-25. +// Created by HUAJIE-1 on 14-4-25. // Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. // @@ -10,17 +10,17 @@ // 头像大小以及头像与其他控件的距离 static CGFloat const kXHAvatarImageSize = 40.0f; -static CGFloat const kXHAlbumAvatorSpacing = 15.0f; +static CGFloat const kXHAlbumAvatarSpacing = 15.0f; -typedef NS_ENUM(NSInteger, XHMessageAvatorType) { - XHMessageAvatorTypeNormal = 0, - XHMessageAvatorTypeSquare, - XHMessageAvatorTypeCircle +typedef NS_ENUM(NSInteger, XHMessageAvatarType) { + XHMessageAvatarTypeNormal = 0, + XHMessageAvatarTypeSquare, + XHMessageAvatarTypeCircle }; -@interface XHMessageAvatorFactory : NSObject +@interface XHMessageAvatarFactory : NSObject + (UIImage *)avatarImageNamed:(UIImage *)originImage - messageAvatorType:(XHMessageAvatorType)type; + messageAvatarType:(XHMessageAvatarType)type; @end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageBubbleFactory.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageBubbleFactory.h new file mode 100644 index 0000000..6f225da --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageBubbleFactory.h @@ -0,0 +1,57 @@ +// +// XHMessageBubbleFactory.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-25. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +typedef NS_ENUM(NSInteger, XHBubbleMessageType) { + XHBubbleMessageTypeSending = 0, // 发送 + XHBubbleMessageTypeReceiving // 接收 +}; + +typedef NS_ENUM(NSUInteger, XHBubbleImageViewStyle) { + XHBubbleImageViewStyleWeChat = 0 +}; + +typedef NS_ENUM(NSInteger, XHBubbleMessageMediaType) { + XHBubbleMessageMediaTypeText = 0, + XHBubbleMessageMediaTypePhoto = 1, + XHBubbleMessageMediaTypeVideo = 2, + XHBubbleMessageMediaTypeVoice = 3, + XHBubbleMessageMediaTypeEmotion = 4, + XHBubbleMessageMediaTypeLocalPosition = 5, +}; + +typedef NS_ENUM(NSInteger, XHBubbleMessageMenuSelecteType) { + XHBubbleMessageMenuSelecteTypeTextCopy = 0, + XHBubbleMessageMenuSelecteTypeTextTranspond = 1, + XHBubbleMessageMenuSelecteTypeTextFavorites = 2, + XHBubbleMessageMenuSelecteTypeTextMore = 3, + + XHBubbleMessageMenuSelecteTypePhotoCopy = 4, + XHBubbleMessageMenuSelecteTypePhotoTranspond = 5, + XHBubbleMessageMenuSelecteTypePhotoFavorites = 6, + XHBubbleMessageMenuSelecteTypePhotoMore = 7, + + XHBubbleMessageMenuSelecteTypeVideoTranspond = 8, + XHBubbleMessageMenuSelecteTypeVideoFavorites = 9, + XHBubbleMessageMenuSelecteTypeVideoMore = 10, + + XHBubbleMessageMenuSelecteTypeVoicePlay = 11, + XHBubbleMessageMenuSelecteTypeVoiceFavorites = 12, + XHBubbleMessageMenuSelecteTypeVoiceTurnToText = 13, + XHBubbleMessageMenuSelecteTypeVoiceMore = 14, +}; + +@interface XHMessageBubbleFactory : NSObject + ++ (UIImage *)bubbleImageViewForType:(XHBubbleMessageType)type + style:(XHBubbleImageViewStyle)style + meidaType:(XHBubbleMessageMediaType)mediaType; + + +@end diff --git a/MessageDisplayKit/Classes/Categorys/NSString/NSString+XHDiskSizeTransfrom.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageBubbleHelper.h similarity index 57% rename from MessageDisplayKit/Classes/Categorys/NSString/NSString+XHDiskSizeTransfrom.h rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageBubbleHelper.h index 5fda817..0295c17 100644 --- a/MessageDisplayKit/Classes/Categorys/NSString/NSString+XHDiskSizeTransfrom.h +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageBubbleHelper.h @@ -1,5 +1,5 @@ // -// NSString+XHDiskSizeTransfrom.h +// XHMessageBubbleHelper.h // MessageDisplayExample // // Created by 曾 宪华 on 14-6-2. @@ -8,8 +8,10 @@ #import -@interface NSString (XHDiskSizeTransfrom) +@interface XHMessageBubbleHelper : NSObject -+ (NSString *)transformedValue:(long long)value; ++ (instancetype)sharedMessageBubbleHelper; + +- (NSAttributedString *)bubbleAttributtedStringWithText:(NSString *)text; @end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageBubbleView.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageBubbleView.h new file mode 100644 index 0000000..c363f1d --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageBubbleView.h @@ -0,0 +1,125 @@ +// +// XHMessageBubbleView.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +// Views +#import "XHMessageTextView.h" +#import "XHMessageInputView.h" +#import "XHBubblePhotoImageView.h" +#import "SETextView.h" + +#import "FLAnimatedImageView.h" +#import "FLAnimatedImage.h" + +// Macro +#import "XHMacro.h" + +// Model +#import "XHMessage.h" + +// Factorys +#import "XHMessageAvatarFactory.h" +#import "XHMessageVoiceFactory.h" + +#define kXHMessageBubbleDisplayMaxLine 200 + +#define kXHTextLineSpacing 3.0 + +@interface XHMessageBubbleView : UIView + +/** + * 目标消息Model对象 + */ +@property (nonatomic, strong, readonly) id message; + +/** + * 自定义显示文本消息控件,子类化的原因有两个,第一个是屏蔽Menu的显示。第二是传递手势到下一层,因为文本需要双击的手势 + */ +@property (nonatomic, weak, readonly) SETextView *displayTextView; + +/** + * 用于显示气泡的ImageView控件 + */ +@property (nonatomic, weak, readonly) UIImageView *bubbleImageView; + +/** + * 专门用于gif表情显示控件 + */ +@property (nonatomic, weak, readonly) FLAnimatedImageView *emotionImageView; + +/** + * 用于显示语音的控件,并且支持播放动画 + */ +@property (nonatomic, weak, readonly) UIImageView *animationVoiceImageView; + +/** + * 用于显示语音未读的控件,小圆点 + */ +@property (nonatomic, weak, readonly) UIImageView *voiceUnreadDotImageView; + +/** + * 用于显示语音时长的label + */ +@property (nonatomic, weak, readonly) UILabel *voiceDurationLabel; + +/** + * 用于显示仿微信发送图片的控件 + */ +@property (nonatomic, weak, readonly) XHBubblePhotoImageView *bubblePhotoImageView; + +/** + * 显示语音播放的图片控件 + */ +@property (nonatomic, weak, readonly) UIImageView *videoPlayImageView; + +/** + * 显示地理位置的文本控件 + */ +@property (nonatomic, weak, readonly) UILabel *geolocationsLabel; + +/** + * 设置文本消息的字体 + */ +@property (nonatomic, strong) UIFont *font UI_APPEARANCE_SELECTOR; + +/** + * 初始化消息内容显示控件的方法 + * + * @param frame 目标Frame + * @param message 目标消息Model对象 + * + * @return 返回XHMessageBubbleView类型的对象 + */ +- (instancetype)initWithFrame:(CGRect)frame + message:(id )message; + +/** + * 获取气泡相对于父试图的位置 + * + * @return 返回气泡的位置 + */ +- (CGRect)bubbleFrame; + +/** + * 根据消息Model对象配置消息显示内容 + * + * @param message 目标消息Model对象 + */ +- (void)configureCellWithMessage:(id )message; + +/** + * 根据消息Model对象计算消息内容的高度 + * + * @param message 目标消息Model对象 + * + * @return 返回所需高度 + */ ++ (CGFloat)calculateCellHeightWithMessage:(id )message; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageInputView.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageInputView.h new file mode 100644 index 0000000..8b7e408 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageInputView.h @@ -0,0 +1,171 @@ +// +// XHMessageInputView.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +#import "XHMessageTextView.h" + +typedef NS_ENUM(NSInteger, XHMessageInputViewStyle) { + // iOS7样式的 + XHMessageInputViewStyleFlat +}; + +@protocol XHMessageInputViewDelegate + +@required + +/** + * 输入框刚好开始编辑 + * + * @param messageInputTextView 输入框对象 + */ +- (void)inputTextViewDidBeginEditing:(XHMessageTextView *)messageInputTextView; + +/** + * 输入框将要开始编辑 + * + * @param messageInputTextView 输入框对象 + */ +- (void)inputTextViewWillBeginEditing:(XHMessageTextView *)messageInputTextView; + +@optional + +/** + * 在发送文本和语音之间发送改变时,会触发这个回调函数 + * + * @param changed 是否改为发送语音状态 + */ +- (void)didChangeSendVoiceAction:(BOOL)changed; + +/** + * 发送文本消息,包括系统的表情 + * + * @param text 目标文本消息 + */ +- (void)didSendTextAction:(NSString *)text; + +/** + * 点击+号按钮Action + */ +- (void)didSelectedMultipleMediaAction; + +/** + * 按下錄音按鈕 "準備" 錄音 + */ +- (void)prepareRecordingVoiceActionWithCompletion:(BOOL (^)(void))completion; +/** + * 开始录音 + */ +- (void)didStartRecordingVoiceAction; +/** + * 手指向上滑动取消录音 + */ +- (void)didCancelRecordingVoiceAction; +/** + * 松开手指完成录音 + */ +- (void)didFinishRecoingVoiceAction; +/** + * 当手指离开按钮的范围内时,主要为了通知外部的HUD + */ +- (void)didDragOutsideAction; +/** + * 当手指再次进入按钮的范围内时,主要也是为了通知外部的HUD + */ +- (void)didDragInsideAction; + +/** + * 发送第三方表情 + * + * @param facePath 目标表情的本地路径 + */ +- (void)didSendFaceAction:(BOOL)sendFace; + +@end + +@interface XHMessageInputView : UIImageView + +@property (nonatomic, weak) id delegate; + +/** + * 用于输入文本消息的输入框 + */ +@property (nonatomic, weak, readonly) XHMessageTextView *inputTextView; + +/** + * 当前输入工具条的样式 + */ +@property (nonatomic, assign) XHMessageInputViewStyle messageInputViewStyle; // default is XHMessageInputViewStyleFlat + +/** + * 是否允许发送语音 + */ +@property (nonatomic, assign) BOOL allowsSendVoice; // default is YES + +/** + * 是否允许发送多媒体 + */ +@property (nonatomic, assign) BOOL allowsSendMultiMedia; // default is YES + +/** + * 是否支持发送表情 + */ +@property (nonatomic, assign) BOOL allowsSendFace; // default is YES + +/** + * 切换文本和语音的按钮 + */ +@property (nonatomic, weak, readonly) UIButton *voiceChangeButton; + +/** + * +号按钮 + */ +@property (nonatomic, weak, readonly) UIButton *multiMediaSendButton; + +/** + * 第三方表情按钮 + */ +@property (nonatomic, weak, readonly) UIButton *faceSendButton; + +/** + * 语音录制按钮 + */ +@property (nonatomic, weak, readonly) UIButton *holdDownButton; + +#pragma mark - Message input view + +/** + * 动态改变高度 + * + * @param changeInHeight 目标变化的高度 + */ +- (void)adjustTextViewHeightBy:(CGFloat)changeInHeight; + +/** + * 获取输入框内容字体行高 + * + * @return 返回行高 + */ ++ (CGFloat)textViewLineHeight; + +/** + * 获取最大行数 + * + * @return 返回最大行数 + */ ++ (CGFloat)maxLines; + +/** + * 获取根据最大行数和每行高度计算出来的最大显示高度 + * + * @return 返回最大显示高度 + */ ++ (CGFloat)maxHeight; + + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageModel.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageModel.h new file mode 100644 index 0000000..b58ee20 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageModel.h @@ -0,0 +1,57 @@ +// +// XHMessageModel.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import +#import "XHMessageBubbleFactory.h" + +@class XHMessage; + +@protocol XHMessageModel + +@required +- (NSString *)text; + +- (UIImage *)photo; +- (NSString *)thumbnailUrl; +- (NSString *)originPhotoUrl; + +- (UIImage *)videoConverPhoto; +- (NSString *)videoPath; +- (NSString *)videoUrl; + +- (NSString *)voicePath; +- (NSString *)voiceUrl; +- (NSString *)voiceDuration; + +- (UIImage *)localPositionPhoto; +- (NSString *)geolocations; +- (CLLocation *)location; + +- (NSString *)emotionPath; + +- (UIImage *)avatar; +- (NSString *)avatarUrl; + +- (XHBubbleMessageMediaType)messageMediaType; + +- (XHBubbleMessageType)bubbleMessageType; + +@optional + +- (BOOL)shouldShowUserName; + +- (NSString *)sender; + +- (NSDate *)timestamp; + +- (BOOL)isRead; +- (void)setIsRead:(BOOL)isRead; + +@end + diff --git a/MessageDisplayKit/Classes/Controllers/XHBaseTabBarController/XHBaseTabBarController.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageTableView.h similarity index 63% rename from MessageDisplayKit/Classes/Controllers/XHBaseTabBarController/XHBaseTabBarController.h rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageTableView.h index 7beb558..432bf08 100644 --- a/MessageDisplayKit/Classes/Controllers/XHBaseTabBarController/XHBaseTabBarController.h +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageTableView.h @@ -1,13 +1,13 @@ // -// XHBaseTabBarController.h +// XHMessageTableView.h // MessageDisplayExample // -// Created by qtone-1 on 14-5-6. +// Created by HUAJIE-1 on 14-4-24. // Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. // #import -@interface XHBaseTabBarController : UITabBarController +@interface XHMessageTableView : UITableView @end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageTableViewCell.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageTableViewCell.h new file mode 100644 index 0000000..e8b84db --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageTableViewCell.h @@ -0,0 +1,126 @@ +// +// XHMessageTableViewCell.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +#import "XHBaseTableViewCell.h" +#import "XHConfigurationHelper.h" + +#import "XHMessageBubbleView.h" +#import "UIView+XHRemoteImage.h" + +#import "LKBadgeView.h" + +@class XHMessageTableViewCell; + +@protocol XHMessageTableViewCellDelegate + +@optional +/** + * 点击多媒体消息的时候统一触发这个回调 + * + * @param message 被操作的目标消息Model + * @param indexPath 该目标消息在哪个IndexPath里面 + * @param messageTableViewCell 目标消息在该Cell上 + */ +- (void)multiMediaMessageDidSelectedOnMessage:(id )message atIndexPath:(NSIndexPath *)indexPath onMessageTableViewCell:(XHMessageTableViewCell *)messageTableViewCell; + +/** + * 双击文本消息,触发这个回调 + * + * @param message 被操作的目标消息Model + * @param indexPath 该目标消息在哪个IndexPath里面 + */ +- (void)didDoubleSelectedOnTextMessage:(id )message atIndexPath:(NSIndexPath *)indexPath; + +/** + * 点击消息发送者的头像回调方法 + * + * @param indexPath 该目标消息在哪个IndexPath里面 + */ +- (void)didSelectedAvatarOnMessage:(id )message atIndexPath:(NSIndexPath *)indexPath; + +/** + * Menu Control Selected Item + * + * @param bubbleMessageMenuSelecteType 点击item后,确定点击类型 + */ +- (void)menuDidSelectedAtBubbleMessageMenuSelecteType:(XHBubbleMessageMenuSelecteType)bubbleMessageMenuSelecteType; + +@end + +@interface XHMessageTableViewCell : XHBaseTableViewCell + +@property (nonatomic, weak) id delegate; + +/** + * 自定义多媒体消息内容View + */ +@property (nonatomic, weak, readonly) XHMessageBubbleView *messageBubbleView; + +/** + * 头像按钮 + */ +@property (nonatomic, weak, readonly) UIButton *avatarButton; + +/** + * 用户名标签 + */ +@property (nonatomic, weak, readonly) UILabel *userNameLabel; + +/** + * 时间轴Label + */ +@property (nonatomic, weak, readonly) LKBadgeView *timestampLabel; + +/** + * Cell所在的位置,用于Cell delegate回调 + */ +@property (nonatomic, strong) NSIndexPath *indexPath; + +/** + * 获取消息类型 + * + * @return 返回消息类型,比如是发送消息,又或者是接收消息 + */ +- (XHBubbleMessageType)bubbleMessageType; + +/** + * 初始化Cell的方法,必须先调用这个,不然不会初始化显示控件 + * + * @param message 需显示的目标消息Model + * @param displayTimestamp 预先告知是否需要显示时间轴Label + * @param cellIdentifier 重用Cell的标识 + * + * @return 返回消息Cell对象 + */ +- (instancetype)initWithMessage:(id )message + displaysTimestamp:(BOOL)displayTimestamp + reuseIdentifier:(NSString *)cellIdentifier; + +/** + * 根据消息Model配置Cell的显示内容 + * + * @param message 目标消息Model + * @param displayTimestamp 配置的时候告知是否需要显示时间轴Label + */ +- (void)configureCellWithMessage:(id )message + displaysTimestamp:(BOOL)displayTimestamp; + +/** + * 根据消息Model计算Cell的高度 + * + * @param message 目标消息Model + * @param displayTimestamp 是否显示时间轴Label + * + * @return 返回Cell所需要的高度 + */ ++ (CGFloat)calculateCellHeightWithMessage:(id )message + displaysTimestamp:(BOOL)displayTimestamp; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageTableViewController.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageTableViewController.h new file mode 100644 index 0000000..915a85c --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageTableViewController.h @@ -0,0 +1,316 @@ +// +// XHMessageTableViewController.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +// Model +#import "XHMessage.h" + +// Views +#import "XHMessageTableView.h" +#import "XHMessageTableViewCell.h" +#import "XHMessageInputView.h" +#import "XHShareMenuView.h" +#import "XHEmotionManagerView.h" +#import "XHVoiceRecordHUD.h" + +// Factory +#import "XHMessageBubbleFactory.h" +#import "XHMessageVideoConverPhotoFactory.h" + +// Helper +#import "XHPhotographyHelper.h" +#import "XHLocationHelper.h" +#import "XHVoiceRecordHelper.h" + +// Categorys +#import "UIScrollView+XHkeyboardControl.h" + +@protocol XHMessageTableViewControllerDelegate + +@optional +/** + * 发送文本消息的回调方法 + * + * @param text 目标文本字符串 + * @param sender 发送者的名字 + * @param date 发送时间 + */ +- (void)didSendText:(NSString *)text fromSender:(NSString *)sender onDate:(NSDate *)date; + +/** + * 发送图片消息的回调方法 + * + * @param photo 目标图片对象,后续有可能会换 + * @param sender 发送者的名字 + * @param date 发送时间 + */ +- (void)didSendPhoto:(UIImage *)photo fromSender:(NSString *)sender onDate:(NSDate *)date; + +/** + * 发送视频消息的回调方法 + * + * @param videoConverPhoto 目标视频的封面图 + * @param videoPath 目标视频本地路径 + * @param sender 发送者的名字 + * @param date 发送时间 + */ +- (void)didSendVideoConverPhoto:(UIImage *)videoConverPhoto videoPath:(NSString *)videoPath fromSender:(NSString *)sender onDate:(NSDate *)date; + +/** + * 发送语音消息的回调方法 + * + * @param voicePath 目标语音本地路径 + * @param voiceDuration 目标语音时长 + * @param sender 发送者的名字 + * @param date 发送时间 + */ +- (void)didSendVoice:(NSString *)voicePath voiceDuration:(NSString*)voiceDuration fromSender:(NSString *)sender onDate:(NSDate *)date; + +/** + * 发送第三方表情消息的回调方法 + * + * @param facePath 目标第三方表情的本地路径 + * @param sender 发送者的名字 + * @param date 发送时间 + */ +- (void)didSendEmotion:(NSString *)emotionPath fromSender:(NSString *)sender onDate:(NSDate *)date; + +/** + * 发送地理位置的回调方法 + * + * @param geoLocationsPhoto 目标显示默认图 + * @param geolocations 目标地理信息 + * @param location 目标地理经纬度 + * @param sender 发送者 + * @param date 发送时间 + */ +- (void)didSendGeoLocationsPhoto:(UIImage *)geoLocationsPhoto geolocations:(NSString *)geolocations location:(CLLocation *)location fromSender:(NSString *)sender onDate:(NSDate *)date; + +/** + * 是否显示时间轴Label的回调方法 + * + * @param indexPath 目标消息的位置IndexPath + * + * @return 根据indexPath获取消息的Model的对象,从而判断返回YES or NO来控制是否显示时间轴Label + */ +- (BOOL)shouldDisplayTimestampForRowAtIndexPath:(NSIndexPath *)indexPath; + +/** + * 配置Cell的样式或者字体 + * + * @param cell 目标Cell + * @param indexPath 目标Cell所在位置IndexPath + */ +- (void)configureCell:(XHMessageTableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath; + +/** + * 协议回掉是否支持用户手动滚动 + * + * @return 返回YES or NO + */ +- (BOOL)shouldPreventScrollToBottomWhileUserScrolling; + +/** + * 判断是否支持下拉加载更多消息 + * + * @return 返回BOOL值,判定是否拥有这个功能 + */ +- (BOOL)shouldLoadMoreMessagesScrollToTop; + +/** + * 下拉加载更多消息,只有在支持下拉加载更多消息的情况下才会调用。 + */ +- (void)loadMoreMessagesScrollTotop; + +/** + * 配置TableViewCell高度的方法,如果你想定制自己的Cell样式,那么你必须要实现DataSource中的方法 + - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath targetMessage:(id)message; + * + * @param tableView 目标TableView + * @param indexPath 目标IndexPath + * @param message 目标消息Model + * + * @return 返回计算好的Cell高度 + */ +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath targetMessage:(id)message; + +@end + +@protocol XHMessageTableViewControllerDataSource + +@required +- (id )messageForRowAtIndexPath:(NSIndexPath *)indexPath; + +@optional +/** + * 配置TableViewCell的方法,如果你想定制自己的Cell样式,那么你必须要实现Delegate中的方法 + - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath targetMessage:(id)message; + * + * @param tableView 目标TableView + * @param indexPath 目标IndexPath + * @param message 目标消息Model + * + * @return 返回UITableViewCell或者继承于UITableViewCell的实例化对象 + */ +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath targetMessage:(id)message; + +@end + +@interface XHMessageTableViewController : UIViewController + +@property (nonatomic, weak) id delegate; + +@property (nonatomic, weak) id dataSource; + +@property (nonatomic, assign, readonly) XHInputViewType textViewInputViewType; + +/** + * 数据源,显示多少消息 + */ +@property (nonatomic, strong) NSMutableArray *messages; + +/** + * 第三方接入的功能,也包括系统自身的功能,比如拍照、发送地理位置 + */ +@property (nonatomic, strong) NSArray *shareMenuItems; + +/** + * 消息的主体,默认为nil + */ +@property (nonatomic, copy) NSString *messageSender; + +/** + * 用于显示消息的TableView + */ +@property (nonatomic, weak, readonly) XHMessageTableView *messageTableView; + +/** + * 用于显示发送消息类型控制的工具条,在底部 + */ +@property (nonatomic, weak, readonly) XHMessageInputView *messageInputView; + +/** + * 替换键盘的位置的第三方功能控件 + */ +@property (nonatomic, weak, readonly) XHShareMenuView *shareMenuView; + + +/** + * 管理第三方gif表情的控件 + */ +@property (nonatomic, weak, readonly) XHEmotionManagerView *emotionManagerView; + +/** + * 是否正在加载更多旧的消息数据 + */ +@property (nonatomic, assign) BOOL loadingMoreMessage; + +#pragma mark - Message View Controller Default stup +/** + * 是否允许手势关闭键盘,默认是允许 + */ +@property (nonatomic, assign) BOOL allowsPanToDismissKeyboard; // default is YES + +/** + * 是否允许发送语音 + */ +@property (nonatomic, assign) BOOL allowsSendVoice; // default is YES + +/** + * 是否允许发送多媒体 + */ +@property (nonatomic, assign) BOOL allowsSendMultiMedia; // default is YES + +/** + * 是否支持发送表情 + */ +@property (nonatomic, assign) BOOL allowsSendFace; // default is YES + +/** + * 输入框的样式,默认为扁平化 + */ +@property (nonatomic, assign) XHMessageInputViewStyle inputViewStyle; + +#pragma mark - DataSource Change +/** + * 添加一条新的消息 + * + * @param addedMessage 添加的目标消息对象 + */ +- (void)addMessage:(XHMessage *)addedMessage; + +/** + * 删除一条已存在的消息 + * + * @param reomvedMessage 删除的目标消息对象 + */ +- (void)removeMessageAtIndexPath:(NSIndexPath *)indexPath; + +/** + * 插入旧消息数据到头部,仿微信的做法 + * + * @param oldMessages 目标的旧消息数据 + */ +- (void)insertOldMessages:(NSArray *)oldMessages; + +/** + * 同上,增加了 completion 来通知消息插入完毕 + * + * @param oldMessages 目标的旧消息数据 + * @param completion insert 完成回调 + */ +- (void)insertOldMessages:(NSArray *)oldMessages completion:(void (^)())completion; + +#pragma mark - Messages view controller +/** + * 完成发送消息的函数 + */ +- (void)finishSendMessageWithBubbleMessageType:(XHBubbleMessageMediaType)mediaType; + +/** + * 设置View、tableView的背景颜色 + * + * @param color 背景颜色 + */ +- (void)setBackgroundColor:(UIColor *)color; + +/** + * 设置消息列表的背景图片 + * + * @param backgroundImage 目标背景图片 + */ +- (void)setBackgroundImage:(UIImage *)backgroundImage; + +/** + * 是否滚动到底部 + * + * @param animated YES Or NO + */ +- (void)scrollToBottomAnimated:(BOOL)animated; + +/** + * 滚动到哪一行 + * + * @param indexPath 目标行数变量 + * @param position UITableViewScrollPosition 整形常亮 + * @param animated 是否滚动动画,YES or NO + */ +- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath + atScrollPosition:(UITableViewScrollPosition)position + animated:(BOOL)animated; + +#pragma mark - Other Menu View Frame Helper Mehtod +/** + * 根据显示或隐藏的需求对所有第三方Menu进行管理 + * + * @param hide 需求条件 + */ +- (void)layoutOtherMenuViewHiden:(BOOL)hide; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageTextView.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageTextView.h new file mode 100644 index 0000000..8b9ecd2 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageTextView.h @@ -0,0 +1,53 @@ +// +// XHMessageTextView.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +typedef NS_ENUM(NSUInteger, XHInputViewType) { + XHInputViewTypeNormal = 0, + XHInputViewTypeText, + XHInputViewTypeEmotion, + XHInputViewTypeShareMenu, +}; + +@interface XHMessageTextView : UITextView + +/** + * 提示用户输入的标语 + */ +@property (nonatomic, copy) NSString *placeHolder; + +/** + * 标语文本的颜色 + */ +@property (nonatomic, strong) UIColor *placeHolderTextColor; + +/** + * 获取自身文本占据有多少行 + * + * @return 返回行数 + */ +- (NSUInteger)numberOfLinesOfText; + +/** + * 获取每行的高度 + * + * @return 根据iPhone或者iPad来获取每行字体的高度 + */ ++ (NSUInteger)maxCharactersPerLine; + +/** + * 获取某个文本占据自身适应宽带的行数 + * + * @param text 目标文本 + * + * @return 返回占据行数 + */ ++ (NSUInteger)numberOfLinesForMessage:(NSString *)text; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageVideoConverPhotoFactory.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageVideoConverPhotoFactory.h new file mode 100644 index 0000000..0a1c03e --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageVideoConverPhotoFactory.h @@ -0,0 +1,15 @@ +// +// XHMessageVideoConverPhotoFactory.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-9. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +@interface XHMessageVideoConverPhotoFactory : NSObject + ++ (UIImage *)videoConverPhotoWithVideoPath:(NSString *)videoPath; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageVoiceFactory.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageVoiceFactory.h new file mode 100644 index 0000000..90a7f4b --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHMessageVoiceFactory.h @@ -0,0 +1,16 @@ +// +// XHMessageVoiceFactory.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-28. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import "XHMessageBubbleFactory.h" + +@interface XHMessageVoiceFactory : NSObject + ++ (UIImageView *)messageVoiceAnimationImageViewWithBubbleMessageType:(XHBubbleMessageType)type; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHOperationNetworkKit.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHOperationNetworkKit.h new file mode 100644 index 0000000..63d458a --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHOperationNetworkKit.h @@ -0,0 +1,33 @@ +// +// XHOperationNetworkKit.h +// MessageDisplayExample +// +// Created by 曾 宪华 on 14-6-10. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +typedef void (^XHHTTPProgressHandler)(CGFloat progress, unsigned long long total); +typedef void (^XHJSONSuccessHandler)(id json); +typedef void (^XHHTTPSuccessHandler)(NSData *responseData, NSURLResponse *response); +typedef void (^XHHTTPFailureHandler)(NSData *responseData, NSURLResponse *response, NSError *error); + +@interface XHOperationNetworkKit : NSOperation + +- (id)initWithRequest:(NSURLRequest *)request; +- (id)initWithRequest:(NSURLRequest *)request + jsonSuccessHandler:(XHJSONSuccessHandler)jsonSuccessHandler + failureHandler:(XHHTTPFailureHandler)failureHandler; +- (id)initWithRequest:(NSURLRequest *)request + successHandler:(XHHTTPSuccessHandler)successHandler + failureHandler:(XHHTTPFailureHandler)failureHandler; + + +- (void)setSuccessHandler:(XHHTTPSuccessHandler)successHandler; +- (void)setFailureHandler:(XHHTTPFailureHandler)failureHandler; +- (void)setProgressHandler:(XHHTTPProgressHandler)progressHandler; + +- (void)startRequest; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHPhotographyHelper.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHPhotographyHelper.h new file mode 100644 index 0000000..2fe30a2 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHPhotographyHelper.h @@ -0,0 +1,17 @@ +// +// XHPhotographyHelper.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-3. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +typedef void(^DidFinishTakeMediaCompledBlock)(UIImage *image, NSDictionary *editingInfo); + +@interface XHPhotographyHelper : NSObject + +- (void)showOnPickerViewControllerSourceType:(UIImagePickerControllerSourceType)sourceType onViewController:(UIViewController *)viewController compled:(DidFinishTakeMediaCompledBlock)compled; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHShareMenuItem.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHShareMenuItem.h new file mode 100644 index 0000000..b7acfa3 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHShareMenuItem.h @@ -0,0 +1,37 @@ +// +// XHShareMenuItem.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-1. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +#define kXHShareMenuItemWidth 60 +#define KXHShareMenuItemHeight 80 + +@interface XHShareMenuItem : NSObject + +/** + * 正常显示图片 + */ +@property (nonatomic, strong) UIImage *normalIconImage; + +/** + * 第三方按钮的标题 + */ +@property (nonatomic, copy) NSString *title; + +/** + * 根据正常图片和标题初始化一个Model对象 + * + * @param normalIconImage 正常图片 + * @param title 标题 + * + * @return 返回一个Model对象 + */ +- (instancetype)initWithNormalIconImage:(UIImage *)normalIconImage + title:(NSString *)title; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHShareMenuView.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHShareMenuView.h new file mode 100644 index 0000000..69218d0 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHShareMenuView.h @@ -0,0 +1,42 @@ +// +// XHShareMenuView.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-1. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import "XHShareMenuItem.h" + +#define kXHShareMenuPageControlHeight 30 + +@protocol XHShareMenuViewDelegate + +@optional +/** + * 点击第三方功能回调方法 + * + * @param shareMenuItem 被点击的第三方Model对象,可以在这里做一些特殊的定制 + * @param index 被点击的位置 + */ +- (void)didSelecteShareMenuItem:(XHShareMenuItem *)shareMenuItem atIndex:(NSInteger)index; + +@end + + +@interface XHShareMenuView : UIView + +/** + * 第三方功能Models + */ +@property (nonatomic, strong) NSArray *shareMenuItems; + +@property (nonatomic, weak) id delegate; + +/** + * 根据数据源刷新第三方功能按钮的布局 + */ +- (void)reloadData; + +@end diff --git a/MessageDisplayKit/Classes/Models/XHAlbum.m b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHUIKitMacro.h similarity index 53% rename from MessageDisplayKit/Classes/Models/XHAlbum.m rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHUIKitMacro.h index 04bf390..7162930 100644 --- a/MessageDisplayKit/Classes/Models/XHAlbum.m +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHUIKitMacro.h @@ -1,13 +1,14 @@ // -// XHAlbum.m +// XHUIKitMacro.h // MessageDisplayExample // -// Created by qtone-1 on 14-5-19. +// Created by dw_iOS on 14-5-22. // Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. // -#import "XHAlbum.h" +#ifndef MessageDisplayExample_XHUIKitMacro_h +#define MessageDisplayExample_XHUIKitMacro_h -@implementation XHAlbum -@end + +#endif diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHVideoOutputSampleBufferFactory.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHVideoOutputSampleBufferFactory.h new file mode 100644 index 0000000..d5a195c --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHVideoOutputSampleBufferFactory.h @@ -0,0 +1,17 @@ +// +// XHVideoOutputSampleBufferFactory.h +// MessageDisplayExample +// +// Created by 曾 宪华 on 14-5-25. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +#import + +@interface XHVideoOutputSampleBufferFactory : NSObject + ++ (UIImage *)imageFromSampleBuffer:(CMSampleBufferRef)sampleBuffer; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHVoiceCommonHelper.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHVoiceCommonHelper.h new file mode 100644 index 0000000..3c67b38 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHVoiceCommonHelper.h @@ -0,0 +1,91 @@ +// +// XHVoiceCommonHelper.h +// MessageDisplayExample +// +// Created by Aevitx on 14-5-27. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import + +#define AUDIO_LOCAL_FILE @"localfile" + +typedef void(^DidDeleteAudioFileBlock)(); + +@interface XHVoiceCommonHelper : NSObject +/** + * 根据文件名字(不包含后缀),删除文件 + * + * @param fileName 文件名字(不包含后缀) + * @param block 删除成功后的回调 + */ ++ (void)removeRecordedFileWithOnlyName:(NSString*)fileName block:(DidDeleteAudioFileBlock)block; + + +/** + * 删除/documents/Audio下的文件 + * + * @param exception 有包含些字符串就不删除(为空表示全部删除) + * @param block 删除成功后的回调 + */ ++ (void)removeAudioFile:(NSString*)exception block:(DidDeleteAudioFileBlock)block; + + + + +/** + * 根据当前时间生成字符串 + * + * @return 当前时间字符串 + */ ++ (NSString*)getCurrentTimeString; + + +/** + * 获取缓存路径 + * + * @return 缓存路径 + */ ++ (NSString*)getCacheDirectory; + + +/** + * 判断文件是否存在 + * + * @param _path 文件路径 + * + * @return 存在返回YES + */ ++ (BOOL)fileExistsAtPath:(NSString*)_path; + + +/** + * 删除文件 + * + * @param _path 文件路径 + * + * @return 成功返回YES + */ ++ (BOOL)deleteFileAtPath:(NSString*)_path; + + +/** + * 生成文件路径 + * + * @param _fileName 文件名 + * @param _type 文件类型 + * @return 文件路径 + */ ++ (NSString*)getPathByFileName:(NSString *)_fileName; ++ (NSString*)getPathByFileName:(NSString *)_fileName ofType:(NSString *)_type; + + +/** + * 获取录音设置 + * + * @return 录音设置 + */ ++ (NSDictionary*)getAudioRecorderSettingDict; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHVoiceRecordHUD.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHVoiceRecordHUD.h new file mode 100644 index 0000000..482947f --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHVoiceRecordHUD.h @@ -0,0 +1,46 @@ +// +// XHVoiceRecordHUD.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-13. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +@interface XHVoiceRecordHUD : UIView + +@property (nonatomic, assign) CGFloat peakPower; + +/** + * 开始显示录音HUD控件在某个view + * + * @param view 具体要显示的View + */ +- (void)startRecordingHUDAtView:(UIView *)view; + +/** + * 提示取消录音 + */ +- (void)pauseRecord; + +/** + * 提示继续录音 + */ +- (void)resaueRecord; + +/** + * 停止录音,意思是完成录音 + * + * @param compled 完成录音后的block回调 + */ +- (void)stopRecordCompled:(void(^)(BOOL fnished))compled; + +/** + * 取消录音 + * + * @param compled 取消录音完成后的回调 + */ +- (void)cancelRecordCompled:(void(^)(BOOL fnished))compled; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHVoiceRecordHelper.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHVoiceRecordHelper.h new file mode 100644 index 0000000..1f81404 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Headers/XHVoiceRecordHelper.h @@ -0,0 +1,38 @@ +// +// XHVoiceRecordHelper.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-13. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +typedef BOOL(^XHPrepareRecorderCompletion)(); +typedef void(^XHStartRecorderCompletion)(); +typedef void(^XHStopRecorderCompletion)(); +typedef void(^XHPauseRecorderCompletion)(); +typedef void(^XHResumeRecorderCompletion)(); +typedef void(^XHCancellRecorderDeleteFileCompletion)(); +typedef void(^XHRecordProgress)(float progress); +typedef void(^XHPeakPowerForChannel)(float peakPowerForChannel); + + +@interface XHVoiceRecordHelper : NSObject + +@property (nonatomic, copy) XHStopRecorderCompletion maxTimeStopRecorderCompletion; +@property (nonatomic, copy) XHRecordProgress recordProgress; +@property (nonatomic, copy) XHPeakPowerForChannel peakPowerForChannel; +@property (nonatomic, copy, readonly) NSString *recordPath; +@property (nonatomic, copy) NSString *recordDuration; +@property (nonatomic) float maxRecordTime; // 默认 60秒为最大 +@property (nonatomic, readonly) NSTimeInterval currentTimeInterval; + +- (void)prepareRecordingWithPath:(NSString *)path prepareRecorderCompletion:(XHPrepareRecorderCompletion)prepareRecorderCompletion; +- (void)startRecordingWithStartRecorderCompletion:(XHStartRecorderCompletion)startRecorderCompletion; +- (void)pauseRecordingWithPauseRecorderCompletion:(XHPauseRecorderCompletion)pauseRecorderCompletion; +- (void)resumeRecordingWithResumeRecorderCompletion:(XHResumeRecorderCompletion)resumeRecorderCompletion; +- (void)stopRecordingWithStopRecorderCompletion:(XHStopRecorderCompletion)stopRecorderCompletion; +- (void)cancelledDeleteWithCompletion:(XHCancellRecorderDeleteFileCompletion)cancelledDeleteCompletion; + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Info.plist b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Info.plist new file mode 100644 index 0000000..70cf259 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/Info.plist differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/MessageDisplayKit b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/MessageDisplayKit new file mode 100755 index 0000000..b92c0f0 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/MessageDisplayKit differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/MessageVideoPlay@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/MessageVideoPlay@2x.png new file mode 100644 index 0000000..f374450 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/MessageVideoPlay@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/ReceiverVoiceNodePlaying000@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/ReceiverVoiceNodePlaying000@2x.png new file mode 100644 index 0000000..fb96cb0 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/ReceiverVoiceNodePlaying000@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/ReceiverVoiceNodePlaying001@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/ReceiverVoiceNodePlaying001@2x.png new file mode 100644 index 0000000..53a3ce5 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/ReceiverVoiceNodePlaying001@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/ReceiverVoiceNodePlaying002@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/ReceiverVoiceNodePlaying002@2x.png new file mode 100644 index 0000000..1568f54 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/ReceiverVoiceNodePlaying002@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/ReceiverVoiceNodePlaying003@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/ReceiverVoiceNodePlaying003@2x.png new file mode 100644 index 0000000..36a8fbc Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/ReceiverVoiceNodePlaying003@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/ReceiverVoiceNodePlaying@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/ReceiverVoiceNodePlaying@2x.png new file mode 100644 index 0000000..fcbc480 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/ReceiverVoiceNodePlaying@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordCancel@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordCancel@2x.png new file mode 100644 index 0000000..fae73b6 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordCancel@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingBkg@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingBkg@2x.png new file mode 100644 index 0000000..d7d9cb5 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingBkg@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingSignal001@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingSignal001@2x.png new file mode 100644 index 0000000..dd17556 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingSignal001@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingSignal002@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingSignal002@2x.png new file mode 100644 index 0000000..174dc31 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingSignal002@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingSignal003@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingSignal003@2x.png new file mode 100644 index 0000000..8238d86 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingSignal003@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingSignal004@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingSignal004@2x.png new file mode 100644 index 0000000..1e7d086 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingSignal004@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingSignal005@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingSignal005@2x.png new file mode 100644 index 0000000..d8e340c Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingSignal005@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingSignal006@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingSignal006@2x.png new file mode 100644 index 0000000..a68c60a Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingSignal006@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingSignal007@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingSignal007@2x.png new file mode 100644 index 0000000..21af98f Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingSignal007@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingSignal008@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingSignal008@2x.png new file mode 100644 index 0000000..b0cda99 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/RecordingSignal008@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-drag-dot.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-drag-dot.png new file mode 100755 index 0000000..2b73215 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-drag-dot.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-drag-dot@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-drag-dot@2x.png new file mode 100755 index 0000000..1bed119 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-drag-dot@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-hi.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-hi.png new file mode 100755 index 0000000..0027688 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-hi.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-hi@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-hi@2x.png new file mode 100755 index 0000000..717d3f9 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-hi@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-lo.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-lo.png new file mode 100755 index 0000000..a63b346 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-lo.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-lo@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-lo@2x.png new file mode 100755 index 0000000..f896482 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-lo@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-mask.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-mask.png new file mode 100755 index 0000000..37499ce Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-mask.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-mask@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-mask@2x.png new file mode 100755 index 0000000..7519a37 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-mask@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-hi.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-hi.png new file mode 100755 index 0000000..143f953 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-hi.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-hi@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-hi@2x.png new file mode 100755 index 0000000..0c703ed Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-hi@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-lo-stemless.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-lo-stemless.png new file mode 100755 index 0000000..b9689e5 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-lo-stemless.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-lo-stemless@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-lo-stemless@2x.png new file mode 100755 index 0000000..8582637 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-lo-stemless@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-lo.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-lo.png new file mode 100755 index 0000000..ff551c0 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-lo.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-lo@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-lo@2x.png new file mode 100755 index 0000000..3aec2f9 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-lo@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-mask-flipped.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-mask-flipped.png new file mode 100755 index 0000000..5d1cac0 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-mask-flipped.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-mask-flipped@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-mask-flipped@2x.png new file mode 100755 index 0000000..f7bfadf Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-mask-flipped@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-mask.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-mask.png new file mode 100755 index 0000000..7292831 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-mask.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-mask@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-mask@2x.png new file mode 100755 index 0000000..9e70463 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-mask@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SenderVoiceNodePlaying000@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SenderVoiceNodePlaying000@2x.png new file mode 100644 index 0000000..fb96cb0 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SenderVoiceNodePlaying000@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SenderVoiceNodePlaying001@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SenderVoiceNodePlaying001@2x.png new file mode 100644 index 0000000..e948825 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SenderVoiceNodePlaying001@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SenderVoiceNodePlaying002@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SenderVoiceNodePlaying002@2x.png new file mode 100644 index 0000000..0b37221 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SenderVoiceNodePlaying002@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SenderVoiceNodePlaying003@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SenderVoiceNodePlaying003@2x.png new file mode 100644 index 0000000..454ac03 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SenderVoiceNodePlaying003@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SenderVoiceNodePlaying@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SenderVoiceNodePlaying@2x.png new file mode 100644 index 0000000..2dbbaf5 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/SenderVoiceNodePlaying@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/VoiceBtn_Black@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/VoiceBtn_Black@2x.png new file mode 100644 index 0000000..c92a0c2 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/VoiceBtn_Black@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/VoiceBtn_BlackHL@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/VoiceBtn_BlackHL@2x.png new file mode 100644 index 0000000..e7e7cbd Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/VoiceBtn_BlackHL@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/_CodeSignature/CodeResources b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/_CodeSignature/CodeResources new file mode 100644 index 0000000..42e3c0b --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/_CodeSignature/CodeResources @@ -0,0 +1,1187 @@ + + + + + files + + Fav_Cell_Loc@2x.png + + dcmi0ofin2g6j6SA4tDnSIzaJyk= + + Headers/FLAnimatedImage.h + + aS378zadbzEV6fyl8CSTTEd9KXM= + + Headers/FLAnimatedImageView.h + + 9MjR2K9JVLS8ijmgXdR1pr+qcrY= + + Headers/LKBadgeView.h + + A7GUPbHYw/EEOSVQjpFuTDyUbiQ= + + Headers/MessageDisplayKit-Prefix.pch + + /eBkVeT+9hr2nPgrXtPn+Jq9/1k= + + Headers/NSString+MessageInputView.h + + aqJBcG5B8df03eRbYC3X0GNOYuo= + + Headers/NSString+XHMD5.h + + EvIUT6KMcZX+SbKNuZSYGyQtgj8= + + Headers/SECompatibility.h + + jdCJhm2t2TAvVGYnEB0Oeutpr0A= + + Headers/SEConstants.h + + v6piZPXcDeWFqE/aD7gWV2E/6KQ= + + Headers/SELineLayout.h + + /vUArQpVBzW1ADqt4yDmyx0/M2k= + + Headers/SELinkText.h + + jw2VYboLvB35BCjp6VL2YsQaLAU= + + Headers/SESelectionGrabber.h + + LhyzI5TIQkM34SaR/g3szOR9nto= + + Headers/SETextAttachment.h + + 3NUF1yEs+HpPfh9iFPEWPDaewVk= + + Headers/SETextEditingCaret.h + + hJ2/al5xKZlXC1/9MzCIYWewn2Y= + + Headers/SETextGeometry.h + + 7WIZR7aSqzsdeeVCSvFmur2OJN4= + + Headers/SETextInput.h + + 7qehTtjM3j5z0U6kShTTMcJfOXU= + + Headers/SETextLayout.h + + fTRLwobrJ3q0FjeMpKSZJLqBK2Y= + + Headers/SETextMagnifierCaret.h + + Pqxx/o9mBUYZBTcmGNubyo6y2j0= + + Headers/SETextMagnifierRanged.h + + +TZCcY5Ek/JBc5MRQBJuGthM3Ok= + + Headers/SETextSelection.h + + vDV2PZYj+FVC3JWm2maa1rKhfFM= + + Headers/SETextSelectionView.h + + kRyNAqht1NiIvcFFnO7IYK/DRr4= + + Headers/SETextView.h + + LENMlk9FALKqS3gSqa2cgUGMzLA= + + Headers/UIImage+Alpha.h + + x0oeR2wzKN04Bjli4ZVEjeSirOY= + + Headers/UIImage+Resize.h + + 998aB8L82ApIbjE2/GQ5VZFpvg4= + + Headers/UIImage+RoundedCorner.h + + 1N7y5Q531CugtKouLqStTkz8ttU= + + Headers/UIImage+Utility.h + + KIYF4OupJo5RmeyPWRNG+/UJHGU= + + Headers/UIImage+XHRounded.h + + 1tJiKaAZNEwaWQTsO51CNabO6mY= + + Headers/UIScrollView+XHkeyboardControl.h + + E6LYWtGojaeuNc57A9YD9LwIUD4= + + Headers/UIView+XHRemoteImage.h + + S3PhEe+mhRhHG3K9kPD84AId4So= + + Headers/XHAnnotation.h + + DDt6biPGQ9H6Y/NE6KZMpodctVM= + + Headers/XHAudioPlayerHelper.h + + 8Ipviq611lDXJEfc1+mkAoLlp3g= + + Headers/XHBaseTableViewCell.h + + ejqSetztdLr1hMMorOF6U3hTefc= + + Headers/XHBubblePhotoImageView.h + + GN9MFfzo5S+e1CJ56TRP4CbX1S4= + + Headers/XHCacheManager.h + + AY+H6QwqRRkLT8XcZyOgY91NKhk= + + Headers/XHCaptureHelper.h + + qDwondx9l0ISI4JnY7lch6wzX3c= + + Headers/XHConfigurationHelper.h + + qLy70wfJHYpTJKIvbrlssK8gcfc= + + Headers/XHDisplayEmotionViewController.h + + V+UenTAYOSOeDZ36gfaZF50r5uo= + + Headers/XHDisplayLocationViewController.h + + x4vRnHt8qP7apZOSeIzcCX+oDxk= + + Headers/XHDisplayMediaViewController.h + + MlMNmzub2QQy4IpJIB+F6ltBmaw= + + Headers/XHDisplayTextViewController.h + + J6n7Ji2rF0QLVr4OHox5FEJgO8I= + + Headers/XHEmotion.h + + muxcmi7IE+l9BtKNhHHMjjVSBx4= + + Headers/XHEmotionCollectionViewCell.h + + VohhOkU0mjfUyoABv9HaGl5fgS0= + + Headers/XHEmotionCollectionViewFlowLayout.h + + G5xrWp7MS8ErhxQkDUPBLGLbZjs= + + Headers/XHEmotionManager.h + + YUwskG1lWb8xhzP5Kc8EQROoFLk= + + Headers/XHEmotionManagerView.h + + MOuMOll22bZisDJJNLL7/rl11Qs= + + Headers/XHEmotionSectionBar.h + + LuwyMO1PWwtedDffsd24nHu5RTI= + + Headers/XHFileAttribute.h + + PPI3ntJKSuYUv4P5EFJaKIa1maI= + + Headers/XHFoundationMacro.h + + OAXi1OXp5YQwswW+dQ5J0VezdF8= + + Headers/XHHTTPClient.h + + Bexbk4JzCkH60hATNBhtZcBxqJU= + + Headers/XHLocationHelper.h + + HDoX7QFhFrk7bzfLnDyyCCo62AY= + + Headers/XHMacro.h + + Z2EHYnHz9qJgE/cftK+K8bxrOHs= + + Headers/XHMessage.h + + 66OZjUkM2BpYoumbDMCF97TxoIM= + + Headers/XHMessageAvatarFactory.h + + MtZ18pUB1PCB8zr3AVzqqOY9afU= + + Headers/XHMessageBubbleFactory.h + + YH5uE9n6f3LS81zwfDEJ0RY+7+U= + + Headers/XHMessageBubbleHelper.h + + V5sp4ktq6O64DPuDy/k6ibk0D14= + + Headers/XHMessageBubbleView.h + + befeqg47XlwZUFmoQ5s0KGQBEvk= + + Headers/XHMessageInputView.h + + ZhHhq5d2cFryFIn9qXGKDF3TKtg= + + Headers/XHMessageModel.h + + BMVFzKfh2CsaFFZYlfVT42IzTMo= + + Headers/XHMessageTableView.h + + 8DP62yumdo4nDrCBIlDM0S2GyGw= + + Headers/XHMessageTableViewCell.h + + CJjSgH+xJwSnxTXV1v8cg4NUvB8= + + Headers/XHMessageTableViewController.h + + yep5OSSTokL2xwepv6S19f66OzM= + + Headers/XHMessageTextView.h + + CS6kcQtLszNJP4XT2IFP8HMrQTQ= + + Headers/XHMessageVideoConverPhotoFactory.h + + 8t3Y05rbgrW2O/hiU4vpB+dZmzs= + + Headers/XHMessageVoiceFactory.h + + tndlNJednJe2q2Fkutu9nU8rMLI= + + Headers/XHOperationNetworkKit.h + + Xb21zRuly5dkH36+g/IyN8oh6js= + + Headers/XHPhotographyHelper.h + + Lb98LUr8LjyTpy3XZiRl3IUACoE= + + Headers/XHShareMenuItem.h + + BuG4H473yYDZw6fIhwBeXMB+H1o= + + Headers/XHShareMenuView.h + + +r/FWqmkr1IpSr61pJiE4Pw0fLQ= + + Headers/XHUIKitMacro.h + + YevRfsp/JZKtgNuTvSOeUtZak18= + + Headers/XHVideoOutputSampleBufferFactory.h + + 24nbCVzeXPuiNuOzMpxHX7K1doo= + + Headers/XHVoiceCommonHelper.h + + moU9NLC0Pa2WSi2LJvGU+QGyPiI= + + Headers/XHVoiceRecordHUD.h + + YZIvhC5KaoubO2QyphlvXdvNkvE= + + Headers/XHVoiceRecordHelper.h + + Mqs6z6zEG7sAP1FIBZjFk4FvMAA= + + Info.plist + + ZLq2aI9jFdkKmx6jwznvCYXQwmo= + + MessageVideoPlay@2x.png + + yJ5NL6IrhVPqy2CYZd1QXYV9DFs= + + ReceiverVoiceNodePlaying000@2x.png + + H+b58WdNjEq3Jy9fFoFXz8nIFxQ= + + ReceiverVoiceNodePlaying001@2x.png + + Zm8fEaRUUJ9ZoosnZUufBejUf6I= + + ReceiverVoiceNodePlaying002@2x.png + + tqxrWeNyyN0zPNqvjIBwLL426VY= + + ReceiverVoiceNodePlaying003@2x.png + + guZlK+YNA3/A5z57Pu+PyOuM5sE= + + ReceiverVoiceNodePlaying@2x.png + + tcjm1Ysw9pP5hTnXNtZiiiC+0vw= + + RecordCancel@2x.png + + MYJXz9OV8RFtWWPtPf9HOX0W9TU= + + RecordingBkg@2x.png + + 7Eq/imYvhKo2mo5kgNb9bwF3124= + + RecordingSignal001@2x.png + + DaQyA4Z/cS4wQR6xPFQBPZIW3XM= + + RecordingSignal002@2x.png + + WV++TqgBVnetvziHuXmCk1YoM3Y= + + RecordingSignal003@2x.png + + t938Zeh7ri98ZKGQfvsEzCTLbhQ= + + RecordingSignal004@2x.png + + g3phFoQsIKVf5UkwQwQCIOnaxrk= + + RecordingSignal005@2x.png + + AhghCUNnCQ9hMs5tKCBauFJAslg= + + RecordingSignal006@2x.png + + Ids/pSqMOjMrti12XZtUUEL7bbU= + + RecordingSignal007@2x.png + + ROEcDBgiD/2cjr3AlGSi88NRxKQ= + + RecordingSignal008@2x.png + + w8brq/JX2xAQaOuFdai2MXsS2O8= + + SECoreTextView.bundle/kb-drag-dot.png + + /tiuru1GQC9K76fTIAe3sEc4HoI= + + SECoreTextView.bundle/kb-drag-dot@2x.png + + SwF9xQWIUulIomiovQdVJYSx59Q= + + SECoreTextView.bundle/kb-loupe-hi.png + + 8QcUugiBTEb8pV7+fX07Q4BSBjs= + + SECoreTextView.bundle/kb-loupe-hi@2x.png + + H86At9gO8dpPC3RTLpEvsfmCLro= + + SECoreTextView.bundle/kb-loupe-lo.png + + qHxOhrMImkSlsv4zPfD3SradWLc= + + SECoreTextView.bundle/kb-loupe-lo@2x.png + + e6GYCLIVyxk6FwGBCQuCAl2XLi0= + + SECoreTextView.bundle/kb-loupe-mask.png + + RVcIDnRCl7HT6H2JemYxI8AZ96M= + + SECoreTextView.bundle/kb-loupe-mask@2x.png + + WtUC03uZx++riizUCEuqswvzs3A= + + SECoreTextView.bundle/kb-magnifier-ranged-hi.png + + YHsmVF3BQ1+7UET2Bmjm2XwChR4= + + SECoreTextView.bundle/kb-magnifier-ranged-hi@2x.png + + n+GMYemfC8gndRdHVtG5M13Oxfc= + + SECoreTextView.bundle/kb-magnifier-ranged-lo-stemless.png + + /uwLLa4qmKgXQmchW0oFW73zXOI= + + SECoreTextView.bundle/kb-magnifier-ranged-lo-stemless@2x.png + + k1BtJSCLKsX9uYUJpw4ctuVRS1o= + + SECoreTextView.bundle/kb-magnifier-ranged-lo.png + + dzvzqqfE5l4yaphFfEMhUBpg05s= + + SECoreTextView.bundle/kb-magnifier-ranged-lo@2x.png + + ziCpxCt+m23ufk0vlSVmf7KnE8A= + + SECoreTextView.bundle/kb-magnifier-ranged-mask-flipped.png + + bOzdxh9sYf8Mg08b48NzNvNH2nE= + + SECoreTextView.bundle/kb-magnifier-ranged-mask-flipped@2x.png + + v8suxV1rRZ04UIudUKpDb/fhnpc= + + SECoreTextView.bundle/kb-magnifier-ranged-mask.png + + hO/Eo3PXCZHPdcInWMRaWBeBXP8= + + SECoreTextView.bundle/kb-magnifier-ranged-mask@2x.png + + csIkRjZ7kX6DGycyRH0N1koDg8M= + + SenderVoiceNodePlaying000@2x.png + + H+b58WdNjEq3Jy9fFoFXz8nIFxQ= + + SenderVoiceNodePlaying001@2x.png + + b+blmbxkZTfSiegj7YwqaykgFyg= + + SenderVoiceNodePlaying002@2x.png + + dC6SEPzIQR+C9mOSKBIju9oG9MY= + + SenderVoiceNodePlaying003@2x.png + + I9fcwTy5pc5AO6f3+DEF1IFH2XY= + + SenderVoiceNodePlaying@2x.png + + nzKgSh+3ZnwuXMWQSyClNNDnfvw= + + VoiceBtn_Black@2x.png + + C+KezNOQHhjS6up+mOeJ0vqQvCY= + + VoiceBtn_BlackHL@2x.png + + dlK1dAq4C4jjO1+PqU4mAoD4o7I= + + avator@2x.png + + sgyKq5ukhaE2rvkeIQubrW1jMCI= + + en.lproj/MessageDisplayKitString.strings + + hash + + 5attu1fe2JTTuhjUZ09sb0frT0U= + + optional + + + face@2x.png + + nE1ghRflqINwQndmuU3hGZ9S/O0= + + face_HL@2x.png + + VCik7fmOwBvy9Y8p/aytqXy8b4k= + + input-bar-flat.png + + lkLDysijMuyGRO2U1D/rc6i/moQ= + + input-bar-flat@2x.png + + Dvdtjjmqm/RF03CnmMi7uxm6MDU= + + keyboard@2x.png + + 4yYUsM7jZxU/L+vtkpSeVichASc= + + keyboard_HL@2x.png + + 2z8+mc0Esm/ShNPglb7iOJFVSdo= + + msg_chat_voice_unread.png + + zF3nN5tWim2NNb459BmirF2lqV8= + + msg_chat_voice_unread@2x.png + + O6wZdV24rGbSj0fGOdeM9bqnmFY= + + multiMedia@2x.png + + 7ti+5vWUIjwLRnD6Ht9i2Dzxnl0= + + multiMedia_HL@2x.png + + ddk1hIv9f9Npm+wqldYi6qm0pc4= + + placeholderImage@2x.png + + cPJi/+3A51RBz150RXajBPNj+so= + + voice@2x.png + + 0GsLQU+rMy9PVbPQzVd+CKOiApo= + + voice_HL@2x.png + + 0N5Idcjobp7x1fYD0d/qKPzSYxg= + + weChatBubble_Receiving_Solid@2x.png + + XSMxKJw4wdSCGiPAOukHjbVOY0g= + + weChatBubble_Sending_Solid@2x.png + + 3mfDxwCYebIVghNCeYe4g+9EU80= + + zh-Hans.lproj/MessageDisplayKitString.strings + + hash + + 7fzgSMzvrJpphjTWtsjIFf/gU6o= + + optional + + + + files2 + + Fav_Cell_Loc@2x.png + + dcmi0ofin2g6j6SA4tDnSIzaJyk= + + Headers/FLAnimatedImage.h + + aS378zadbzEV6fyl8CSTTEd9KXM= + + Headers/FLAnimatedImageView.h + + 9MjR2K9JVLS8ijmgXdR1pr+qcrY= + + Headers/LKBadgeView.h + + A7GUPbHYw/EEOSVQjpFuTDyUbiQ= + + Headers/MessageDisplayKit-Prefix.pch + + /eBkVeT+9hr2nPgrXtPn+Jq9/1k= + + Headers/NSString+MessageInputView.h + + aqJBcG5B8df03eRbYC3X0GNOYuo= + + Headers/NSString+XHMD5.h + + EvIUT6KMcZX+SbKNuZSYGyQtgj8= + + Headers/SECompatibility.h + + jdCJhm2t2TAvVGYnEB0Oeutpr0A= + + Headers/SEConstants.h + + v6piZPXcDeWFqE/aD7gWV2E/6KQ= + + Headers/SELineLayout.h + + /vUArQpVBzW1ADqt4yDmyx0/M2k= + + Headers/SELinkText.h + + jw2VYboLvB35BCjp6VL2YsQaLAU= + + Headers/SESelectionGrabber.h + + LhyzI5TIQkM34SaR/g3szOR9nto= + + Headers/SETextAttachment.h + + 3NUF1yEs+HpPfh9iFPEWPDaewVk= + + Headers/SETextEditingCaret.h + + hJ2/al5xKZlXC1/9MzCIYWewn2Y= + + Headers/SETextGeometry.h + + 7WIZR7aSqzsdeeVCSvFmur2OJN4= + + Headers/SETextInput.h + + 7qehTtjM3j5z0U6kShTTMcJfOXU= + + Headers/SETextLayout.h + + fTRLwobrJ3q0FjeMpKSZJLqBK2Y= + + Headers/SETextMagnifierCaret.h + + Pqxx/o9mBUYZBTcmGNubyo6y2j0= + + Headers/SETextMagnifierRanged.h + + +TZCcY5Ek/JBc5MRQBJuGthM3Ok= + + Headers/SETextSelection.h + + vDV2PZYj+FVC3JWm2maa1rKhfFM= + + Headers/SETextSelectionView.h + + kRyNAqht1NiIvcFFnO7IYK/DRr4= + + Headers/SETextView.h + + LENMlk9FALKqS3gSqa2cgUGMzLA= + + Headers/UIImage+Alpha.h + + x0oeR2wzKN04Bjli4ZVEjeSirOY= + + Headers/UIImage+Resize.h + + 998aB8L82ApIbjE2/GQ5VZFpvg4= + + Headers/UIImage+RoundedCorner.h + + 1N7y5Q531CugtKouLqStTkz8ttU= + + Headers/UIImage+Utility.h + + KIYF4OupJo5RmeyPWRNG+/UJHGU= + + Headers/UIImage+XHRounded.h + + 1tJiKaAZNEwaWQTsO51CNabO6mY= + + Headers/UIScrollView+XHkeyboardControl.h + + E6LYWtGojaeuNc57A9YD9LwIUD4= + + Headers/UIView+XHRemoteImage.h + + S3PhEe+mhRhHG3K9kPD84AId4So= + + Headers/XHAnnotation.h + + DDt6biPGQ9H6Y/NE6KZMpodctVM= + + Headers/XHAudioPlayerHelper.h + + 8Ipviq611lDXJEfc1+mkAoLlp3g= + + Headers/XHBaseTableViewCell.h + + ejqSetztdLr1hMMorOF6U3hTefc= + + Headers/XHBubblePhotoImageView.h + + GN9MFfzo5S+e1CJ56TRP4CbX1S4= + + Headers/XHCacheManager.h + + AY+H6QwqRRkLT8XcZyOgY91NKhk= + + Headers/XHCaptureHelper.h + + qDwondx9l0ISI4JnY7lch6wzX3c= + + Headers/XHConfigurationHelper.h + + qLy70wfJHYpTJKIvbrlssK8gcfc= + + Headers/XHDisplayEmotionViewController.h + + V+UenTAYOSOeDZ36gfaZF50r5uo= + + Headers/XHDisplayLocationViewController.h + + x4vRnHt8qP7apZOSeIzcCX+oDxk= + + Headers/XHDisplayMediaViewController.h + + MlMNmzub2QQy4IpJIB+F6ltBmaw= + + Headers/XHDisplayTextViewController.h + + J6n7Ji2rF0QLVr4OHox5FEJgO8I= + + Headers/XHEmotion.h + + muxcmi7IE+l9BtKNhHHMjjVSBx4= + + Headers/XHEmotionCollectionViewCell.h + + VohhOkU0mjfUyoABv9HaGl5fgS0= + + Headers/XHEmotionCollectionViewFlowLayout.h + + G5xrWp7MS8ErhxQkDUPBLGLbZjs= + + Headers/XHEmotionManager.h + + YUwskG1lWb8xhzP5Kc8EQROoFLk= + + Headers/XHEmotionManagerView.h + + MOuMOll22bZisDJJNLL7/rl11Qs= + + Headers/XHEmotionSectionBar.h + + LuwyMO1PWwtedDffsd24nHu5RTI= + + Headers/XHFileAttribute.h + + PPI3ntJKSuYUv4P5EFJaKIa1maI= + + Headers/XHFoundationMacro.h + + OAXi1OXp5YQwswW+dQ5J0VezdF8= + + Headers/XHHTTPClient.h + + Bexbk4JzCkH60hATNBhtZcBxqJU= + + Headers/XHLocationHelper.h + + HDoX7QFhFrk7bzfLnDyyCCo62AY= + + Headers/XHMacro.h + + Z2EHYnHz9qJgE/cftK+K8bxrOHs= + + Headers/XHMessage.h + + 66OZjUkM2BpYoumbDMCF97TxoIM= + + Headers/XHMessageAvatarFactory.h + + MtZ18pUB1PCB8zr3AVzqqOY9afU= + + Headers/XHMessageBubbleFactory.h + + YH5uE9n6f3LS81zwfDEJ0RY+7+U= + + Headers/XHMessageBubbleHelper.h + + V5sp4ktq6O64DPuDy/k6ibk0D14= + + Headers/XHMessageBubbleView.h + + befeqg47XlwZUFmoQ5s0KGQBEvk= + + Headers/XHMessageInputView.h + + ZhHhq5d2cFryFIn9qXGKDF3TKtg= + + Headers/XHMessageModel.h + + BMVFzKfh2CsaFFZYlfVT42IzTMo= + + Headers/XHMessageTableView.h + + 8DP62yumdo4nDrCBIlDM0S2GyGw= + + Headers/XHMessageTableViewCell.h + + CJjSgH+xJwSnxTXV1v8cg4NUvB8= + + Headers/XHMessageTableViewController.h + + yep5OSSTokL2xwepv6S19f66OzM= + + Headers/XHMessageTextView.h + + CS6kcQtLszNJP4XT2IFP8HMrQTQ= + + Headers/XHMessageVideoConverPhotoFactory.h + + 8t3Y05rbgrW2O/hiU4vpB+dZmzs= + + Headers/XHMessageVoiceFactory.h + + tndlNJednJe2q2Fkutu9nU8rMLI= + + Headers/XHOperationNetworkKit.h + + Xb21zRuly5dkH36+g/IyN8oh6js= + + Headers/XHPhotographyHelper.h + + Lb98LUr8LjyTpy3XZiRl3IUACoE= + + Headers/XHShareMenuItem.h + + BuG4H473yYDZw6fIhwBeXMB+H1o= + + Headers/XHShareMenuView.h + + +r/FWqmkr1IpSr61pJiE4Pw0fLQ= + + Headers/XHUIKitMacro.h + + YevRfsp/JZKtgNuTvSOeUtZak18= + + Headers/XHVideoOutputSampleBufferFactory.h + + 24nbCVzeXPuiNuOzMpxHX7K1doo= + + Headers/XHVoiceCommonHelper.h + + moU9NLC0Pa2WSi2LJvGU+QGyPiI= + + Headers/XHVoiceRecordHUD.h + + YZIvhC5KaoubO2QyphlvXdvNkvE= + + Headers/XHVoiceRecordHelper.h + + Mqs6z6zEG7sAP1FIBZjFk4FvMAA= + + MessageVideoPlay@2x.png + + yJ5NL6IrhVPqy2CYZd1QXYV9DFs= + + ReceiverVoiceNodePlaying000@2x.png + + H+b58WdNjEq3Jy9fFoFXz8nIFxQ= + + ReceiverVoiceNodePlaying001@2x.png + + Zm8fEaRUUJ9ZoosnZUufBejUf6I= + + ReceiverVoiceNodePlaying002@2x.png + + tqxrWeNyyN0zPNqvjIBwLL426VY= + + ReceiverVoiceNodePlaying003@2x.png + + guZlK+YNA3/A5z57Pu+PyOuM5sE= + + ReceiverVoiceNodePlaying@2x.png + + tcjm1Ysw9pP5hTnXNtZiiiC+0vw= + + RecordCancel@2x.png + + MYJXz9OV8RFtWWPtPf9HOX0W9TU= + + RecordingBkg@2x.png + + 7Eq/imYvhKo2mo5kgNb9bwF3124= + + RecordingSignal001@2x.png + + DaQyA4Z/cS4wQR6xPFQBPZIW3XM= + + RecordingSignal002@2x.png + + WV++TqgBVnetvziHuXmCk1YoM3Y= + + RecordingSignal003@2x.png + + t938Zeh7ri98ZKGQfvsEzCTLbhQ= + + RecordingSignal004@2x.png + + g3phFoQsIKVf5UkwQwQCIOnaxrk= + + RecordingSignal005@2x.png + + AhghCUNnCQ9hMs5tKCBauFJAslg= + + RecordingSignal006@2x.png + + Ids/pSqMOjMrti12XZtUUEL7bbU= + + RecordingSignal007@2x.png + + ROEcDBgiD/2cjr3AlGSi88NRxKQ= + + RecordingSignal008@2x.png + + w8brq/JX2xAQaOuFdai2MXsS2O8= + + SECoreTextView.bundle/kb-drag-dot.png + + /tiuru1GQC9K76fTIAe3sEc4HoI= + + SECoreTextView.bundle/kb-drag-dot@2x.png + + SwF9xQWIUulIomiovQdVJYSx59Q= + + SECoreTextView.bundle/kb-loupe-hi.png + + 8QcUugiBTEb8pV7+fX07Q4BSBjs= + + SECoreTextView.bundle/kb-loupe-hi@2x.png + + H86At9gO8dpPC3RTLpEvsfmCLro= + + SECoreTextView.bundle/kb-loupe-lo.png + + qHxOhrMImkSlsv4zPfD3SradWLc= + + SECoreTextView.bundle/kb-loupe-lo@2x.png + + e6GYCLIVyxk6FwGBCQuCAl2XLi0= + + SECoreTextView.bundle/kb-loupe-mask.png + + RVcIDnRCl7HT6H2JemYxI8AZ96M= + + SECoreTextView.bundle/kb-loupe-mask@2x.png + + WtUC03uZx++riizUCEuqswvzs3A= + + SECoreTextView.bundle/kb-magnifier-ranged-hi.png + + YHsmVF3BQ1+7UET2Bmjm2XwChR4= + + SECoreTextView.bundle/kb-magnifier-ranged-hi@2x.png + + n+GMYemfC8gndRdHVtG5M13Oxfc= + + SECoreTextView.bundle/kb-magnifier-ranged-lo-stemless.png + + /uwLLa4qmKgXQmchW0oFW73zXOI= + + SECoreTextView.bundle/kb-magnifier-ranged-lo-stemless@2x.png + + k1BtJSCLKsX9uYUJpw4ctuVRS1o= + + SECoreTextView.bundle/kb-magnifier-ranged-lo.png + + dzvzqqfE5l4yaphFfEMhUBpg05s= + + SECoreTextView.bundle/kb-magnifier-ranged-lo@2x.png + + ziCpxCt+m23ufk0vlSVmf7KnE8A= + + SECoreTextView.bundle/kb-magnifier-ranged-mask-flipped.png + + bOzdxh9sYf8Mg08b48NzNvNH2nE= + + SECoreTextView.bundle/kb-magnifier-ranged-mask-flipped@2x.png + + v8suxV1rRZ04UIudUKpDb/fhnpc= + + SECoreTextView.bundle/kb-magnifier-ranged-mask.png + + hO/Eo3PXCZHPdcInWMRaWBeBXP8= + + SECoreTextView.bundle/kb-magnifier-ranged-mask@2x.png + + csIkRjZ7kX6DGycyRH0N1koDg8M= + + SenderVoiceNodePlaying000@2x.png + + H+b58WdNjEq3Jy9fFoFXz8nIFxQ= + + SenderVoiceNodePlaying001@2x.png + + b+blmbxkZTfSiegj7YwqaykgFyg= + + SenderVoiceNodePlaying002@2x.png + + dC6SEPzIQR+C9mOSKBIju9oG9MY= + + SenderVoiceNodePlaying003@2x.png + + I9fcwTy5pc5AO6f3+DEF1IFH2XY= + + SenderVoiceNodePlaying@2x.png + + nzKgSh+3ZnwuXMWQSyClNNDnfvw= + + VoiceBtn_Black@2x.png + + C+KezNOQHhjS6up+mOeJ0vqQvCY= + + VoiceBtn_BlackHL@2x.png + + dlK1dAq4C4jjO1+PqU4mAoD4o7I= + + avator@2x.png + + sgyKq5ukhaE2rvkeIQubrW1jMCI= + + en.lproj/MessageDisplayKitString.strings + + hash + + 5attu1fe2JTTuhjUZ09sb0frT0U= + + optional + + + face@2x.png + + nE1ghRflqINwQndmuU3hGZ9S/O0= + + face_HL@2x.png + + VCik7fmOwBvy9Y8p/aytqXy8b4k= + + input-bar-flat.png + + lkLDysijMuyGRO2U1D/rc6i/moQ= + + input-bar-flat@2x.png + + Dvdtjjmqm/RF03CnmMi7uxm6MDU= + + keyboard@2x.png + + 4yYUsM7jZxU/L+vtkpSeVichASc= + + keyboard_HL@2x.png + + 2z8+mc0Esm/ShNPglb7iOJFVSdo= + + msg_chat_voice_unread.png + + zF3nN5tWim2NNb459BmirF2lqV8= + + msg_chat_voice_unread@2x.png + + O6wZdV24rGbSj0fGOdeM9bqnmFY= + + multiMedia@2x.png + + 7ti+5vWUIjwLRnD6Ht9i2Dzxnl0= + + multiMedia_HL@2x.png + + ddk1hIv9f9Npm+wqldYi6qm0pc4= + + placeholderImage@2x.png + + cPJi/+3A51RBz150RXajBPNj+so= + + voice@2x.png + + 0GsLQU+rMy9PVbPQzVd+CKOiApo= + + voice_HL@2x.png + + 0N5Idcjobp7x1fYD0d/qKPzSYxg= + + weChatBubble_Receiving_Solid@2x.png + + XSMxKJw4wdSCGiPAOukHjbVOY0g= + + weChatBubble_Sending_Solid@2x.png + + 3mfDxwCYebIVghNCeYe4g+9EU80= + + zh-Hans.lproj/MessageDisplayKitString.strings + + hash + + 7fzgSMzvrJpphjTWtsjIFf/gU6o= + + optional + + + + rules + + ^ + + ^.*\.lproj/ + + optional + + weight + 1000 + + ^.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^version.plist$ + + + rules2 + + .*\.dSYM($|/) + + weight + 11 + + ^ + + weight + 20 + + ^(.*/)?\.DS_Store$ + + omit + + weight + 2000 + + ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ + + nested + + weight + 10 + + ^.* + + ^.*\.lproj/ + + optional + + weight + 1000 + + ^.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Info\.plist$ + + omit + + weight + 20 + + ^PkgInfo$ + + omit + + weight + 20 + + ^[^/]+$ + + nested + + weight + 10 + + ^embedded\.provisionprofile$ + + weight + 20 + + ^version\.plist$ + + weight + 20 + + + + diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/avator@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/avator@2x.png new file mode 100644 index 0000000..425d02e Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/avator@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/en.lproj/MessageDisplayKitString.strings b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/en.lproj/MessageDisplayKitString.strings new file mode 100644 index 0000000..56c9a60 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/en.lproj/MessageDisplayKitString.strings differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/face@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/face@2x.png new file mode 100644 index 0000000..dd56f56 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/face@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/face_HL@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/face_HL@2x.png new file mode 100644 index 0000000..83fb884 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/face_HL@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/input-bar-flat.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/input-bar-flat.png new file mode 100644 index 0000000..25750ef Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/input-bar-flat.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/input-bar-flat@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/input-bar-flat@2x.png new file mode 100644 index 0000000..a4d4e2a Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/input-bar-flat@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/keyboard@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/keyboard@2x.png new file mode 100644 index 0000000..20af864 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/keyboard@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/keyboard_HL@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/keyboard_HL@2x.png new file mode 100644 index 0000000..83074b0 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/keyboard_HL@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/msg_chat_voice_unread.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/msg_chat_voice_unread.png new file mode 100644 index 0000000..92a6c24 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/msg_chat_voice_unread.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/msg_chat_voice_unread@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/msg_chat_voice_unread@2x.png new file mode 100644 index 0000000..99406d6 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/msg_chat_voice_unread@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/multiMedia@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/multiMedia@2x.png new file mode 100644 index 0000000..458015a Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/multiMedia@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/multiMedia_HL@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/multiMedia_HL@2x.png new file mode 100644 index 0000000..19e6df7 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/multiMedia_HL@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/placeholderImage@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/placeholderImage@2x.png new file mode 100644 index 0000000..9b6dea3 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/placeholderImage@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/voice@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/voice@2x.png new file mode 100644 index 0000000..d14715b Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/voice@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/voice_HL@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/voice_HL@2x.png new file mode 100644 index 0000000..970bb29 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/voice_HL@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/weChatBubble_Receiving_Solid@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/weChatBubble_Receiving_Solid@2x.png new file mode 100644 index 0000000..c227285 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/weChatBubble_Receiving_Solid@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/weChatBubble_Sending_Solid@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/weChatBubble_Sending_Solid@2x.png new file mode 100644 index 0000000..3054f00 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/weChatBubble_Sending_Solid@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/zh-Hans.lproj/MessageDisplayKitString.strings b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/zh-Hans.lproj/MessageDisplayKitString.strings new file mode 100644 index 0000000..eaafab5 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/Vendor/MessageDisplayKit.framework/zh-Hans.lproj/MessageDisplayKitString.strings differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/ViewController.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/ViewController.h new file mode 100644 index 0000000..169d1bc --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/ViewController.h @@ -0,0 +1,13 @@ +// +// ViewController.h +// MessageDisplayKitStoryBoradExample +// +// Created by HUAJIE-1 on 14-4-29. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import + +@interface ViewController : UIViewController + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/ViewController.m b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/ViewController.m new file mode 100644 index 0000000..43eec97 --- /dev/null +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/ViewController.m @@ -0,0 +1,39 @@ +// +// ViewController.m +// MessageDisplayKitStoryBoradExample +// +// Created by HUAJIE-1 on 14-4-29. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import "ViewController.h" + +#import "AppDelegate.h" +#import "XHDemoWeChatMessageTableViewController.h" + +@interface ViewController () + +@end + +@implementation ViewController + +- (void)viewDidLoad +{ + [super viewDidLoad]; + // Do any additional setup after loading the view, typically from a nib. +} + +- (void)didReceiveMemoryWarning +{ + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +#pragma mark - Segue + +- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { + XHDemoWeChatMessageTableViewController *controller = (XHDemoWeChatMessageTableViewController *)segue.destinationViewController; + controller.managedObjectContext = ((AppDelegate *)[[UIApplication sharedApplication] delegate]).managedObjectContext; +} + +@end diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/XHDemoWeChatMessageTableViewController.h b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/XHDemoWeChatMessageTableViewController.h index 98bf554..dae36af 100644 --- a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/XHDemoWeChatMessageTableViewController.h +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/XHDemoWeChatMessageTableViewController.h @@ -2,14 +2,14 @@ // XHDemoWeChatMessageTableViewController.h // MessageDisplayExample // -// Created by qtone-1 on 14-4-27. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-27. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // -#import - #import +#import + @interface XHDemoWeChatMessageTableViewController : XHMessageTableViewController @property (strong, nonatomic) NSFetchedResultsController *fetchedResultsController; diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/XHDemoWeChatMessageTableViewController.m b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/XHDemoWeChatMessageTableViewController.m index 6b80b65..91b860b 100644 --- a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/XHDemoWeChatMessageTableViewController.m +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/XHDemoWeChatMessageTableViewController.m @@ -2,17 +2,15 @@ // XHDemoWeChatMessageTableViewController.m // MessageDisplayExample // -// Created by qtone-1 on 14-4-27. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-27. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHDemoWeChatMessageTableViewController.h" -#import -#import -#import - -#import +#import +#import +#import #import "MDKMessage.h" @@ -26,17 +24,17 @@ @implementation XHDemoWeChatMessageTableViewController - (XHMessage *)getTextMessageWithBubbleMessageType:(XHBubbleMessageType)bubbleMessageType { XHMessage *textMessage = [[XHMessage alloc] initWithText:@"Call Me 15915895880.这是华捷微信,为什么模仿这个页面效果呢?希望微信团队能看到我们在努力,请微信团队给个机会,让我好好的努力靠近大神,希望自己也能发亮,好像有点过分的希望了,如果大家喜欢这个开源库,请大家帮帮忙支持这个开源库吧!我是Jack,叫华仔也行,曾宪华就是我啦!" sender:@"华仔" timestamp:[NSDate distantPast]]; - textMessage.avator = [UIImage imageNamed:@"avator"]; - textMessage.avatorUrl = @"http://www.pailixiu.com/jack/meIcon@2x.png"; + textMessage.avatar = [UIImage imageNamed:@"avatar"]; + textMessage.avatarUrl = @"http://childapp.pailixiu.com/jack/meIcon@2x.png"; textMessage.bubbleMessageType = bubbleMessageType; return textMessage; } - (XHMessage *)getPhotoMessageWithBubbleMessageType:(XHBubbleMessageType)bubbleMessageType { - XHMessage *photoMessage = [[XHMessage alloc] initWithPhoto:[UIImage imageNamed:@"placeholderImage"] thumbnailUrl:@"http://www.pailixiu.com/jack/networkPhoto.png" originPhotoUrl:nil sender:@"Jack" timestamp:[NSDate date]]; - photoMessage.avator = [UIImage imageNamed:@"avator"]; - photoMessage.avatorUrl = @"http://www.pailixiu.com/jack/JieIcon@2x.png"; + XHMessage *photoMessage = [[XHMessage alloc] initWithPhoto:nil thumbnailUrl:@"http://childapp.pailixiu.com/jack/networkPhoto.png" originPhotoUrl:nil sender:@"Jack" timestamp:[NSDate date]]; + photoMessage.avatar = [UIImage imageNamed:@"avatar"]; + photoMessage.avatarUrl = @"http://childapp.pailixiu.com/jack/JieIcon@2x.png"; photoMessage.bubbleMessageType = bubbleMessageType; return photoMessage; @@ -45,8 +43,8 @@ - (XHMessage *)getPhotoMessageWithBubbleMessageType:(XHBubbleMessageType)bubbleM - (XHMessage *)getVideoMessageWithBubbleMessageType:(XHBubbleMessageType)bubbleMessageType { NSString *videoPath = [[NSBundle mainBundle] pathForResource:@"IMG_1555.MOV" ofType:@""]; XHMessage *videoMessage = [[XHMessage alloc] initWithVideoConverPhoto:[XHMessageVideoConverPhotoFactory videoConverPhotoWithVideoPath:videoPath] videoPath:videoPath videoUrl:nil sender:@"Jayson" timestamp:[NSDate date]]; - videoMessage.avator = [UIImage imageNamed:@"avator"]; - videoMessage.avatorUrl = @"http://www.pailixiu.com/jack/JieIcon@2x.png"; + videoMessage.avatar = [UIImage imageNamed:@"avatar"]; + videoMessage.avatarUrl = @"http://childapp.pailixiu.com/jack/JieIcon@2x.png"; videoMessage.bubbleMessageType = bubbleMessageType; return videoMessage; @@ -54,8 +52,8 @@ - (XHMessage *)getVideoMessageWithBubbleMessageType:(XHBubbleMessageType)bubbleM - (XHMessage *)getVoiceMessageWithBubbleMessageType:(XHBubbleMessageType)bubbleMessageType { XHMessage *voiceMessage = [[XHMessage alloc] initWithVoicePath:nil voiceUrl:nil voiceDuration:@"1" sender:@"Jayson" timestamp:[NSDate date]]; initWithVoicePath: voiceUrl: sender: timestamp: - voiceMessage.avator = [UIImage imageNamed:@"avator"]; - voiceMessage.avatorUrl = @"http://www.pailixiu.com/jack/JieIcon@2x.png"; + voiceMessage.avatar = [UIImage imageNamed:@"avatar"]; + voiceMessage.avatarUrl = @"http://childapp.pailixiu.com/jack/JieIcon@2x.png"; voiceMessage.bubbleMessageType = bubbleMessageType; return voiceMessage; @@ -63,8 +61,8 @@ - (XHMessage *)getVoiceMessageWithBubbleMessageType:(XHBubbleMessageType)bubbleM - (XHMessage *)getEmotionMessageWithBubbleMessageType:(XHBubbleMessageType)bubbleMessageType { XHMessage *emotionMessage = [[XHMessage alloc] initWithEmotionPath:[[NSBundle mainBundle] pathForResource:@"Demo0.gif" ofType:nil] sender:@"Jayson" timestamp:[NSDate date]]; - emotionMessage.avator = [UIImage imageNamed:@"avator"]; - emotionMessage.avatorUrl = @"http://www.pailixiu.com/jack/JieIcon@2x.png"; + emotionMessage.avatar = [UIImage imageNamed:@"avatar"]; + emotionMessage.avatarUrl = @"http://childapp.pailixiu.com/jack/JieIcon@2x.png"; emotionMessage.bubbleMessageType = bubbleMessageType; return emotionMessage; @@ -72,8 +70,8 @@ - (XHMessage *)getEmotionMessageWithBubbleMessageType:(XHBubbleMessageType)bubbl - (XHMessage *)getGeolocationsMessageWithBubbleMessageType:(XHBubbleMessageType)bubbleMessageType { XHMessage *localPositionMessage = [[XHMessage alloc] initWithLocalPositionPhoto:[UIImage imageNamed:@"Fav_Cell_Loc"] geolocations:@"中国广东省广州市天河区东圃二马路121号" location:[[CLLocation alloc] initWithLatitude:23.110387 longitude:113.399444] sender:@"Jack" timestamp:[NSDate date]]; - localPositionMessage.avator = [UIImage imageNamed:@"avator"]; - localPositionMessage.avatorUrl = @"http://www.pailixiu.com/jack/meIcon@2x.png"; + localPositionMessage.avatar = [UIImage imageNamed:@"avatar"]; + localPositionMessage.avatarUrl = @"http://childapp.pailixiu.com/jack/meIcon@2x.png"; localPositionMessage.bubbleMessageType = bubbleMessageType; return localPositionMessage; @@ -117,15 +115,19 @@ - (void)viewDidLoad [super viewDidLoad]; // Do any additional setup after loading the view. // Custom UI - // [self setBackgroundColor:[UIColor clearColor]]; - // [self setBackgroundImage:[UIImage imageNamed:@"TableViewBackgroundImage"]]; + if (CURRENT_SYS_VERSION >= 7.0) { + self.navigationController.interactivePopGestureRecognizer.delaysTouchesBegan=NO; + } + +// [self setBackgroundColor:[UIColor clearColor]]; +// [self setBackgroundImage:[UIImage imageNamed:@"TableViewBackgroundImage"]]; // 设置自身用户名 self.messageSender = @"Jack"; // 添加第三方接入数据 NSMutableArray *shareMenuItems = [NSMutableArray array]; - NSArray *plugIcons = @[@"sharemore_pic", @"sharemore_video", @"sharemore_location", @"sharemore_friendcard", @"sharemore_myfav", @"sharemore_wxtalk", @"sharemore_videovoip", @"sharemore_voiceinput", @"sharemore_openapi", @"sharemore_openapi", @"avator"]; + NSArray *plugIcons = @[@"sharemore_pic", @"sharemore_video", @"sharemore_location", @"sharemore_friendcard", @"sharemore_myfav", @"sharemore_wxtalk", @"sharemore_videovoip", @"sharemore_voiceinput", @"sharemore_openapi", @"sharemore_openapi", @"avatar"]; NSArray *plugTitle = @[@"照片", @"拍摄", @"位置", @"名片", @"我的收藏", @"实时对讲机", @"视频聊天", @"语音输入", @"大众点评", @"应用", @"曾宪华"]; for (NSString *plugIcon in plugIcons) { XHShareMenuItem *shareMenuItem = [[XHShareMenuItem alloc] initWithNormalIconImage:[UIImage imageNamed:plugIcon] title:[plugTitle objectAtIndex:[plugIcons indexOfObject:plugIcon]]]; @@ -241,10 +243,9 @@ - (void)didDoubleSelectedOnTextMessage:(id)message atIndexPath:( [self.navigationController pushViewController:displayTextViewController animated:YES]; } -- (void)didSelectedAvatorAtIndexPath:(NSIndexPath *)indexPath { +- (void)didSelectedAvatarOnMessage:(id )message atIndexPath:(NSIndexPath *)indexPath { DLog(@"indexPath : %@", indexPath); - XHProfileTableViewController *profileTableViewController = [[XHProfileTableViewController alloc] init]; - [self.navigationController pushViewController:profileTableViewController animated:YES]; + } - (void)menuDidSelectedAtBubbleMessageMenuSelecteType:(XHBubbleMessageMenuSelecteType)bubbleMessageMenuSelecteType { @@ -363,6 +364,8 @@ - (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id case NSFetchedResultsChangeDelete: [self.messageTableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex] withRowAnimation:UITableViewRowAnimationFade]; break; + default: + break; } } @@ -408,10 +411,10 @@ - (void)loadMoreMessagesScrollTotop { WEAKSELF dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ NSMutableArray *messages = [weakSelf getTestMessages]; - sleep(3); dispatch_async(dispatch_get_main_queue(), ^{ - [weakSelf insertOldMessages:messages]; - weakSelf.loadingMoreMessage = NO; + [weakSelf insertOldMessages:messages completion:^{ + weakSelf.loadingMoreMessage = NO; + }]; }); }); } @@ -426,8 +429,8 @@ - (void)loadMoreMessagesScrollTotop { */ - (void)didSendText:(NSString *)text fromSender:(NSString *)sender onDate:(NSDate *)date { XHMessage *textMessage = [[XHMessage alloc] initWithText:text sender:sender timestamp:date]; - textMessage.avator = [UIImage imageNamed:@"avator"]; - textMessage.avatorUrl = @"http://www.pailixiu.com/jack/meIcon@2x.png"; + textMessage.avatar = [UIImage imageNamed:@"avatar"]; + textMessage.avatarUrl = @"http://childapp.pailixiu.com/jack/meIcon@2x.png"; [self insertNewObject:textMessage]; [self finishSendMessageWithBubbleMessageType:XHBubbleMessageMediaTypeText]; [self scrollToBottomAnimated:YES]; @@ -442,8 +445,8 @@ - (void)didSendText:(NSString *)text fromSender:(NSString *)sender onDate:(NSDat */ - (void)didSendPhoto:(UIImage *)photo fromSender:(NSString *)sender onDate:(NSDate *)date { XHMessage *photoMessage = [[XHMessage alloc] initWithPhoto:photo thumbnailUrl:nil originPhotoUrl:nil sender:sender timestamp:date]; - photoMessage.avator = [UIImage imageNamed:@"avator"]; - photoMessage.avatorUrl = @"http://www.pailixiu.com/jack/meIcon@2x.png"; + photoMessage.avatar = [UIImage imageNamed:@"avatar"]; + photoMessage.avatarUrl = @"http://childapp.pailixiu.com/jack/meIcon@2x.png"; [self addMessage:photoMessage]; [self finishSendMessageWithBubbleMessageType:XHBubbleMessageMediaTypePhoto]; } @@ -457,8 +460,8 @@ - (void)didSendPhoto:(UIImage *)photo fromSender:(NSString *)sender onDate:(NSDa */ - (void)didSendVideoConverPhoto:(UIImage *)videoConverPhoto videoPath:(NSString *)videoPath fromSender:(NSString *)sender onDate:(NSDate *)date { XHMessage *videoMessage = [[XHMessage alloc] initWithVideoConverPhoto:videoConverPhoto videoPath:videoPath videoUrl:nil sender:sender timestamp:date]; - videoMessage.avator = [UIImage imageNamed:@"avator"]; - videoMessage.avatorUrl = @"http://www.pailixiu.com/jack/meIcon@2x.png"; + videoMessage.avatar = [UIImage imageNamed:@"avatar"]; + videoMessage.avatarUrl = @"http://childapp.pailixiu.com/jack/meIcon@2x.png"; [self addMessage:videoMessage]; [self finishSendMessageWithBubbleMessageType:XHBubbleMessageMediaTypeVideo]; } @@ -473,8 +476,8 @@ - (void)didSendVideoConverPhoto:(UIImage *)videoConverPhoto videoPath:(NSString */ - (void)didSendVoice:(NSString *)voicePath voiceDuration:(NSString*)voiceDuration fromSender:(NSString *)sender onDate:(NSDate *)date { XHMessage *voiceMessage = [[XHMessage alloc] initWithVoicePath:voicePath voiceUrl:nil voiceDuration:voiceDuration sender:sender timestamp:date]; - voiceMessage.avator = [UIImage imageNamed:@"avator"]; - voiceMessage.avatorUrl = @"http://www.pailixiu.com/jack/meIcon@2x.png"; + voiceMessage.avatar = [UIImage imageNamed:@"avatar"]; + voiceMessage.avatarUrl = @"http://childapp.pailixiu.com/jack/meIcon@2x.png"; [self addMessage:voiceMessage]; [self finishSendMessageWithBubbleMessageType:XHBubbleMessageMediaTypeVoice]; } @@ -487,11 +490,16 @@ - (void)didSendVoice:(NSString *)voicePath voiceDuration:(NSString*)voiceDuratio * @param date 发送时间 */ - (void)didSendEmotion:(NSString *)emotionPath fromSender:(NSString *)sender onDate:(NSDate *)date { - XHMessage *emotionMessage = [[XHMessage alloc] initWithEmotionPath:emotionPath sender:sender timestamp:date]; - emotionMessage.avator = [UIImage imageNamed:@"avator"]; - emotionMessage.avatorUrl = @"http://www.pailixiu.com/jack/meIcon@2x.png"; - [self addMessage:emotionMessage]; - [self finishSendMessageWithBubbleMessageType:XHBubbleMessageMediaTypeEmotion]; + if (emotionPath) { + XHMessage *emotionMessage = [[XHMessage alloc] initWithEmotionPath:emotionPath sender:sender timestamp:date]; + emotionMessage.avatar = [UIImage imageNamed:@"avatar"]; + emotionMessage.avatarUrl = @"http://childapp.pailixiu.com/jack/meIcon@2x.png"; + [self addMessage:emotionMessage]; + [self finishSendMessageWithBubbleMessageType:XHBubbleMessageMediaTypeEmotion]; + + } else { + [[[UIAlertView alloc] initWithTitle:@"温馨提示" message:@"如果想测试,请运行MessageDisplayKitWeChatExample工程" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"确定", nil] show]; + } } /** @@ -499,8 +507,8 @@ - (void)didSendEmotion:(NSString *)emotionPath fromSender:(NSString *)sender onD */ - (void)didSendGeoLocationsPhoto:(UIImage *)geoLocationsPhoto geolocations:(NSString *)geolocations location:(CLLocation *)location fromSender:(NSString *)sender onDate:(NSDate *)date { XHMessage *geoLocationsMessage = [[XHMessage alloc] initWithLocalPositionPhoto:geoLocationsPhoto geolocations:geolocations location:location sender:sender timestamp:date]; - geoLocationsMessage.avator = [UIImage imageNamed:@"avator"]; - geoLocationsMessage.avatorUrl = @"http://www.pailixiu.com/jack/meIcon@2x.png"; + geoLocationsMessage.avatar = [UIImage imageNamed:@"avatar"]; + geoLocationsMessage.avatarUrl = @"http://childapp.pailixiu.com/jack/meIcon@2x.png"; [self addMessage:geoLocationsMessage]; [self finishSendMessageWithBubbleMessageType:XHBubbleMessageMediaTypeLocalPosition]; } diff --git a/Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion13.gif b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion0.gif similarity index 100% rename from Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion13.gif rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion0.gif diff --git a/Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion14.gif b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion1.gif similarity index 100% rename from Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion14.gif rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion1.gif diff --git a/Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion8.gif b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion10.gif similarity index 100% rename from Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion8.gif rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion10.gif diff --git a/Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion1.gif b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion11.gif similarity index 100% rename from Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion1.gif rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion11.gif diff --git a/Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion7.gif b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion12.gif similarity index 100% rename from Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion7.gif rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion12.gif diff --git a/Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion5.gif b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion13.gif similarity index 100% rename from Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion5.gif rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion13.gif diff --git a/Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion9.gif b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion14.gif similarity index 100% rename from Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion9.gif rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion14.gif diff --git a/Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion12.gif b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion15.gif similarity index 100% rename from Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion12.gif rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion15.gif diff --git a/Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion15.gif b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion16.gif similarity index 100% rename from Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion15.gif rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion16.gif diff --git a/Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion16.gif b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion2.gif similarity index 100% rename from Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion16.gif rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion2.gif diff --git a/Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion4.gif b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion3.gif similarity index 100% rename from Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion4.gif rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion3.gif diff --git a/Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion2.gif b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion4.gif similarity index 100% rename from Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion2.gif rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion4.gif diff --git a/Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion0.gif b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion5.gif similarity index 100% rename from Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion0.gif rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion5.gif diff --git a/Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion6.gif b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion6.gif similarity index 100% rename from Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion6.gif rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion6.gif diff --git a/Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion10.gif b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion7.gif similarity index 100% rename from Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion10.gif rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion7.gif diff --git a/Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion11.gif b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion8.gif similarity index 100% rename from Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion11.gif rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion8.gif diff --git a/Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion3.gif b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion9.gif similarity index 100% rename from Example/MessageDisplayExample/MessageDisplayExample/ExampleResources/EmotionImages/emoticons/emotion3.gif rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/emoticons/emotion9.gif diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/en.lproj/InfoPlist.strings b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/en.lproj/InfoPlist.strings index 477b28f..5075401 100644 --- a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/en.lproj/InfoPlist.strings +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/en.lproj/InfoPlist.strings @@ -1,2 +1,3 @@ /* Localized versions of Info.plist keys */ +CFBundleDisplayName = "华捷微信"; \ No newline at end of file diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/main.m b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/main.m index c6a3579..9f1d03b 100644 --- a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/main.m +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/main.m @@ -3,7 +3,7 @@ // MessageDisplayKitCoreDataExample // // Created by 曾 宪华 on 14-5-29. -// Copyright (c) 2014年 曾宪华 QQ群: (142557668) QQ:543413507 Gmail:xhzengAIB@gmail.com. All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Resources/section0_emotion0@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion0@2x.png similarity index 100% rename from MessageDisplayKit/Resources/section0_emotion0@2x.png rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion0@2x.png diff --git a/MessageDisplayKit/Resources/section0_emotion10@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion10@2x.png similarity index 100% rename from MessageDisplayKit/Resources/section0_emotion10@2x.png rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion10@2x.png diff --git a/MessageDisplayKit/Resources/section0_emotion11@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion11@2x.png similarity index 100% rename from MessageDisplayKit/Resources/section0_emotion11@2x.png rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion11@2x.png diff --git a/MessageDisplayKit/Resources/section0_emotion12@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion12@2x.png similarity index 100% rename from MessageDisplayKit/Resources/section0_emotion12@2x.png rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion12@2x.png diff --git a/MessageDisplayKit/Resources/section0_emotion13@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion13@2x.png similarity index 100% rename from MessageDisplayKit/Resources/section0_emotion13@2x.png rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion13@2x.png diff --git a/MessageDisplayKit/Resources/section0_emotion14@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion14@2x.png similarity index 100% rename from MessageDisplayKit/Resources/section0_emotion14@2x.png rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion14@2x.png diff --git a/MessageDisplayKit/Resources/section0_emotion15@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion15@2x.png similarity index 100% rename from MessageDisplayKit/Resources/section0_emotion15@2x.png rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion15@2x.png diff --git a/MessageDisplayKit/Resources/section0_emotion1@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion1@2x.png similarity index 100% rename from MessageDisplayKit/Resources/section0_emotion1@2x.png rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion1@2x.png diff --git a/MessageDisplayKit/Resources/section0_emotion2@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion2@2x.png similarity index 100% rename from MessageDisplayKit/Resources/section0_emotion2@2x.png rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion2@2x.png diff --git a/MessageDisplayKit/Resources/section0_emotion3@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion3@2x.png similarity index 100% rename from MessageDisplayKit/Resources/section0_emotion3@2x.png rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion3@2x.png diff --git a/MessageDisplayKit/Resources/section0_emotion4@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion4@2x.png similarity index 100% rename from MessageDisplayKit/Resources/section0_emotion4@2x.png rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion4@2x.png diff --git a/MessageDisplayKit/Resources/section0_emotion5@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion5@2x.png similarity index 100% rename from MessageDisplayKit/Resources/section0_emotion5@2x.png rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion5@2x.png diff --git a/MessageDisplayKit/Resources/section0_emotion6@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion6@2x.png similarity index 100% rename from MessageDisplayKit/Resources/section0_emotion6@2x.png rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion6@2x.png diff --git a/MessageDisplayKit/Resources/section0_emotion7@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion7@2x.png similarity index 100% rename from MessageDisplayKit/Resources/section0_emotion7@2x.png rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion7@2x.png diff --git a/MessageDisplayKit/Resources/section0_emotion8@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion8@2x.png similarity index 100% rename from MessageDisplayKit/Resources/section0_emotion8@2x.png rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion8@2x.png diff --git a/MessageDisplayKit/Resources/section0_emotion9@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion9@2x.png similarity index 100% rename from MessageDisplayKit/Resources/section0_emotion9@2x.png rename to Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/section0_emotion9@2x.png diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_friendcard@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_friendcard@2x.png new file mode 100644 index 0000000..522e01a Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_friendcard@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_location@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_location@2x.png new file mode 100644 index 0000000..718b04e Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_location@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_myfav@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_myfav@2x.png new file mode 100644 index 0000000..755c240 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_myfav@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_openapi@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_openapi@2x.png new file mode 100644 index 0000000..43e0190 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_openapi@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_pic@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_pic@2x.png new file mode 100644 index 0000000..6d55408 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_pic@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_video@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_video@2x.png new file mode 100644 index 0000000..72a5f07 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_video@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_videovoip@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_videovoip@2x.png new file mode 100644 index 0000000..dd25d26 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_videovoip@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_voiceinput@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_voiceinput@2x.png new file mode 100644 index 0000000..1c0233c Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_voiceinput@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_voipvoice@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_voipvoice@2x.png new file mode 100644 index 0000000..b8413f1 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_voipvoice@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_wxtalk@2x.png b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_wxtalk@2x.png new file mode 100644 index 0000000..2201119 Binary files /dev/null and b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExample/sharemore_wxtalk@2x.png differ diff --git a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExampleTests/MessageDisplayKitCoreDataExampleTests.m b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExampleTests/MessageDisplayKitCoreDataExampleTests.m index e910abb..c99aa39 100644 --- a/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExampleTests/MessageDisplayKitCoreDataExampleTests.m +++ b/Example/MessageDisplayKitCoreDataExample/MessageDisplayKitCoreDataExampleTests/MessageDisplayKitCoreDataExampleTests.m @@ -3,7 +3,7 @@ // MessageDisplayKitCoreDataExampleTests // // Created by 曾 宪华 on 14-5-29. -// Copyright (c) 2014年 曾宪华 QQ群: (142557668) QQ:543413507 Gmail:xhzengAIB@gmail.com. All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample.xcodeproj/project.pbxproj b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample.xcodeproj/project.pbxproj new file mode 100644 index 0000000..ed514f1 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample.xcodeproj/project.pbxproj @@ -0,0 +1,929 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 70013D721ABEB4190050D0F7 /* AVIMEmotionMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = 70013D711ABEB4190050D0F7 /* AVIMEmotionMessage.m */; }; + 702136D21BB1257100919837 /* AVOSCloud.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 702136D11BB1257100919837 /* AVOSCloud.framework */; settings = {ASSET_TAGS = (); }; }; + 702136D41BB1258200919837 /* AVOSCloudIM.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 702136D31BB1258200919837 /* AVOSCloudIM.framework */; settings = {ASSET_TAGS = (); }; }; + 702136D51BB125AF00919837 /* AVOSCloudIM.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 702136D31BB1258200919837 /* AVOSCloudIM.framework */; }; + 702136D61BB125AF00919837 /* AVOSCloudIM.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 702136D31BB1258200919837 /* AVOSCloudIM.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 702136D71BB125AF00919837 /* AVOSCloud.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 702136D11BB1257100919837 /* AVOSCloud.framework */; }; + 702136D81BB125AF00919837 /* AVOSCloud.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 702136D11BB1257100919837 /* AVOSCloud.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + 702C68B91AE038530085CD78 /* AVIMConversation+Custom.m in Sources */ = {isa = PBXBuildFile; fileRef = 702C68B81AE038530085CD78 /* AVIMConversation+Custom.m */; }; + 702C68BD1AE03B280085CD78 /* JSBadgeView.m in Sources */ = {isa = PBXBuildFile; fileRef = 702C68BC1AE03B280085CD78 /* JSBadgeView.m */; }; + 702C68C01AE136210085CD78 /* LeanChatConversationTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 702C68BF1AE136210085CD78 /* LeanChatConversationTableViewCell.m */; }; + 70457B1C1ADBB70600452531 /* LeanChatConversationTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 70457B1B1ADBB70600452531 /* LeanChatConversationTableViewController.m */; }; + 7053E7251B42F3FF00DE808D /* keyboard_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7053E7231B42F3FF00DE808D /* keyboard_HL@2x.png */; }; + 7053E7261B42F3FF00DE808D /* keyboard@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7053E7241B42F3FF00DE808D /* keyboard@2x.png */; }; + 70A6A1711B669F1D005C2D21 /* MessageDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70A6A1701B669F1D005C2D21 /* MessageDisplayKit.framework */; }; + 70A6A1721B669F65005C2D21 /* MessageDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 70A6A1701B669F1D005C2D21 /* MessageDisplayKit.framework */; }; + 70A6A1731B669F65005C2D21 /* MessageDisplayKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 70A6A1701B669F1D005C2D21 /* MessageDisplayKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + E4ABB0191B3D2F990015DC5F /* libsqlite3.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = 70BEDC091B3415DC004A1D39 /* libsqlite3.dylib */; }; + E4ABB01C1B3D2FB10015DC5F /* LeanChatCoreDataManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E4ABB01B1B3D2FB10015DC5F /* LeanChatCoreDataManager.m */; }; + E4ABB02F1B3D30C30015DC5F /* emotion0.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4ABB01E1B3D30C30015DC5F /* emotion0.gif */; }; + E4ABB0301B3D30C30015DC5F /* emotion1.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4ABB01F1B3D30C30015DC5F /* emotion1.gif */; }; + E4ABB0311B3D30C30015DC5F /* emotion10.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4ABB0201B3D30C30015DC5F /* emotion10.gif */; }; + E4ABB0321B3D30C30015DC5F /* emotion11.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4ABB0211B3D30C30015DC5F /* emotion11.gif */; }; + E4ABB0331B3D30C30015DC5F /* emotion12.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4ABB0221B3D30C30015DC5F /* emotion12.gif */; }; + E4ABB0341B3D30C30015DC5F /* emotion13.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4ABB0231B3D30C30015DC5F /* emotion13.gif */; }; + E4ABB0351B3D30C30015DC5F /* emotion14.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4ABB0241B3D30C30015DC5F /* emotion14.gif */; }; + E4ABB0361B3D30C30015DC5F /* emotion15.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4ABB0251B3D30C30015DC5F /* emotion15.gif */; }; + E4ABB0371B3D30C30015DC5F /* emotion16.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4ABB0261B3D30C30015DC5F /* emotion16.gif */; }; + E4ABB0381B3D30C30015DC5F /* emotion2.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4ABB0271B3D30C30015DC5F /* emotion2.gif */; }; + E4ABB0391B3D30C30015DC5F /* emotion3.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4ABB0281B3D30C30015DC5F /* emotion3.gif */; }; + E4ABB03A1B3D30C30015DC5F /* emotion4.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4ABB0291B3D30C30015DC5F /* emotion4.gif */; }; + E4ABB03B1B3D30C30015DC5F /* emotion5.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4ABB02A1B3D30C30015DC5F /* emotion5.gif */; }; + E4ABB03C1B3D30C30015DC5F /* emotion6.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4ABB02B1B3D30C30015DC5F /* emotion6.gif */; }; + E4ABB03D1B3D30C30015DC5F /* emotion7.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4ABB02C1B3D30C30015DC5F /* emotion7.gif */; }; + E4ABB03E1B3D30C30015DC5F /* emotion8.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4ABB02D1B3D30C30015DC5F /* emotion8.gif */; }; + E4ABB03F1B3D30C30015DC5F /* emotion9.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4ABB02E1B3D30C30015DC5F /* emotion9.gif */; }; + E4D6734E1ABD9C5F0000B18D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E4D6734D1ABD9C5F0000B18D /* main.m */; }; + E4D673511ABD9C5F0000B18D /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E4D673501ABD9C5F0000B18D /* AppDelegate.m */; }; + E4D6735A1ABD9C5F0000B18D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E4D673581ABD9C5F0000B18D /* Main.storyboard */; }; + E4D6735C1ABD9C5F0000B18D /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E4D6735B1ABD9C5F0000B18D /* Images.xcassets */; }; + E4D6735F1ABD9C5F0000B18D /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = E4D6735D1ABD9C5F0000B18D /* LaunchScreen.xib */; }; + E4D673D71ABD9CAD0000B18D /* avator@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D6737B1ABD9CAD0000B18D /* avator@2x.png */; }; + E4D673E21ABD9CAD0000B18D /* MessageDisplayKitString.strings in Resources */ = {isa = PBXBuildFile; fileRef = E4D673861ABD9CAD0000B18D /* MessageDisplayKitString.strings */; }; + E4D673E31ABD9CAD0000B18D /* face@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673881ABD9CAD0000B18D /* face@2x.png */; }; + E4D673E41ABD9CAD0000B18D /* face_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673891ABD9CAD0000B18D /* face_HL@2x.png */; }; + E4D673E51ABD9CAD0000B18D /* Fav_Cell_Loc@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D6738A1ABD9CAD0000B18D /* Fav_Cell_Loc@2x.png */; }; + E4D673E81ABD9CAD0000B18D /* input-bar-flat.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D6738D1ABD9CAD0000B18D /* input-bar-flat.png */; }; + E4D673E91ABD9CAD0000B18D /* input-bar-flat@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D6738E1ABD9CAD0000B18D /* input-bar-flat@2x.png */; }; + E4D673EE1ABD9CAD0000B18D /* MessageVideoPlay@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673931ABD9CAD0000B18D /* MessageVideoPlay@2x.png */; }; + E4D673F01ABD9CAD0000B18D /* msg_chat_voice_unread.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673951ABD9CAD0000B18D /* msg_chat_voice_unread.png */; }; + E4D673F11ABD9CAD0000B18D /* msg_chat_voice_unread@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673961ABD9CAD0000B18D /* msg_chat_voice_unread@2x.png */; }; + E4D673F21ABD9CAD0000B18D /* multiMedia@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673971ABD9CAD0000B18D /* multiMedia@2x.png */; }; + E4D673F31ABD9CAD0000B18D /* multiMedia_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673981ABD9CAD0000B18D /* multiMedia_HL@2x.png */; }; + E4D673F61ABD9CAD0000B18D /* placeholderImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D6739B1ABD9CAD0000B18D /* placeholderImage@2x.png */; }; + E4D673F71ABD9CAD0000B18D /* ReceiverVoiceNodePlaying000@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D6739C1ABD9CAD0000B18D /* ReceiverVoiceNodePlaying000@2x.png */; }; + E4D673F81ABD9CAD0000B18D /* ReceiverVoiceNodePlaying001@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D6739D1ABD9CAD0000B18D /* ReceiverVoiceNodePlaying001@2x.png */; }; + E4D673F91ABD9CAD0000B18D /* ReceiverVoiceNodePlaying002@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D6739E1ABD9CAD0000B18D /* ReceiverVoiceNodePlaying002@2x.png */; }; + E4D673FA1ABD9CAD0000B18D /* ReceiverVoiceNodePlaying003@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D6739F1ABD9CAD0000B18D /* ReceiverVoiceNodePlaying003@2x.png */; }; + E4D673FB1ABD9CAD0000B18D /* ReceiverVoiceNodePlaying@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673A01ABD9CAD0000B18D /* ReceiverVoiceNodePlaying@2x.png */; }; + E4D673FC1ABD9CAD0000B18D /* RecordCancel@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673A11ABD9CAD0000B18D /* RecordCancel@2x.png */; }; + E4D673FD1ABD9CAD0000B18D /* RecordingBkg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673A21ABD9CAD0000B18D /* RecordingBkg@2x.png */; }; + E4D673FE1ABD9CAD0000B18D /* RecordingSignal001@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673A31ABD9CAD0000B18D /* RecordingSignal001@2x.png */; }; + E4D673FF1ABD9CAD0000B18D /* RecordingSignal002@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673A41ABD9CAD0000B18D /* RecordingSignal002@2x.png */; }; + E4D674001ABD9CAD0000B18D /* RecordingSignal003@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673A51ABD9CAD0000B18D /* RecordingSignal003@2x.png */; }; + E4D674011ABD9CAD0000B18D /* RecordingSignal004@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673A61ABD9CAD0000B18D /* RecordingSignal004@2x.png */; }; + E4D674021ABD9CAD0000B18D /* RecordingSignal005@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673A71ABD9CAD0000B18D /* RecordingSignal005@2x.png */; }; + E4D674031ABD9CAD0000B18D /* RecordingSignal006@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673A81ABD9CAD0000B18D /* RecordingSignal006@2x.png */; }; + E4D674041ABD9CAD0000B18D /* RecordingSignal007@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673A91ABD9CAD0000B18D /* RecordingSignal007@2x.png */; }; + E4D674051ABD9CAD0000B18D /* RecordingSignal008@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673AA1ABD9CAD0000B18D /* RecordingSignal008@2x.png */; }; + E4D674071ABD9CAD0000B18D /* SECoreTextView.bundle in Resources */ = {isa = PBXBuildFile; fileRef = E4D673AC1ABD9CAD0000B18D /* SECoreTextView.bundle */; }; + E4D674181ABD9CAD0000B18D /* SenderVoiceNodePlaying000@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673BD1ABD9CAD0000B18D /* SenderVoiceNodePlaying000@2x.png */; }; + E4D674191ABD9CAD0000B18D /* SenderVoiceNodePlaying001@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673BE1ABD9CAD0000B18D /* SenderVoiceNodePlaying001@2x.png */; }; + E4D6741A1ABD9CAD0000B18D /* SenderVoiceNodePlaying002@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673BF1ABD9CAD0000B18D /* SenderVoiceNodePlaying002@2x.png */; }; + E4D6741B1ABD9CAD0000B18D /* SenderVoiceNodePlaying003@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673C01ABD9CAD0000B18D /* SenderVoiceNodePlaying003@2x.png */; }; + E4D6741C1ABD9CAD0000B18D /* SenderVoiceNodePlaying@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673C11ABD9CAD0000B18D /* SenderVoiceNodePlaying@2x.png */; }; + E4D674271ABD9CAD0000B18D /* voice@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673CC1ABD9CAD0000B18D /* voice@2x.png */; }; + E4D674281ABD9CAD0000B18D /* voice_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673CD1ABD9CAD0000B18D /* voice_HL@2x.png */; }; + E4D674291ABD9CAD0000B18D /* VoiceBtn_Black@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673CE1ABD9CAD0000B18D /* VoiceBtn_Black@2x.png */; }; + E4D6742A1ABD9CAD0000B18D /* VoiceBtn_BlackHL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673CF1ABD9CAD0000B18D /* VoiceBtn_BlackHL@2x.png */; }; + E4D6742C1ABD9CAD0000B18D /* weChatBubble_Receiving_Solid@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673D11ABD9CAD0000B18D /* weChatBubble_Receiving_Solid@2x.png */; }; + E4D6742E1ABD9CAD0000B18D /* weChatBubble_Sending_Solid@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D673D31ABD9CAD0000B18D /* weChatBubble_Sending_Solid@2x.png */; }; + E4D674371ABD9DBC0000B18D /* MessageDisplayKitLeanchatExample.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = E4D674311ABD9DBC0000B18D /* MessageDisplayKitLeanchatExample.xcdatamodeld */; }; + E4D674381ABD9DBC0000B18D /* LeanChatViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E4D674361ABD9DBC0000B18D /* LeanChatViewController.m */; }; + E4D6743C1ABD9EAF0000B18D /* LeanChatManager.m in Sources */ = {isa = PBXBuildFile; fileRef = E4D6743B1ABD9EAF0000B18D /* LeanChatManager.m */; }; + E4D674401ABD9F0B0000B18D /* LeanChatMessageTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = E4D6743F1ABD9F0B0000B18D /* LeanChatMessageTableViewController.m */; }; + E4D6744D1ABDA4670000B18D /* SystemConfiguration.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4D6744C1ABDA4670000B18D /* SystemConfiguration.framework */; }; + E4D6744F1ABDA46F0000B18D /* MobileCoreServices.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4D6744E1ABDA46F0000B18D /* MobileCoreServices.framework */; }; + E4D674511ABDA4740000B18D /* CoreTelephony.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4D674501ABDA4740000B18D /* CoreTelephony.framework */; }; + E4D674531ABDA47B0000B18D /* CoreLocation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E4D674521ABDA47B0000B18D /* CoreLocation.framework */; }; + E4D674621ABDA6860000B18D /* libicucore.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = E4D674611ABDA6860000B18D /* libicucore.dylib */; }; + E4D674641ABDBF900000B18D /* TableViewBackgroundImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4D674631ABDBF900000B18D /* TableViewBackgroundImage@2x.png */; }; + E4EE9A5D1B9760D100866998 /* SearchIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A421B9760D100866998 /* SearchIcon@2x.png */; }; + E4EE9A5E1B9760D100866998 /* section0_emotion0@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A431B9760D100866998 /* section0_emotion0@2x.png */; }; + E4EE9A5F1B9760D100866998 /* section0_emotion1@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A441B9760D100866998 /* section0_emotion1@2x.png */; }; + E4EE9A601B9760D100866998 /* section0_emotion2@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A451B9760D100866998 /* section0_emotion2@2x.png */; }; + E4EE9A611B9760D100866998 /* section0_emotion3@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A461B9760D100866998 /* section0_emotion3@2x.png */; }; + E4EE9A621B9760D100866998 /* section0_emotion4@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A471B9760D100866998 /* section0_emotion4@2x.png */; }; + E4EE9A631B9760D100866998 /* section0_emotion5@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A481B9760D100866998 /* section0_emotion5@2x.png */; }; + E4EE9A641B9760D100866998 /* section0_emotion6@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A491B9760D100866998 /* section0_emotion6@2x.png */; }; + E4EE9A651B9760D100866998 /* section0_emotion7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A4A1B9760D100866998 /* section0_emotion7@2x.png */; }; + E4EE9A661B9760D100866998 /* section0_emotion8@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A4B1B9760D100866998 /* section0_emotion8@2x.png */; }; + E4EE9A671B9760D100866998 /* section0_emotion9@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A4C1B9760D100866998 /* section0_emotion9@2x.png */; }; + E4EE9A681B9760D100866998 /* section0_emotion10@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A4D1B9760D100866998 /* section0_emotion10@2x.png */; }; + E4EE9A691B9760D100866998 /* section0_emotion11@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A4E1B9760D100866998 /* section0_emotion11@2x.png */; }; + E4EE9A6A1B9760D100866998 /* section0_emotion12@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A4F1B9760D100866998 /* section0_emotion12@2x.png */; }; + E4EE9A6B1B9760D100866998 /* section0_emotion13@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A501B9760D100866998 /* section0_emotion13@2x.png */; }; + E4EE9A6C1B9760D100866998 /* section0_emotion14@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A511B9760D100866998 /* section0_emotion14@2x.png */; }; + E4EE9A6D1B9760D100866998 /* section0_emotion15@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A521B9760D100866998 /* section0_emotion15@2x.png */; }; + E4EE9A6E1B9760D100866998 /* sharemore_friendcard@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A531B9760D100866998 /* sharemore_friendcard@2x.png */; }; + E4EE9A6F1B9760D100866998 /* sharemore_location@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A541B9760D100866998 /* sharemore_location@2x.png */; }; + E4EE9A701B9760D100866998 /* sharemore_myfav@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A551B9760D100866998 /* sharemore_myfav@2x.png */; }; + E4EE9A711B9760D100866998 /* sharemore_openapi@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A561B9760D100866998 /* sharemore_openapi@2x.png */; }; + E4EE9A721B9760D100866998 /* sharemore_pic@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A571B9760D100866998 /* sharemore_pic@2x.png */; }; + E4EE9A731B9760D100866998 /* sharemore_video@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A581B9760D100866998 /* sharemore_video@2x.png */; }; + E4EE9A741B9760D100866998 /* sharemore_videovoip@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A591B9760D100866998 /* sharemore_videovoip@2x.png */; }; + E4EE9A751B9760D100866998 /* sharemore_voiceinput@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A5A1B9760D100866998 /* sharemore_voiceinput@2x.png */; }; + E4EE9A761B9760D100866998 /* sharemore_voipvoice@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A5B1B9760D100866998 /* sharemore_voipvoice@2x.png */; }; + E4EE9A771B9760D100866998 /* sharemore_wxtalk@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9A5C1B9760D100866998 /* sharemore_wxtalk@2x.png */; }; +/* End PBXBuildFile section */ + +/* Begin PBXCopyFilesBuildPhase section */ + E4D674461ABDA18B0000B18D /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + 70A6A1731B669F65005C2D21 /* MessageDisplayKit.framework in Embed Frameworks */, + 702136D61BB125AF00919837 /* AVOSCloudIM.framework in Embed Frameworks */, + 702136D81BB125AF00919837 /* AVOSCloud.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 70013D701ABEB4190050D0F7 /* AVIMEmotionMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AVIMEmotionMessage.h; sourceTree = ""; }; + 70013D711ABEB4190050D0F7 /* AVIMEmotionMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = AVIMEmotionMessage.m; sourceTree = ""; }; + 702136D11BB1257100919837 /* AVOSCloud.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AVOSCloud.framework; sourceTree = ""; }; + 702136D31BB1258200919837 /* AVOSCloudIM.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = AVOSCloudIM.framework; sourceTree = ""; }; + 702C68B71AE038530085CD78 /* AVIMConversation+Custom.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "AVIMConversation+Custom.h"; sourceTree = ""; }; + 702C68B81AE038530085CD78 /* AVIMConversation+Custom.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "AVIMConversation+Custom.m"; sourceTree = ""; }; + 702C68BB1AE03B280085CD78 /* JSBadgeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSBadgeView.h; sourceTree = ""; }; + 702C68BC1AE03B280085CD78 /* JSBadgeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = JSBadgeView.m; sourceTree = ""; }; + 702C68BE1AE136210085CD78 /* LeanChatConversationTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LeanChatConversationTableViewCell.h; sourceTree = ""; }; + 702C68BF1AE136210085CD78 /* LeanChatConversationTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LeanChatConversationTableViewCell.m; sourceTree = ""; }; + 70457B1A1ADBB70600452531 /* LeanChatConversationTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LeanChatConversationTableViewController.h; sourceTree = ""; }; + 70457B1B1ADBB70600452531 /* LeanChatConversationTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LeanChatConversationTableViewController.m; sourceTree = ""; }; + 7053E7231B42F3FF00DE808D /* keyboard_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyboard_HL@2x.png"; sourceTree = ""; }; + 7053E7241B42F3FF00DE808D /* keyboard@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyboard@2x.png"; sourceTree = ""; }; + 70A6A1701B669F1D005C2D21 /* MessageDisplayKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = MessageDisplayKit.framework; sourceTree = ""; }; + 70BEDC091B3415DC004A1D39 /* libsqlite3.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libsqlite3.dylib; path = usr/lib/libsqlite3.dylib; sourceTree = SDKROOT; }; + E4ABB01A1B3D2FB10015DC5F /* LeanChatCoreDataManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LeanChatCoreDataManager.h; sourceTree = ""; }; + E4ABB01B1B3D2FB10015DC5F /* LeanChatCoreDataManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LeanChatCoreDataManager.m; sourceTree = ""; }; + E4ABB01E1B3D30C30015DC5F /* emotion0.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion0.gif; sourceTree = ""; }; + E4ABB01F1B3D30C30015DC5F /* emotion1.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion1.gif; sourceTree = ""; }; + E4ABB0201B3D30C30015DC5F /* emotion10.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion10.gif; sourceTree = ""; }; + E4ABB0211B3D30C30015DC5F /* emotion11.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion11.gif; sourceTree = ""; }; + E4ABB0221B3D30C30015DC5F /* emotion12.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion12.gif; sourceTree = ""; }; + E4ABB0231B3D30C30015DC5F /* emotion13.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion13.gif; sourceTree = ""; }; + E4ABB0241B3D30C30015DC5F /* emotion14.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion14.gif; sourceTree = ""; }; + E4ABB0251B3D30C30015DC5F /* emotion15.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion15.gif; sourceTree = ""; }; + E4ABB0261B3D30C30015DC5F /* emotion16.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion16.gif; sourceTree = ""; }; + E4ABB0271B3D30C30015DC5F /* emotion2.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion2.gif; sourceTree = ""; }; + E4ABB0281B3D30C30015DC5F /* emotion3.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion3.gif; sourceTree = ""; }; + E4ABB0291B3D30C30015DC5F /* emotion4.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion4.gif; sourceTree = ""; }; + E4ABB02A1B3D30C30015DC5F /* emotion5.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion5.gif; sourceTree = ""; }; + E4ABB02B1B3D30C30015DC5F /* emotion6.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion6.gif; sourceTree = ""; }; + E4ABB02C1B3D30C30015DC5F /* emotion7.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion7.gif; sourceTree = ""; }; + E4ABB02D1B3D30C30015DC5F /* emotion8.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion8.gif; sourceTree = ""; }; + E4ABB02E1B3D30C30015DC5F /* emotion9.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion9.gif; sourceTree = ""; }; + E4D673481ABD9C5F0000B18D /* MessageDisplayKitLeanchatExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MessageDisplayKitLeanchatExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; + E4D6734C1ABD9C5F0000B18D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E4D6734D1ABD9C5F0000B18D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + E4D6734F1ABD9C5F0000B18D /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; + E4D673501ABD9C5F0000B18D /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; + E4D673591ABD9C5F0000B18D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + E4D6735B1ABD9C5F0000B18D /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + E4D6735E1ABD9C5F0000B18D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; + E4D673691ABD9C5F0000B18D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + E4D6736A1ABD9C5F0000B18D /* MessageDisplayKitLeanchatExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MessageDisplayKitLeanchatExampleTests.m; sourceTree = ""; }; + E4D6737B1ABD9CAD0000B18D /* avator@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "avator@2x.png"; sourceTree = ""; }; + E4D673871ABD9CAD0000B18D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/MessageDisplayKitString.strings; sourceTree = ""; }; + E4D673881ABD9CAD0000B18D /* face@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "face@2x.png"; sourceTree = ""; }; + E4D673891ABD9CAD0000B18D /* face_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "face_HL@2x.png"; sourceTree = ""; }; + E4D6738A1ABD9CAD0000B18D /* Fav_Cell_Loc@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Fav_Cell_Loc@2x.png"; sourceTree = ""; }; + E4D6738D1ABD9CAD0000B18D /* input-bar-flat.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-bar-flat.png"; sourceTree = ""; }; + E4D6738E1ABD9CAD0000B18D /* input-bar-flat@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-bar-flat@2x.png"; sourceTree = ""; }; + E4D673931ABD9CAD0000B18D /* MessageVideoPlay@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MessageVideoPlay@2x.png"; sourceTree = ""; }; + E4D673951ABD9CAD0000B18D /* msg_chat_voice_unread.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = msg_chat_voice_unread.png; sourceTree = ""; }; + E4D673961ABD9CAD0000B18D /* msg_chat_voice_unread@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "msg_chat_voice_unread@2x.png"; sourceTree = ""; }; + E4D673971ABD9CAD0000B18D /* multiMedia@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "multiMedia@2x.png"; sourceTree = ""; }; + E4D673981ABD9CAD0000B18D /* multiMedia_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "multiMedia_HL@2x.png"; sourceTree = ""; }; + E4D6739B1ABD9CAD0000B18D /* placeholderImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "placeholderImage@2x.png"; sourceTree = ""; }; + E4D6739C1ABD9CAD0000B18D /* ReceiverVoiceNodePlaying000@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying000@2x.png"; sourceTree = ""; }; + E4D6739D1ABD9CAD0000B18D /* ReceiverVoiceNodePlaying001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying001@2x.png"; sourceTree = ""; }; + E4D6739E1ABD9CAD0000B18D /* ReceiverVoiceNodePlaying002@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying002@2x.png"; sourceTree = ""; }; + E4D6739F1ABD9CAD0000B18D /* ReceiverVoiceNodePlaying003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying003@2x.png"; sourceTree = ""; }; + E4D673A01ABD9CAD0000B18D /* ReceiverVoiceNodePlaying@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying@2x.png"; sourceTree = ""; }; + E4D673A11ABD9CAD0000B18D /* RecordCancel@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordCancel@2x.png"; sourceTree = ""; }; + E4D673A21ABD9CAD0000B18D /* RecordingBkg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingBkg@2x.png"; sourceTree = ""; }; + E4D673A31ABD9CAD0000B18D /* RecordingSignal001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal001@2x.png"; sourceTree = ""; }; + E4D673A41ABD9CAD0000B18D /* RecordingSignal002@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal002@2x.png"; sourceTree = ""; }; + E4D673A51ABD9CAD0000B18D /* RecordingSignal003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal003@2x.png"; sourceTree = ""; }; + E4D673A61ABD9CAD0000B18D /* RecordingSignal004@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal004@2x.png"; sourceTree = ""; }; + E4D673A71ABD9CAD0000B18D /* RecordingSignal005@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal005@2x.png"; sourceTree = ""; }; + E4D673A81ABD9CAD0000B18D /* RecordingSignal006@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal006@2x.png"; sourceTree = ""; }; + E4D673A91ABD9CAD0000B18D /* RecordingSignal007@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal007@2x.png"; sourceTree = ""; }; + E4D673AA1ABD9CAD0000B18D /* RecordingSignal008@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal008@2x.png"; sourceTree = ""; }; + E4D673AC1ABD9CAD0000B18D /* SECoreTextView.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = SECoreTextView.bundle; sourceTree = ""; }; + E4D673BD1ABD9CAD0000B18D /* SenderVoiceNodePlaying000@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying000@2x.png"; sourceTree = ""; }; + E4D673BE1ABD9CAD0000B18D /* SenderVoiceNodePlaying001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying001@2x.png"; sourceTree = ""; }; + E4D673BF1ABD9CAD0000B18D /* SenderVoiceNodePlaying002@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying002@2x.png"; sourceTree = ""; }; + E4D673C01ABD9CAD0000B18D /* SenderVoiceNodePlaying003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying003@2x.png"; sourceTree = ""; }; + E4D673C11ABD9CAD0000B18D /* SenderVoiceNodePlaying@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying@2x.png"; sourceTree = ""; }; + E4D673CC1ABD9CAD0000B18D /* voice@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "voice@2x.png"; sourceTree = ""; }; + E4D673CD1ABD9CAD0000B18D /* voice_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "voice_HL@2x.png"; sourceTree = ""; }; + E4D673CE1ABD9CAD0000B18D /* VoiceBtn_Black@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceBtn_Black@2x.png"; sourceTree = ""; }; + E4D673CF1ABD9CAD0000B18D /* VoiceBtn_BlackHL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceBtn_BlackHL@2x.png"; sourceTree = ""; }; + E4D673D11ABD9CAD0000B18D /* weChatBubble_Receiving_Solid@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weChatBubble_Receiving_Solid@2x.png"; sourceTree = ""; }; + E4D673D31ABD9CAD0000B18D /* weChatBubble_Sending_Solid@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weChatBubble_Sending_Solid@2x.png"; sourceTree = ""; }; + E4D673D41ABD9CAD0000B18D /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MessageDisplayKitString.strings"; sourceTree = ""; }; + E4D674321ABD9DBC0000B18D /* MessageDisplayKitLeanchatExample.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = MessageDisplayKitLeanchatExample.xcdatamodel; sourceTree = ""; }; + E4D674351ABD9DBC0000B18D /* LeanChatViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LeanChatViewController.h; sourceTree = ""; }; + E4D674361ABD9DBC0000B18D /* LeanChatViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LeanChatViewController.m; sourceTree = ""; }; + E4D6743A1ABD9EAF0000B18D /* LeanChatManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LeanChatManager.h; sourceTree = ""; }; + E4D6743B1ABD9EAF0000B18D /* LeanChatManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LeanChatManager.m; sourceTree = ""; }; + E4D6743E1ABD9F0B0000B18D /* LeanChatMessageTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LeanChatMessageTableViewController.h; sourceTree = ""; }; + E4D6743F1ABD9F0B0000B18D /* LeanChatMessageTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LeanChatMessageTableViewController.m; sourceTree = ""; }; + E4D6744C1ABDA4670000B18D /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; + E4D6744E1ABDA46F0000B18D /* MobileCoreServices.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MobileCoreServices.framework; path = System/Library/Frameworks/MobileCoreServices.framework; sourceTree = SDKROOT; }; + E4D674501ABDA4740000B18D /* CoreTelephony.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreTelephony.framework; path = System/Library/Frameworks/CoreTelephony.framework; sourceTree = SDKROOT; }; + E4D674521ABDA47B0000B18D /* CoreLocation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreLocation.framework; path = System/Library/Frameworks/CoreLocation.framework; sourceTree = SDKROOT; }; + E4D674611ABDA6860000B18D /* libicucore.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libicucore.dylib; path = usr/lib/libicucore.dylib; sourceTree = SDKROOT; }; + E4D674631ABDBF900000B18D /* TableViewBackgroundImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "TableViewBackgroundImage@2x.png"; sourceTree = ""; }; + E4EE9A421B9760D100866998 /* SearchIcon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SearchIcon@2x.png"; sourceTree = ""; }; + E4EE9A431B9760D100866998 /* section0_emotion0@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion0@2x.png"; sourceTree = ""; }; + E4EE9A441B9760D100866998 /* section0_emotion1@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion1@2x.png"; sourceTree = ""; }; + E4EE9A451B9760D100866998 /* section0_emotion2@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion2@2x.png"; sourceTree = ""; }; + E4EE9A461B9760D100866998 /* section0_emotion3@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion3@2x.png"; sourceTree = ""; }; + E4EE9A471B9760D100866998 /* section0_emotion4@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion4@2x.png"; sourceTree = ""; }; + E4EE9A481B9760D100866998 /* section0_emotion5@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion5@2x.png"; sourceTree = ""; }; + E4EE9A491B9760D100866998 /* section0_emotion6@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion6@2x.png"; sourceTree = ""; }; + E4EE9A4A1B9760D100866998 /* section0_emotion7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion7@2x.png"; sourceTree = ""; }; + E4EE9A4B1B9760D100866998 /* section0_emotion8@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion8@2x.png"; sourceTree = ""; }; + E4EE9A4C1B9760D100866998 /* section0_emotion9@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion9@2x.png"; sourceTree = ""; }; + E4EE9A4D1B9760D100866998 /* section0_emotion10@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion10@2x.png"; sourceTree = ""; }; + E4EE9A4E1B9760D100866998 /* section0_emotion11@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion11@2x.png"; sourceTree = ""; }; + E4EE9A4F1B9760D100866998 /* section0_emotion12@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion12@2x.png"; sourceTree = ""; }; + E4EE9A501B9760D100866998 /* section0_emotion13@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion13@2x.png"; sourceTree = ""; }; + E4EE9A511B9760D100866998 /* section0_emotion14@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion14@2x.png"; sourceTree = ""; }; + E4EE9A521B9760D100866998 /* section0_emotion15@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion15@2x.png"; sourceTree = ""; }; + E4EE9A531B9760D100866998 /* sharemore_friendcard@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_friendcard@2x.png"; sourceTree = ""; }; + E4EE9A541B9760D100866998 /* sharemore_location@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_location@2x.png"; sourceTree = ""; }; + E4EE9A551B9760D100866998 /* sharemore_myfav@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_myfav@2x.png"; sourceTree = ""; }; + E4EE9A561B9760D100866998 /* sharemore_openapi@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_openapi@2x.png"; sourceTree = ""; }; + E4EE9A571B9760D100866998 /* sharemore_pic@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_pic@2x.png"; sourceTree = ""; }; + E4EE9A581B9760D100866998 /* sharemore_video@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_video@2x.png"; sourceTree = ""; }; + E4EE9A591B9760D100866998 /* sharemore_videovoip@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_videovoip@2x.png"; sourceTree = ""; }; + E4EE9A5A1B9760D100866998 /* sharemore_voiceinput@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_voiceinput@2x.png"; sourceTree = ""; }; + E4EE9A5B1B9760D100866998 /* sharemore_voipvoice@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_voipvoice@2x.png"; sourceTree = ""; }; + E4EE9A5C1B9760D100866998 /* sharemore_wxtalk@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_wxtalk@2x.png"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + E4D673451ABD9C5F0000B18D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E4ABB0191B3D2F990015DC5F /* libsqlite3.dylib in Frameworks */, + E4D674621ABDA6860000B18D /* libicucore.dylib in Frameworks */, + 702136D51BB125AF00919837 /* AVOSCloudIM.framework in Frameworks */, + E4D674531ABDA47B0000B18D /* CoreLocation.framework in Frameworks */, + E4D674511ABDA4740000B18D /* CoreTelephony.framework in Frameworks */, + E4D6744F1ABDA46F0000B18D /* MobileCoreServices.framework in Frameworks */, + E4D6744D1ABDA4670000B18D /* SystemConfiguration.framework in Frameworks */, + 70A6A1721B669F65005C2D21 /* MessageDisplayKit.framework in Frameworks */, + 702136D41BB1258200919837 /* AVOSCloudIM.framework in Frameworks */, + 70A6A1711B669F1D005C2D21 /* MessageDisplayKit.framework in Frameworks */, + 702136D21BB1257100919837 /* AVOSCloud.framework in Frameworks */, + 702136D71BB125AF00919837 /* AVOSCloud.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 702C68BA1AE03B280085CD78 /* JSBadgeView */ = { + isa = PBXGroup; + children = ( + 702C68BB1AE03B280085CD78 /* JSBadgeView.h */, + 702C68BC1AE03B280085CD78 /* JSBadgeView.m */, + ); + path = JSBadgeView; + sourceTree = ""; + }; + E4ABB0141B3D2F850015DC5F /* LeanCloud */ = { + isa = PBXGroup; + children = ( + 702136D31BB1258200919837 /* AVOSCloudIM.framework */, + 702136D11BB1257100919837 /* AVOSCloud.framework */, + ); + path = LeanCloud; + sourceTree = ""; + }; + E4ABB01D1B3D30C30015DC5F /* emoticons */ = { + isa = PBXGroup; + children = ( + E4ABB01E1B3D30C30015DC5F /* emotion0.gif */, + E4ABB01F1B3D30C30015DC5F /* emotion1.gif */, + E4ABB0201B3D30C30015DC5F /* emotion10.gif */, + E4ABB0211B3D30C30015DC5F /* emotion11.gif */, + E4ABB0221B3D30C30015DC5F /* emotion12.gif */, + E4ABB0231B3D30C30015DC5F /* emotion13.gif */, + E4ABB0241B3D30C30015DC5F /* emotion14.gif */, + E4ABB0251B3D30C30015DC5F /* emotion15.gif */, + E4ABB0261B3D30C30015DC5F /* emotion16.gif */, + E4ABB0271B3D30C30015DC5F /* emotion2.gif */, + E4ABB0281B3D30C30015DC5F /* emotion3.gif */, + E4ABB0291B3D30C30015DC5F /* emotion4.gif */, + E4ABB02A1B3D30C30015DC5F /* emotion5.gif */, + E4ABB02B1B3D30C30015DC5F /* emotion6.gif */, + E4ABB02C1B3D30C30015DC5F /* emotion7.gif */, + E4ABB02D1B3D30C30015DC5F /* emotion8.gif */, + E4ABB02E1B3D30C30015DC5F /* emotion9.gif */, + ); + path = emoticons; + sourceTree = ""; + }; + E4D6733F1ABD9C5F0000B18D = { + isa = PBXGroup; + children = ( + E4D6734A1ABD9C5F0000B18D /* MessageDisplayKitLeanchatExample */, + E4D673671ABD9C5F0000B18D /* MessageDisplayKitLeanchatExampleTests */, + E4D674561ABDA5070000B18D /* Frameworks */, + E4D673491ABD9C5F0000B18D /* Products */, + ); + sourceTree = ""; + }; + E4D673491ABD9C5F0000B18D /* Products */ = { + isa = PBXGroup; + children = ( + E4D673481ABD9C5F0000B18D /* MessageDisplayKitLeanchatExample.app */, + ); + name = Products; + sourceTree = ""; + }; + E4D6734A1ABD9C5F0000B18D /* MessageDisplayKitLeanchatExample */ = { + isa = PBXGroup; + children = ( + E4D6734F1ABD9C5F0000B18D /* AppDelegate.h */, + E4D673501ABD9C5F0000B18D /* AppDelegate.m */, + E4D673741ABD9C930000B18D /* Vendor */, + E4D6742F1ABD9DBC0000B18D /* Sections */, + E4D673581ABD9C5F0000B18D /* Main.storyboard */, + E4D6735B1ABD9C5F0000B18D /* Images.xcassets */, + E4D6735D1ABD9C5F0000B18D /* LaunchScreen.xib */, + E4D6734B1ABD9C5F0000B18D /* Supporting Files */, + ); + path = MessageDisplayKitLeanchatExample; + sourceTree = ""; + }; + E4D6734B1ABD9C5F0000B18D /* Supporting Files */ = { + isa = PBXGroup; + children = ( + E4ABB01D1B3D30C30015DC5F /* emoticons */, + E4D674631ABDBF900000B18D /* TableViewBackgroundImage@2x.png */, + E4EE9A421B9760D100866998 /* SearchIcon@2x.png */, + E4EE9A431B9760D100866998 /* section0_emotion0@2x.png */, + E4EE9A441B9760D100866998 /* section0_emotion1@2x.png */, + E4EE9A451B9760D100866998 /* section0_emotion2@2x.png */, + E4EE9A461B9760D100866998 /* section0_emotion3@2x.png */, + E4EE9A471B9760D100866998 /* section0_emotion4@2x.png */, + E4EE9A481B9760D100866998 /* section0_emotion5@2x.png */, + E4EE9A491B9760D100866998 /* section0_emotion6@2x.png */, + E4EE9A4A1B9760D100866998 /* section0_emotion7@2x.png */, + E4EE9A4B1B9760D100866998 /* section0_emotion8@2x.png */, + E4EE9A4C1B9760D100866998 /* section0_emotion9@2x.png */, + E4EE9A4D1B9760D100866998 /* section0_emotion10@2x.png */, + E4EE9A4E1B9760D100866998 /* section0_emotion11@2x.png */, + E4EE9A4F1B9760D100866998 /* section0_emotion12@2x.png */, + E4EE9A501B9760D100866998 /* section0_emotion13@2x.png */, + E4EE9A511B9760D100866998 /* section0_emotion14@2x.png */, + E4EE9A521B9760D100866998 /* section0_emotion15@2x.png */, + E4EE9A531B9760D100866998 /* sharemore_friendcard@2x.png */, + E4EE9A541B9760D100866998 /* sharemore_location@2x.png */, + E4EE9A551B9760D100866998 /* sharemore_myfav@2x.png */, + E4EE9A561B9760D100866998 /* sharemore_openapi@2x.png */, + E4EE9A571B9760D100866998 /* sharemore_pic@2x.png */, + E4EE9A581B9760D100866998 /* sharemore_video@2x.png */, + E4EE9A591B9760D100866998 /* sharemore_videovoip@2x.png */, + E4EE9A5A1B9760D100866998 /* sharemore_voiceinput@2x.png */, + E4EE9A5B1B9760D100866998 /* sharemore_voipvoice@2x.png */, + E4EE9A5C1B9760D100866998 /* sharemore_wxtalk@2x.png */, + E4D6734C1ABD9C5F0000B18D /* Info.plist */, + E4D6734D1ABD9C5F0000B18D /* main.m */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + E4D673671ABD9C5F0000B18D /* MessageDisplayKitLeanchatExampleTests */ = { + isa = PBXGroup; + children = ( + E4D6736A1ABD9C5F0000B18D /* MessageDisplayKitLeanchatExampleTests.m */, + E4D673681ABD9C5F0000B18D /* Supporting Files */, + ); + path = MessageDisplayKitLeanchatExampleTests; + sourceTree = ""; + }; + E4D673681ABD9C5F0000B18D /* Supporting Files */ = { + isa = PBXGroup; + children = ( + E4D673691ABD9C5F0000B18D /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + E4D673741ABD9C930000B18D /* Vendor */ = { + isa = PBXGroup; + children = ( + E4ABB0141B3D2F850015DC5F /* LeanCloud */, + 702C68BA1AE03B280085CD78 /* JSBadgeView */, + E4D673751ABD9C930000B18D /* MessageDisplayKit */, + ); + path = Vendor; + sourceTree = ""; + }; + E4D673751ABD9C930000B18D /* MessageDisplayKit */ = { + isa = PBXGroup; + children = ( + 70A6A1701B669F1D005C2D21 /* MessageDisplayKit.framework */, + E4D673781ABD9CAD0000B18D /* Resources */, + ); + path = MessageDisplayKit; + sourceTree = ""; + }; + E4D673781ABD9CAD0000B18D /* Resources */ = { + isa = PBXGroup; + children = ( + E4D6737B1ABD9CAD0000B18D /* avator@2x.png */, + E4D673861ABD9CAD0000B18D /* MessageDisplayKitString.strings */, + E4D673881ABD9CAD0000B18D /* face@2x.png */, + E4D673891ABD9CAD0000B18D /* face_HL@2x.png */, + 7053E7231B42F3FF00DE808D /* keyboard_HL@2x.png */, + 7053E7241B42F3FF00DE808D /* keyboard@2x.png */, + E4D6738A1ABD9CAD0000B18D /* Fav_Cell_Loc@2x.png */, + E4D6738D1ABD9CAD0000B18D /* input-bar-flat.png */, + E4D6738E1ABD9CAD0000B18D /* input-bar-flat@2x.png */, + E4D673931ABD9CAD0000B18D /* MessageVideoPlay@2x.png */, + E4D673951ABD9CAD0000B18D /* msg_chat_voice_unread.png */, + E4D673961ABD9CAD0000B18D /* msg_chat_voice_unread@2x.png */, + E4D673971ABD9CAD0000B18D /* multiMedia@2x.png */, + E4D673981ABD9CAD0000B18D /* multiMedia_HL@2x.png */, + E4D6739B1ABD9CAD0000B18D /* placeholderImage@2x.png */, + E4D6739C1ABD9CAD0000B18D /* ReceiverVoiceNodePlaying000@2x.png */, + E4D6739D1ABD9CAD0000B18D /* ReceiverVoiceNodePlaying001@2x.png */, + E4D6739E1ABD9CAD0000B18D /* ReceiverVoiceNodePlaying002@2x.png */, + E4D6739F1ABD9CAD0000B18D /* ReceiverVoiceNodePlaying003@2x.png */, + E4D673A01ABD9CAD0000B18D /* ReceiverVoiceNodePlaying@2x.png */, + E4D673A11ABD9CAD0000B18D /* RecordCancel@2x.png */, + E4D673A21ABD9CAD0000B18D /* RecordingBkg@2x.png */, + E4D673A31ABD9CAD0000B18D /* RecordingSignal001@2x.png */, + E4D673A41ABD9CAD0000B18D /* RecordingSignal002@2x.png */, + E4D673A51ABD9CAD0000B18D /* RecordingSignal003@2x.png */, + E4D673A61ABD9CAD0000B18D /* RecordingSignal004@2x.png */, + E4D673A71ABD9CAD0000B18D /* RecordingSignal005@2x.png */, + E4D673A81ABD9CAD0000B18D /* RecordingSignal006@2x.png */, + E4D673A91ABD9CAD0000B18D /* RecordingSignal007@2x.png */, + E4D673AA1ABD9CAD0000B18D /* RecordingSignal008@2x.png */, + E4D673AC1ABD9CAD0000B18D /* SECoreTextView.bundle */, + E4D673BD1ABD9CAD0000B18D /* SenderVoiceNodePlaying000@2x.png */, + E4D673BE1ABD9CAD0000B18D /* SenderVoiceNodePlaying001@2x.png */, + E4D673BF1ABD9CAD0000B18D /* SenderVoiceNodePlaying002@2x.png */, + E4D673C01ABD9CAD0000B18D /* SenderVoiceNodePlaying003@2x.png */, + E4D673C11ABD9CAD0000B18D /* SenderVoiceNodePlaying@2x.png */, + E4D673CC1ABD9CAD0000B18D /* voice@2x.png */, + E4D673CD1ABD9CAD0000B18D /* voice_HL@2x.png */, + E4D673CE1ABD9CAD0000B18D /* VoiceBtn_Black@2x.png */, + E4D673CF1ABD9CAD0000B18D /* VoiceBtn_BlackHL@2x.png */, + E4D673D11ABD9CAD0000B18D /* weChatBubble_Receiving_Solid@2x.png */, + E4D673D31ABD9CAD0000B18D /* weChatBubble_Sending_Solid@2x.png */, + ); + name = Resources; + path = ../../../../../MessageDisplayKit/Resources; + sourceTree = ""; + }; + E4D6742F1ABD9DBC0000B18D /* Sections */ = { + isa = PBXGroup; + children = ( + E4D674391ABD9E9D0000B18D /* Common */, + E4D674301ABD9DBC0000B18D /* Models */, + E4D674331ABD9DBC0000B18D /* Pages */, + ); + path = Sections; + sourceTree = ""; + }; + E4D674301ABD9DBC0000B18D /* Models */ = { + isa = PBXGroup; + children = ( + E4D674311ABD9DBC0000B18D /* MessageDisplayKitLeanchatExample.xcdatamodeld */, + 70013D701ABEB4190050D0F7 /* AVIMEmotionMessage.h */, + 70013D711ABEB4190050D0F7 /* AVIMEmotionMessage.m */, + ); + path = Models; + sourceTree = ""; + }; + E4D674331ABD9DBC0000B18D /* Pages */ = { + isa = PBXGroup; + children = ( + E4D6743D1ABD9EDF0000B18D /* IM */, + E4D674341ABD9DBC0000B18D /* Root */, + ); + path = Pages; + sourceTree = ""; + }; + E4D674341ABD9DBC0000B18D /* Root */ = { + isa = PBXGroup; + children = ( + E4D674351ABD9DBC0000B18D /* LeanChatViewController.h */, + E4D674361ABD9DBC0000B18D /* LeanChatViewController.m */, + ); + path = Root; + sourceTree = ""; + }; + E4D674391ABD9E9D0000B18D /* Common */ = { + isa = PBXGroup; + children = ( + 702C68B71AE038530085CD78 /* AVIMConversation+Custom.h */, + 702C68B81AE038530085CD78 /* AVIMConversation+Custom.m */, + E4D6743A1ABD9EAF0000B18D /* LeanChatManager.h */, + E4D6743B1ABD9EAF0000B18D /* LeanChatManager.m */, + E4ABB01A1B3D2FB10015DC5F /* LeanChatCoreDataManager.h */, + E4ABB01B1B3D2FB10015DC5F /* LeanChatCoreDataManager.m */, + ); + path = Common; + sourceTree = ""; + }; + E4D6743D1ABD9EDF0000B18D /* IM */ = { + isa = PBXGroup; + children = ( + E4D6743E1ABD9F0B0000B18D /* LeanChatMessageTableViewController.h */, + E4D6743F1ABD9F0B0000B18D /* LeanChatMessageTableViewController.m */, + 70457B1A1ADBB70600452531 /* LeanChatConversationTableViewController.h */, + 70457B1B1ADBB70600452531 /* LeanChatConversationTableViewController.m */, + 702C68BE1AE136210085CD78 /* LeanChatConversationTableViewCell.h */, + 702C68BF1AE136210085CD78 /* LeanChatConversationTableViewCell.m */, + ); + path = IM; + sourceTree = ""; + }; + E4D674561ABDA5070000B18D /* Frameworks */ = { + isa = PBXGroup; + children = ( + 70BEDC091B3415DC004A1D39 /* libsqlite3.dylib */, + E4D674611ABDA6860000B18D /* libicucore.dylib */, + E4D674521ABDA47B0000B18D /* CoreLocation.framework */, + E4D674501ABDA4740000B18D /* CoreTelephony.framework */, + E4D6744E1ABDA46F0000B18D /* MobileCoreServices.framework */, + E4D6744C1ABDA4670000B18D /* SystemConfiguration.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + E4D673471ABD9C5F0000B18D /* MessageDisplayKitLeanchatExample */ = { + isa = PBXNativeTarget; + buildConfigurationList = E4D6736E1ABD9C5F0000B18D /* Build configuration list for PBXNativeTarget "MessageDisplayKitLeanchatExample" */; + buildPhases = ( + E4D673441ABD9C5F0000B18D /* Sources */, + E4D673451ABD9C5F0000B18D /* Frameworks */, + E4D673461ABD9C5F0000B18D /* Resources */, + E4D674461ABDA18B0000B18D /* Embed Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MessageDisplayKitLeanchatExample; + productName = MessageDisplayKitLeanchatExample; + productReference = E4D673481ABD9C5F0000B18D /* MessageDisplayKitLeanchatExample.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + E4D673401ABD9C5F0000B18D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0620; + ORGANIZATIONNAME = "iOS软件开发工程师 曾宪华 热衷于简洁的UI QQ:543413507 http://www.pailixiu.com/blog http://www.pailixiu.com/Jack/personal."; + TargetAttributes = { + E4D673471ABD9C5F0000B18D = { + CreatedOnToolsVersion = 6.2; + }; + }; + }; + buildConfigurationList = E4D673431ABD9C5F0000B18D /* Build configuration list for PBXProject "MessageDisplayKitLeanchatExample" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + "zh-Hans", + ); + mainGroup = E4D6733F1ABD9C5F0000B18D; + productRefGroup = E4D673491ABD9C5F0000B18D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + E4D673471ABD9C5F0000B18D /* MessageDisplayKitLeanchatExample */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + E4D673461ABD9C5F0000B18D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E4D6742C1ABD9CAD0000B18D /* weChatBubble_Receiving_Solid@2x.png in Resources */, + E4ABB0391B3D30C30015DC5F /* emotion3.gif in Resources */, + E4D673E91ABD9CAD0000B18D /* input-bar-flat@2x.png in Resources */, + E4D673F01ABD9CAD0000B18D /* msg_chat_voice_unread.png in Resources */, + E4D6735A1ABD9C5F0000B18D /* Main.storyboard in Resources */, + E4EE9A681B9760D100866998 /* section0_emotion10@2x.png in Resources */, + E4ABB03C1B3D30C30015DC5F /* emotion6.gif in Resources */, + E4EE9A621B9760D100866998 /* section0_emotion4@2x.png in Resources */, + E4D674001ABD9CAD0000B18D /* RecordingSignal003@2x.png in Resources */, + E4ABB03E1B3D30C30015DC5F /* emotion8.gif in Resources */, + E4D6741A1ABD9CAD0000B18D /* SenderVoiceNodePlaying002@2x.png in Resources */, + E4D674271ABD9CAD0000B18D /* voice@2x.png in Resources */, + E4D673FE1ABD9CAD0000B18D /* RecordingSignal001@2x.png in Resources */, + 7053E7261B42F3FF00DE808D /* keyboard@2x.png in Resources */, + E4ABB03A1B3D30C30015DC5F /* emotion4.gif in Resources */, + E4EE9A5D1B9760D100866998 /* SearchIcon@2x.png in Resources */, + E4D6735F1ABD9C5F0000B18D /* LaunchScreen.xib in Resources */, + E4D673F71ABD9CAD0000B18D /* ReceiverVoiceNodePlaying000@2x.png in Resources */, + E4ABB0371B3D30C30015DC5F /* emotion16.gif in Resources */, + E4D673F21ABD9CAD0000B18D /* multiMedia@2x.png in Resources */, + E4ABB0331B3D30C30015DC5F /* emotion12.gif in Resources */, + E4D673E31ABD9CAD0000B18D /* face@2x.png in Resources */, + E4EE9A6A1B9760D100866998 /* section0_emotion12@2x.png in Resources */, + E4D673E41ABD9CAD0000B18D /* face_HL@2x.png in Resources */, + E4EE9A771B9760D100866998 /* sharemore_wxtalk@2x.png in Resources */, + E4D6741C1ABD9CAD0000B18D /* SenderVoiceNodePlaying@2x.png in Resources */, + E4D6735C1ABD9C5F0000B18D /* Images.xcassets in Resources */, + E4ABB03F1B3D30C30015DC5F /* emotion9.gif in Resources */, + E4ABB0351B3D30C30015DC5F /* emotion14.gif in Resources */, + E4D6741B1ABD9CAD0000B18D /* SenderVoiceNodePlaying003@2x.png in Resources */, + E4ABB0361B3D30C30015DC5F /* emotion15.gif in Resources */, + E4EE9A5F1B9760D100866998 /* section0_emotion1@2x.png in Resources */, + E4ABB0321B3D30C30015DC5F /* emotion11.gif in Resources */, + E4D6742E1ABD9CAD0000B18D /* weChatBubble_Sending_Solid@2x.png in Resources */, + E4D674641ABDBF900000B18D /* TableViewBackgroundImage@2x.png in Resources */, + E4D673F31ABD9CAD0000B18D /* multiMedia_HL@2x.png in Resources */, + E4EE9A751B9760D100866998 /* sharemore_voiceinput@2x.png in Resources */, + E4EE9A671B9760D100866998 /* section0_emotion9@2x.png in Resources */, + E4D6742A1ABD9CAD0000B18D /* VoiceBtn_BlackHL@2x.png in Resources */, + E4EE9A6B1B9760D100866998 /* section0_emotion13@2x.png in Resources */, + E4D673E21ABD9CAD0000B18D /* MessageDisplayKitString.strings in Resources */, + E4EE9A651B9760D100866998 /* section0_emotion7@2x.png in Resources */, + E4EE9A631B9760D100866998 /* section0_emotion5@2x.png in Resources */, + E4D674031ABD9CAD0000B18D /* RecordingSignal006@2x.png in Resources */, + E4D673EE1ABD9CAD0000B18D /* MessageVideoPlay@2x.png in Resources */, + E4EE9A5E1B9760D100866998 /* section0_emotion0@2x.png in Resources */, + E4EE9A601B9760D100866998 /* section0_emotion2@2x.png in Resources */, + E4ABB03B1B3D30C30015DC5F /* emotion5.gif in Resources */, + E4EE9A611B9760D100866998 /* section0_emotion3@2x.png in Resources */, + E4D673F81ABD9CAD0000B18D /* ReceiverVoiceNodePlaying001@2x.png in Resources */, + E4EE9A661B9760D100866998 /* section0_emotion8@2x.png in Resources */, + E4D674071ABD9CAD0000B18D /* SECoreTextView.bundle in Resources */, + E4D673FD1ABD9CAD0000B18D /* RecordingBkg@2x.png in Resources */, + E4EE9A741B9760D100866998 /* sharemore_videovoip@2x.png in Resources */, + E4ABB03D1B3D30C30015DC5F /* emotion7.gif in Resources */, + E4D673FC1ABD9CAD0000B18D /* RecordCancel@2x.png in Resources */, + E4D673FA1ABD9CAD0000B18D /* ReceiverVoiceNodePlaying003@2x.png in Resources */, + E4ABB0381B3D30C30015DC5F /* emotion2.gif in Resources */, + E4ABB02F1B3D30C30015DC5F /* emotion0.gif in Resources */, + E4EE9A641B9760D100866998 /* section0_emotion6@2x.png in Resources */, + E4EE9A6C1B9760D100866998 /* section0_emotion14@2x.png in Resources */, + E4D674041ABD9CAD0000B18D /* RecordingSignal007@2x.png in Resources */, + E4EE9A6D1B9760D100866998 /* section0_emotion15@2x.png in Resources */, + E4ABB0301B3D30C30015DC5F /* emotion1.gif in Resources */, + E4EE9A6E1B9760D100866998 /* sharemore_friendcard@2x.png in Resources */, + E4D673F91ABD9CAD0000B18D /* ReceiverVoiceNodePlaying002@2x.png in Resources */, + E4D674181ABD9CAD0000B18D /* SenderVoiceNodePlaying000@2x.png in Resources */, + E4EE9A721B9760D100866998 /* sharemore_pic@2x.png in Resources */, + E4EE9A6F1B9760D100866998 /* sharemore_location@2x.png in Resources */, + 7053E7251B42F3FF00DE808D /* keyboard_HL@2x.png in Resources */, + E4D673F61ABD9CAD0000B18D /* placeholderImage@2x.png in Resources */, + E4D674291ABD9CAD0000B18D /* VoiceBtn_Black@2x.png in Resources */, + E4D673FB1ABD9CAD0000B18D /* ReceiverVoiceNodePlaying@2x.png in Resources */, + E4D673F11ABD9CAD0000B18D /* msg_chat_voice_unread@2x.png in Resources */, + E4EE9A711B9760D100866998 /* sharemore_openapi@2x.png in Resources */, + E4ABB0311B3D30C30015DC5F /* emotion10.gif in Resources */, + E4D673E51ABD9CAD0000B18D /* Fav_Cell_Loc@2x.png in Resources */, + E4ABB0341B3D30C30015DC5F /* emotion13.gif in Resources */, + E4D674011ABD9CAD0000B18D /* RecordingSignal004@2x.png in Resources */, + E4D674051ABD9CAD0000B18D /* RecordingSignal008@2x.png in Resources */, + E4D673D71ABD9CAD0000B18D /* avator@2x.png in Resources */, + E4D673E81ABD9CAD0000B18D /* input-bar-flat.png in Resources */, + E4D674021ABD9CAD0000B18D /* RecordingSignal005@2x.png in Resources */, + E4D674281ABD9CAD0000B18D /* voice_HL@2x.png in Resources */, + E4EE9A731B9760D100866998 /* sharemore_video@2x.png in Resources */, + E4EE9A761B9760D100866998 /* sharemore_voipvoice@2x.png in Resources */, + E4D674191ABD9CAD0000B18D /* SenderVoiceNodePlaying001@2x.png in Resources */, + E4D673FF1ABD9CAD0000B18D /* RecordingSignal002@2x.png in Resources */, + E4EE9A691B9760D100866998 /* section0_emotion11@2x.png in Resources */, + E4EE9A701B9760D100866998 /* sharemore_myfav@2x.png in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + E4D673441ABD9C5F0000B18D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 702C68B91AE038530085CD78 /* AVIMConversation+Custom.m in Sources */, + E4D673511ABD9C5F0000B18D /* AppDelegate.m in Sources */, + E4D6734E1ABD9C5F0000B18D /* main.m in Sources */, + 702C68C01AE136210085CD78 /* LeanChatConversationTableViewCell.m in Sources */, + E4D6743C1ABD9EAF0000B18D /* LeanChatManager.m in Sources */, + E4D674401ABD9F0B0000B18D /* LeanChatMessageTableViewController.m in Sources */, + E4ABB01C1B3D2FB10015DC5F /* LeanChatCoreDataManager.m in Sources */, + E4D674381ABD9DBC0000B18D /* LeanChatViewController.m in Sources */, + E4D674371ABD9DBC0000B18D /* MessageDisplayKitLeanchatExample.xcdatamodeld in Sources */, + 702C68BD1AE03B280085CD78 /* JSBadgeView.m in Sources */, + 70457B1C1ADBB70600452531 /* LeanChatConversationTableViewController.m in Sources */, + 70013D721ABEB4190050D0F7 /* AVIMEmotionMessage.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXVariantGroup section */ + E4D673581ABD9C5F0000B18D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + E4D673591ABD9C5F0000B18D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + E4D6735D1ABD9C5F0000B18D /* LaunchScreen.xib */ = { + isa = PBXVariantGroup; + children = ( + E4D6735E1ABD9C5F0000B18D /* Base */, + ); + name = LaunchScreen.xib; + sourceTree = ""; + }; + E4D673861ABD9CAD0000B18D /* MessageDisplayKitString.strings */ = { + isa = PBXVariantGroup; + children = ( + E4D673871ABD9CAD0000B18D /* en */, + E4D673D41ABD9CAD0000B18D /* zh-Hans */, + ); + name = MessageDisplayKitString.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + E4D6736C1ABD9C5F0000B18D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + E4D6736D1ABD9C5F0000B18D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 7.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + E4D6736F1ABD9C5F0000B18D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit", + "$(PROJECT_DIR)/MessageDisplayKitLeanchatExample/Vendor/LearnCloud", + "$(PROJECT_DIR)/MessageDisplayKitLeanchatExample/Vendor/LeanCloud", + ); + INFOPLIST_FILE = MessageDisplayKitLeanchatExample/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = "-all_load"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + E4D673701ABD9C5F0000B18D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit", + "$(PROJECT_DIR)/MessageDisplayKitLeanchatExample/Vendor/LearnCloud", + "$(PROJECT_DIR)/MessageDisplayKitLeanchatExample/Vendor/LeanCloud", + ); + INFOPLIST_FILE = MessageDisplayKitLeanchatExample/Info.plist; + IPHONEOS_DEPLOYMENT_TARGET = 8.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + OTHER_LDFLAGS = "-all_load"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + E4D673431ABD9C5F0000B18D /* Build configuration list for PBXProject "MessageDisplayKitLeanchatExample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E4D6736C1ABD9C5F0000B18D /* Debug */, + E4D6736D1ABD9C5F0000B18D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E4D6736E1ABD9C5F0000B18D /* Build configuration list for PBXNativeTarget "MessageDisplayKitLeanchatExample" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E4D6736F1ABD9C5F0000B18D /* Debug */, + E4D673701ABD9C5F0000B18D /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + +/* Begin XCVersionGroup section */ + E4D674311ABD9DBC0000B18D /* MessageDisplayKitLeanchatExample.xcdatamodeld */ = { + isa = XCVersionGroup; + children = ( + E4D674321ABD9DBC0000B18D /* MessageDisplayKitLeanchatExample.xcdatamodel */, + ); + currentVersion = E4D674321ABD9DBC0000B18D /* MessageDisplayKitLeanchatExample.xcdatamodel */; + path = MessageDisplayKitLeanchatExample.xcdatamodeld; + sourceTree = ""; + versionGroupType = wrapper.xcdatamodel; + }; +/* End XCVersionGroup section */ + }; + rootObject = E4D673401ABD9C5F0000B18D /* Project object */; +} diff --git a/Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata similarity index 61% rename from Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata rename to Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata index d830381..8ca2fa3 100644 --- a/Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:MessageDisplayKitLeanchatExample.xcodeproj"> diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/AppDelegate.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/AppDelegate.h new file mode 100644 index 0000000..47759b4 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/AppDelegate.h @@ -0,0 +1,17 @@ +// +// AppDelegate.h +// MessageDisplayKitLeanchatExample +// +// Created by Jack_iMac on 15/3/21. +// Copyright (c) 2015年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import + +@interface AppDelegate : UIResponder + +@property (strong, nonatomic) UIWindow *window; + + +@end + diff --git a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/AppDelegate.m b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/AppDelegate.m similarity index 66% rename from Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/AppDelegate.m rename to Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/AppDelegate.m index b8032d3..db24d70 100644 --- a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/AppDelegate.m +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/AppDelegate.m @@ -1,46 +1,53 @@ // // AppDelegate.m -// MessageDisplayKitStoryboardExample +// MessageDisplayKitLeanchatExample // -// Created by qtone-1 on 14-4-29. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by Jack_iMac on 15/3/21. +// Copyright (c) 2015年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "AppDelegate.h" +#import "LeanChatCoreDataManager.h" +#import "LeanChatManager.h" + +@interface AppDelegate () + +@end @implementation AppDelegate -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch. + + // 1.配置 + [LeanChatManager setupApplication]; + return YES; } - -- (void)applicationWillResignActive:(UIApplication *)application -{ + +- (void)applicationWillResignActive:(UIApplication *)application { // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. } -- (void)applicationDidEnterBackground:(UIApplication *)application -{ - // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. +- (void)applicationDidEnterBackground:(UIApplication *)application { + // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. } -- (void)applicationWillEnterForeground:(UIApplication *)application -{ +- (void)applicationWillEnterForeground:(UIApplication *)application { // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. } -- (void)applicationDidBecomeActive:(UIApplication *)application -{ +- (void)applicationDidBecomeActive:(UIApplication *)application { // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. } -- (void)applicationWillTerminate:(UIApplication *)application -{ +- (void)applicationWillTerminate:(UIApplication *)application { // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. + // Saves changes in the application's managed object context before the application terminates. + [[LeanChatCoreDataManager manager]saveContext]; } @end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Base.lproj/LaunchScreen.xib b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Base.lproj/LaunchScreen.xib new file mode 100644 index 0000000..d31f3e6 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Base.lproj/LaunchScreen.xib @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Base.lproj/Main.storyboard b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Base.lproj/Main.storyboard new file mode 100644 index 0000000..5cd90b4 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Base.lproj/Main.storyboard @@ -0,0 +1,169 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/Images.xcassets/AppIcon.appiconset/Contents.json b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Images.xcassets/AppIcon.appiconset/Contents.json similarity index 76% rename from Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/Images.xcassets/AppIcon.appiconset/Contents.json rename to Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Images.xcassets/AppIcon.appiconset/Contents.json index 91bf9c1..36d2c80 100644 --- a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/Images.xcassets/AppIcon.appiconset/Contents.json +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Images.xcassets/AppIcon.appiconset/Contents.json @@ -5,16 +5,31 @@ "size" : "29x29", "scale" : "2x" }, + { + "idiom" : "iphone", + "size" : "29x29", + "scale" : "3x" + }, { "idiom" : "iphone", "size" : "40x40", "scale" : "2x" }, + { + "idiom" : "iphone", + "size" : "40x40", + "scale" : "3x" + }, { "idiom" : "iphone", "size" : "60x60", "scale" : "2x" }, + { + "idiom" : "iphone", + "size" : "60x60", + "scale" : "3x" + }, { "idiom" : "ipad", "size" : "29x29", diff --git a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample-Info.plist b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Info.plist similarity index 71% rename from Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample-Info.plist rename to Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Info.plist index 78f752e..02ba115 100644 --- a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExample-Info.plist +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Info.plist @@ -4,16 +4,14 @@ CFBundleDevelopmentRegion en - CFBundleDisplayName - ${PRODUCT_NAME} CFBundleExecutable - ${EXECUTABLE_NAME} + $(EXECUTABLE_NAME) CFBundleIdentifier - com.HUAJIE.${PRODUCT_NAME:rfc1034identifier} + com.HUAJIE.$(PRODUCT_NAME:rfc1034identifier) CFBundleInfoDictionaryVersion 6.0 CFBundleName - ${PRODUCT_NAME} + 华捷微信 CFBundlePackageType APPL CFBundleShortVersionString @@ -21,13 +19,26 @@ CFBundleSignature ???? CFBundleVersion - 1.0 + 1 LSRequiresIPhoneOS + NSAppTransportSecurity + + NSExceptionDomains + + clouddn.com + + NSIncludesSubdomains + + NSTemporaryExceptionAllowsInsecureHTTPLoads + + + + + UILaunchStoryboardName + LaunchScreen UIMainStoryboardFile - Main_iPhone - UIMainStoryboardFile~ipad - Main_iPad + Main UIRequiredDeviceCapabilities armv7 diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/SearchIcon@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/SearchIcon@2x.png new file mode 100644 index 0000000..637ea7c Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/SearchIcon@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Common/AVIMConversation+Custom.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Common/AVIMConversation+Custom.h new file mode 100644 index 0000000..c9d3cc4 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Common/AVIMConversation+Custom.h @@ -0,0 +1,19 @@ +// +// AVIMConversation+Custom.h +// MessageDisplayKitLeanchatExample +// +// Created by lzw on 15/4/17. +// Copyright (c) 2015年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import +#import + +@interface AVIMConversation (Custom) + +-(NSInteger)unreadCount; + +-(void)clearUnreadCount; + +@end + diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Common/AVIMConversation+Custom.m b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Common/AVIMConversation+Custom.m new file mode 100644 index 0000000..b91cb7b --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Common/AVIMConversation+Custom.m @@ -0,0 +1,31 @@ +// +// AVIMConversation+Custom.m +// MessageDisplayKitLeanchatExample +// +// Created by lzw on 15/4/17. +// Copyright (c) 2015年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import "AVIMConversation+Custom.h" +#import "LeanChatCoreDataManager.h" + +@implementation AVIMConversation(Custom) + + +-(void)checkConversationId{ + if(self.conversationId==nil){ + [NSException raise:@"AVIMConversation" format:@"conversation is nil"]; + } +} + +-(NSInteger)unreadCount{ + [self checkConversationId]; + return [[LeanChatCoreDataManager manager] fetchUnreadCountByConversationId:self.conversationId]; +} + +-(void)clearUnreadCount{ + [self checkConversationId]; + [[LeanChatCoreDataManager manager] clearUnreadCountByConversationId:self.conversationId]; +} + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Common/LeanChatCoreDataManager.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Common/LeanChatCoreDataManager.h new file mode 100644 index 0000000..1fdef28 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Common/LeanChatCoreDataManager.h @@ -0,0 +1,30 @@ +// +// LeanChatCoreDataManager.h +// MessageDisplayKitLeanchatExample +// +// Created by lzw on 15/4/17. +// Copyright (c) 2015年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import +#import + +@interface LeanChatCoreDataManager : NSObject + ++ (instancetype)manager; + +@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext; +@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel; +@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator; + +- (void)saveContext; + +- (NSURL *)applicationDocumentsDirectory; + +- (void)increaseUnreadCountByConversationId:(NSString*)conversationId; + +- (NSInteger)fetchUnreadCountByConversationId:(NSString*)conversationId; + +- (void)clearUnreadCountByConversationId:(NSString*)conversationId; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Common/LeanChatCoreDataManager.m b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Common/LeanChatCoreDataManager.m new file mode 100644 index 0000000..f283364 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Common/LeanChatCoreDataManager.m @@ -0,0 +1,156 @@ +// +// LeanChatCoreDataManager.m +// MessageDisplayKitLeanchatExample +// +// Created by lzw on 15/4/17. +// Copyright (c) 2015年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import "LeanChatCoreDataManager.h" + +#define kConversationEntityName @"Conversation" +#define kConversationIdKey @"conversationId" +#define kUnreadCountKey @"unreadCount" + +@implementation LeanChatCoreDataManager + + +@synthesize managedObjectContext = _managedObjectContext; +@synthesize managedObjectModel = _managedObjectModel; +@synthesize persistentStoreCoordinator = _persistentStoreCoordinator; + ++ (instancetype)manager { + static LeanChatCoreDataManager *leanChatManager = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + leanChatManager = [[LeanChatCoreDataManager alloc] init]; + }); + return leanChatManager; +} + +- (NSURL *)applicationDocumentsDirectory { + // The directory the application uses to store the Core Data store file. This code uses a directory named "com.HUAJIE.MessageDisplayKitLeanchatExample" in the application's documents directory. + return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; +} + +- (NSManagedObjectModel *)managedObjectModel { + // The managed object model for the application. It is a fatal error for the application not to be able to find and load its model. + if (_managedObjectModel != nil) { + return _managedObjectModel; + } + NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"MessageDisplayKitLeanchatExample" withExtension:@"momd"]; + _managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; + return _managedObjectModel; +} + +- (NSPersistentStoreCoordinator *)persistentStoreCoordinator { + // The persistent store coordinator for the application. This implementation creates and return a coordinator, having added the store for the application to it. + if (_persistentStoreCoordinator != nil) { + return _persistentStoreCoordinator; + } + + // Create the coordinator and store + + _persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]]; + NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"MessageDisplayKitLeanchatExample.sqlite"]; + NSError *error = nil; + NSString *failureReason = @"There was an error creating or loading the application's saved data."; + if (![_persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) { + // Report any error we got. + NSMutableDictionary *dict = [NSMutableDictionary dictionary]; + dict[NSLocalizedDescriptionKey] = @"Failed to initialize the application's saved data"; + dict[NSLocalizedFailureReasonErrorKey] = failureReason; + dict[NSUnderlyingErrorKey] = error; + error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code:9999 userInfo:dict]; + // Replace this with code to handle the error appropriately. + // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. + NSLog(@"Unresolved error %@, %@", error, [error userInfo]); + abort(); + } + + return _persistentStoreCoordinator; +} + + +- (NSManagedObjectContext *)managedObjectContext { + // Returns the managed object context for the application (which is already bound to the persistent store coordinator for the application.) + if (_managedObjectContext != nil) { + return _managedObjectContext; + } + + NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; + if (!coordinator) { + return nil; + } + _managedObjectContext = [[NSManagedObjectContext alloc] init]; + [_managedObjectContext setPersistentStoreCoordinator:coordinator]; + return _managedObjectContext; +} + +#pragma mark - Core Data Saving support + +- (void)saveContext { + NSManagedObjectContext *managedObjectContext = self.managedObjectContext; + if (managedObjectContext != nil) { + NSError *error = nil; + if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) { + // Replace this implementation with code to handle the error appropriately. + // abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development. + NSLog(@"Unresolved error %@, %@", error, [error userInfo]); + abort(); + } + } +} + +#pragma mark - Core Data With Conversation + +- (NSManagedObject*)fetchConversationEntityByConversationId:(NSString*)conversationId{ + NSManagedObjectContext *context=self.managedObjectContext; + NSFetchRequest *request=[[NSFetchRequest alloc] initWithEntityName:kConversationEntityName]; + [request setPredicate:[NSPredicate predicateWithFormat:@"%K = %@",kConversationIdKey,conversationId]]; + NSError *error; + NSArray *objects=[context executeFetchRequest:request error:&error]; + if(error){ + NSLog(@"%@",error); + } + if(objects.count>0){ + return objects[0]; + }else{ + return nil; + } +} + +- (void)increaseUnreadCountByConversationId:(NSString*)conversationId{ + NSManagedObjectContext *context=self.managedObjectContext; + NSManagedObject *theConversation=[self fetchConversationEntityByConversationId:conversationId]; + NSInteger theUnreadCount; + if(theConversation==nil){ + theConversation=[NSEntityDescription insertNewObjectForEntityForName:kConversationEntityName inManagedObjectContext:context]; + theUnreadCount=1; + }else{ + theUnreadCount=[[theConversation valueForKey:kUnreadCountKey] intValue]+1; + } + [theConversation setValue:conversationId forKey:kConversationIdKey]; + [theConversation setValue:@(theUnreadCount) forKey:kUnreadCountKey]; + [self saveContext]; +} + +- (NSInteger)fetchUnreadCountByConversationId:(NSString*)conversationId{ + NSManagedObject *conversation=[self fetchConversationEntityByConversationId:conversationId]; + if(conversation){ + return [[conversation valueForKey:kUnreadCountKey] intValue]; + }else{ + return 0; + } +} + +- (void)clearUnreadCountByConversationId:(NSString*)conversationId{ + NSManagedObject *conversation=[self fetchConversationEntityByConversationId:conversationId]; + if(conversation==nil){ + return; + } + [conversation setValue:@0 forKey:kUnreadCountKey]; + [self saveContext]; +} + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Common/LeanChatManager.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Common/LeanChatManager.h new file mode 100644 index 0000000..07f0f72 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Common/LeanChatManager.h @@ -0,0 +1,50 @@ +// +// LeanChatManager.h +// MessageDisplayKitLeanchatExample +// +// Created by Jack_iMac on 15/3/21. +// Copyright (c) 2015年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import +#import +#import +#import "AVIMEmotionMessage.h" + +#define kJackClientID @"Jack" +#define kDarcyClientID @"Darcy" +#define kJaysonClientID @"Jayson" + +#define kDidReceiveCommonMessageNotification @"didReceiveCommonMessageNotification" +#define kDidReceiveTypedMessageNotification @"didReceiveTypedMessageNotification" + +typedef enum : NSInteger{ + ConversationTypeOneToOne = 0, + ConversationTypeGroup = 1, +}ConversationType; + +typedef void(^DidReceiveCommonMessageBlock)(AVIMConversation *conversation, AVIMMessage *message); +typedef void(^DidReceiveTypedMessageBlock)(AVIMConversation *conversation, AVIMTypedMessage *message); + +@interface LeanChatManager : NSObject + ++ (void)setupApplication; + ++ (instancetype)manager; + +- (NSString *)selfClientID; + +- (void)setupDidReceiveCommonMessageCompletion:(DidReceiveCommonMessageBlock)didReceiveCommonMessageCompletion; + +- (void)setupDidReceiveTypedMessageCompletion:(DidReceiveTypedMessageBlock)didReceiveTypedMessageCompletion; + +- (void)openSessionWithClientID:(NSString *)clientID + completion:(void (^)(BOOL succeeded, NSError *error))completion; + +- (void)createConversationsWithClientIDs:(NSArray *)clientIDs + conversationType:(ConversationType)conversationType + completion:(void (^)(BOOL succeeded, AVIMConversation *createConversation))completion; + +-(void)findRecentConversationsWithBlock:(AVIMArrayResultBlock)block; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Common/LeanChatManager.m b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Common/LeanChatManager.m new file mode 100644 index 0000000..4485b07 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Common/LeanChatManager.m @@ -0,0 +1,159 @@ +// +// LeanChatManager.m +// MessageDisplayKitLeanchatExample +// +// Created by Jack_iMac on 15/3/21. +// Copyright (c) 2015年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import "LeanChatManager.h" +#import "LeanChatCoreDataManager.h" + +#define kApplicationId @"3zkueubi18r0r0n47rc9revnlun0xuajsfv5byo17kdodut8" +#define kClientKey @"ujtz5q7cl84iqhtawjnbk32c4rqtjel3pz6xctekak054cje" + +@interface LeanChatManager () + +@property (nonatomic, strong) AVIMClient *leanClient; + +@property (nonatomic, copy) NSString *selfClientID; + +@property (nonatomic, copy) DidReceiveCommonMessageBlock didReceiveCommonMessageCompletion; +@property (nonatomic, copy) DidReceiveTypedMessageBlock didReceiveTypedMessageCompletion; + +@property (nonatomic, strong) NSMutableArray* recentConversations; + +@end + +@implementation LeanChatManager + ++ (void)setupApplication { + [AVOSCloud setApplicationId:kApplicationId clientKey:kClientKey]; +#ifdef DEBUG + [AVAnalytics setAnalyticsEnabled:NO]; + [AVOSCloud setVerbosePolicy:kAVVerboseShow]; + [AVLogger addLoggerDomain:AVLoggerDomainIM]; + [AVLogger addLoggerDomain:AVLoggerDomainCURL]; + [AVLogger setLoggerLevelMask:AVLoggerLevelAll]; +#endif +} + ++ (instancetype)manager { + static LeanChatManager *leanChatManager = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + leanChatManager = [[LeanChatManager alloc] init]; + }); + return leanChatManager; +} + +- (void)setup { + self.leanClient = [[AVIMClient alloc] init]; + self.leanClient.delegate = self; +} + +- (instancetype)init { + self = [super init]; + if (self) { + [self setup]; + } + return self; +} + +- (void)setupDidReceiveCommonMessageCompletion:(DidReceiveCommonMessageBlock)didReceiveCommonMessageCompletion { + _didReceiveCommonMessageCompletion = nil; + _didReceiveCommonMessageCompletion = [didReceiveCommonMessageCompletion copy]; +} + +- (void)setupDidReceiveTypedMessageCompletion:(DidReceiveTypedMessageBlock)didReceiveTypedMessageCompletion { + _didReceiveTypedMessageCompletion = nil; + _didReceiveTypedMessageCompletion = [didReceiveTypedMessageCompletion copy]; +} + +- (void)openSessionWithClientID:(NSString *)clientID + completion:(void (^)(BOOL succeeded, NSError *error))completion { + self.selfClientID = clientID; + if (self.leanClient.status == AVIMClientStatusNone) { + [self.leanClient openWithClientId:clientID callback:completion]; + } else { + [self.leanClient closeWithCallback:^(BOOL succeeded, NSError *error) { + [self.leanClient openWithClientId:clientID callback:completion]; + }]; + } +} + +- (void)createConversationsWithClientIDs:(NSArray *)clientIDs + conversationType:(ConversationType)conversationType + completion:(void (^)(BOOL succeeded, AVIMConversation *createConversation))completion { + NSMutableArray *targetClientIDs = [[NSMutableArray alloc] initWithArray:clientIDs]; + [targetClientIDs insertObject:self.selfClientID atIndex:0]; + [self createConversationsOnClientIDs:targetClientIDs conversationType:conversationType completion:completion]; +} + +- (void)createConversationsOnClientIDs:(NSArray *)clientIDs + conversationType:(int)conversationType + completion:(void (^)(BOOL, AVIMConversation *))completion { + AVIMConversationQuery *query = [self.leanClient conversationQuery]; + NSMutableArray *queryClientIDs = [[NSMutableArray alloc] initWithArray:clientIDs]; + [queryClientIDs insertObject:self.selfClientID atIndex:0]; + [query whereKey:kAVIMKeyMember containsAllObjectsInArray:queryClientIDs]; + [query whereKey:AVIMAttr(@"type") equalTo:[NSNumber numberWithInt:conversationType]]; + [query findConversationsWithCallback:^(NSArray *objects, NSError *error) { + if (error) { + // 出错了,请稍候重试 + if (completion) { + completion(NO, nil); + } + } else if (!objects || [objects count] < 1) { + // 新建一个对话 + [self.leanClient createConversationWithName:nil + clientIds:queryClientIDs + attributes:@{@"type":[NSNumber numberWithInt:conversationType]} + options:AVIMConversationOptionNone + callback:^(AVIMConversation *conversation, NSError *error) { + BOOL succeeded = YES; + if (error) { + succeeded = NO; + } + if (completion) { + completion(succeeded, conversation); + } + }]; + } else { + // 已经有一个对话存在,继续在这一对话中聊天 + AVIMConversation *conversation = [objects lastObject]; + if (completion) { + completion(YES, conversation); + } + } + }]; +} + +-(void)findRecentConversationsWithBlock:(AVIMArrayResultBlock)block{ + AVIMConversationQuery* query=[self.leanClient conversationQuery]; + [query whereKey:kAVIMKeyMember containedIn:@[self.selfClientID]]; + query.limit=1000; + [query findConversationsWithCallback:block]; +} + +#pragma mark - AVIMClientDelegate + +- (void)conversation:(AVIMConversation *)conversation didReceiveCommonMessage:(AVIMMessage *)message { + // 接收到新的普通消息。 + [[LeanChatCoreDataManager manager] increaseUnreadCountByConversationId:conversation.conversationId]; + if(self.didReceiveCommonMessageCompletion){ + self.didReceiveCommonMessageCompletion(conversation,message); + } +} + +- (void)conversation:(AVIMConversation *)conversation didReceiveTypedMessage:(AVIMTypedMessage *)message { + // 接收到新的富媒体消息。 + [[LeanChatCoreDataManager manager] increaseUnreadCountByConversationId:conversation.conversationId]; + if(self.didReceiveTypedMessageCompletion){ + self.didReceiveTypedMessageCompletion(conversation,message); + } +} + +#pragma mark - Core Data With Conversation + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Models/AVIMEmotionMessage.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Models/AVIMEmotionMessage.h new file mode 100644 index 0000000..47eb15e --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Models/AVIMEmotionMessage.h @@ -0,0 +1,18 @@ +// +// AVIMEmotionMessage.h +// MessageDisplayKitLeanchatExample +// +// Created by lzw on 15/3/22. +// Copyright (c) 2015年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import + +#define kAVIMMessageMediaTypeEmotion 1 + +@interface AVIMEmotionMessage : AVIMTypedMessage + ++ (instancetype)messageWithText:(NSString *)text + attributes:(NSDictionary *)attributes; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Models/AVIMEmotionMessage.m b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Models/AVIMEmotionMessage.m new file mode 100644 index 0000000..4b25277 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Models/AVIMEmotionMessage.m @@ -0,0 +1,30 @@ +// +// AVIMEmotionMessage.m +// MessageDisplayKitLeanchatExample +// +// Created by lzw on 15/3/22. +// Copyright (c) 2015年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import "AVIMEmotionMessage.h" + +@implementation AVIMEmotionMessage + ++(void)load{ + [self registerSubclass]; +} + ++ (AVIMMessageMediaType)classMediaType{ + return kAVIMMessageMediaTypeEmotion; +} + ++ (instancetype)messageWithText:(NSString *)text + attributes:(NSDictionary *)attributes{ + AVIMEmotionMessage* message=[[self alloc] init]; + message.mediaType=[self classMediaType]; + message.text=text; + message.attributes=attributes; + return message; +} + +@end diff --git a/Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/project.xcworkspace/xcuserdata/qtone-1.xcuserdatad/WorkspaceSettings.xcsettings b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Models/MessageDisplayKitLeanchatExample.xcdatamodeld/.xccurrentversion similarity index 56% rename from Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/project.xcworkspace/xcuserdata/qtone-1.xcuserdatad/WorkspaceSettings.xcsettings rename to Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Models/MessageDisplayKitLeanchatExample.xcdatamodeld/.xccurrentversion index 659c876..9553c3f 100644 --- a/Example/MessageDisplayExample/MessageDisplayExample.xcodeproj/project.xcworkspace/xcuserdata/qtone-1.xcuserdatad/WorkspaceSettings.xcsettings +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Models/MessageDisplayKitLeanchatExample.xcdatamodeld/.xccurrentversion @@ -2,9 +2,7 @@ - HasAskedToTakeAutomaticSnapshotBeforeSignificantChanges - - SnapshotAutomaticallyBeforeSignificantChanges - + _XCCurrentVersionName + MessageDisplayKitLeanchatExample.xcdatamodel diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Models/MessageDisplayKitLeanchatExample.xcdatamodeld/MessageDisplayKitLeanchatExample.xcdatamodel/contents b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Models/MessageDisplayKitLeanchatExample.xcdatamodeld/MessageDisplayKitLeanchatExample.xcdatamodel/contents new file mode 100644 index 0000000..bfb3341 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Models/MessageDisplayKitLeanchatExample.xcdatamodeld/MessageDisplayKitLeanchatExample.xcdatamodel/contents @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Pages/IM/LeanChatConversationTableViewCell.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Pages/IM/LeanChatConversationTableViewCell.h new file mode 100644 index 0000000..106e2c9 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Pages/IM/LeanChatConversationTableViewCell.h @@ -0,0 +1,24 @@ +// +// LeanChatConversationTableViewCell.h +// MessageDisplayKitLeanchatExample +// +// Created by lzw on 15/4/17. +// Copyright (c) 2015年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import +#import + +static CGFloat kConversationTableViewCellImageSize=35; +static CGFloat kConversationTableViewCellVerticalSpacing=8; +static CGFloat kConversationTableViewCellHorizontalSpacing=10; + +@interface LeanChatConversationTableViewCell : UITableViewCell + ++(NSString*)indentifier; + ++(CGFloat)heightOfConversationTableViewCell; + +@property (nonatomic, strong) AVIMConversation *conversation; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Pages/IM/LeanChatConversationTableViewCell.m b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Pages/IM/LeanChatConversationTableViewCell.m new file mode 100644 index 0000000..4ed7c02 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Pages/IM/LeanChatConversationTableViewCell.m @@ -0,0 +1,83 @@ +// +// LeanChatConversationTableViewCell.m +// MessageDisplayKitLeanchatExample +// +// Created by lzw on 15/4/17. +// Copyright (c) 2015年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import "LeanChatConversationTableViewCell.h" +#import "JSBadgeView.h" +#import "AVIMConversation+Custom.h" + +@interface LeanChatConversationTableViewCell () + +@property (nonatomic, strong) UIImageView *avatarImageView; +@property (nonatomic, strong) UILabel *titleLabel; +@property (nonatomic, strong) JSBadgeView *badgeView; + +@end + +@implementation LeanChatConversationTableViewCell + ++(NSString*)indentifier{ + return NSStringFromClass([LeanChatConversationTableViewCell class]); +} + ++(CGFloat)heightOfConversationTableViewCell{ + return kConversationTableViewCellImageSize+kConversationTableViewCellVerticalSpacing*2; +} + +- (instancetype)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{ + self=[super initWithStyle:style reuseIdentifier:reuseIdentifier]; + if(self){ + [self setup]; + } + return self; +} + +-(void)setup{ + [self addSubview:self.avatarImageView]; + [self addSubview:self.titleLabel]; +} + +-(UIImageView*)avatarImageView{ + if(_avatarImageView==nil){ + _avatarImageView=[[UIImageView alloc] initWithFrame:CGRectMake(kConversationTableViewCellHorizontalSpacing, kConversationTableViewCellVerticalSpacing, kConversationTableViewCellImageSize, kConversationTableViewCellImageSize)]; + } + return _avatarImageView; +} + +-(UILabel*)titleLabel{ + if(_titleLabel==nil){ + _titleLabel=[[UILabel alloc] initWithFrame:CGRectMake(CGRectGetMaxX(_avatarImageView.frame)+kConversationTableViewCellHorizontalSpacing, CGRectGetMinY(_avatarImageView.frame), CGRectGetWidth(self.frame)-3*kConversationTableViewCellHorizontalSpacing-kConversationTableViewCellImageSize, CGRectGetHeight(_avatarImageView.frame))]; + } + return _titleLabel; +} + +-(JSBadgeView*)badgeView{ + if(_badgeView==nil){ + _badgeView=[[JSBadgeView alloc] initWithParentView:_avatarImageView alignment:JSBadgeViewAlignmentTopRight]; + } + return _badgeView; +} + +-(void)setConversation:(AVIMConversation *)conversation{ + _conversation=conversation; + self.avatarImageView.image=[UIImage imageNamed:@"avator"]; + self.titleLabel.text=[conversation.members componentsJoinedByString:@"、"]; + if(conversation.unreadCount>0){ + self.badgeView.badgeText=[NSString stringWithFormat:@"%ld",(long)conversation.unreadCount]; + }else{ + self.badgeView.badgeText=nil; + } +} + +- (void)awakeFromNib { +} + +- (void)setSelected:(BOOL)selected animated:(BOOL)animated { + [super setSelected:selected animated:animated]; +} + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Pages/IM/LeanChatConversationTableViewController.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Pages/IM/LeanChatConversationTableViewController.h new file mode 100644 index 0000000..2a05920 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Pages/IM/LeanChatConversationTableViewController.h @@ -0,0 +1,13 @@ +// +// LeanChatConversationTableViewController.h +// MessageDisplayKitLeanchatExample +// +// Created by lzw on 15/4/13. +// Copyright (c) 2015年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import + +@interface LeanChatConversationTableViewController : UITableViewController + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Pages/IM/LeanChatConversationTableViewController.m b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Pages/IM/LeanChatConversationTableViewController.m new file mode 100644 index 0000000..19f42bf --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Pages/IM/LeanChatConversationTableViewController.m @@ -0,0 +1,114 @@ +// +// LeanChatConversationTableViewController.m +// MessageDisplayKitLeanchatExample +// +// Created by lzw on 15/4/13. +// Copyright (c) 2015年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import "LeanChatConversationTableViewController.h" +#import "LeanChatManager.h" +#import "LeanChatMessageTableViewController.h" +#import "AVIMConversation+Custom.h" +#import "JSBadgeView.h" +#import "LeanChatConversationTableViewCell.h" + +@interface LeanChatConversationTableViewController () + +@property (nonatomic, strong) NSArray *conversations; + +@end + +@implementation LeanChatConversationTableViewController + +- (instancetype)init { + self = [super init]; + if (self) { + self.title = @"消息"; + } + return self; +} + +- (void)viewDidLoad { + [super viewDidLoad]; + [self.tableView registerClass:[LeanChatConversationTableViewCell class] forCellReuseIdentifier:[LeanChatConversationTableViewCell indentifier]]; + [self loadData]; +} + +- (void)loadData { + [[LeanChatManager manager] findRecentConversationsWithBlock: ^(NSArray *objects, NSError *error) { + if (error) { + NSLog(@"%@", error); + } + else { + self.conversations = objects; + [self.tableView reloadData]; + } + }]; +} + +- (void)viewDidAppear:(BOOL)animated { + [super viewDidAppear:animated]; + WEAKSELF + [[LeanChatManager manager] setupDidReceiveTypedMessageCompletion : ^(AVIMConversation *conversation, AVIMTypedMessage *message) { + BOOL found = NO; + for (AVIMConversation *theConversation in self.conversations) { + if ([theConversation.conversationId isEqualToString: + theConversation.conversationId]) { + found = YES; + break; + } + } + if (found) { + [weakSelf.tableView reloadData]; + } + else { + [weakSelf loadData]; + } + }]; + [self.tableView reloadData]; +} + +- (void)viewDidDisappear:(BOOL)animated { + [super viewDidDisappear:animated]; + [[LeanChatManager manager] setupDidReceiveTypedMessageCompletion:nil]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; +} + +#pragma mark - Table view data source + +- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { + return 1; +} + +- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { + return self.conversations.count; +} + +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { + return [LeanChatConversationTableViewCell heightOfConversationTableViewCell]; +} + +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { + LeanChatConversationTableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:[LeanChatConversationTableViewCell indentifier]]; + if (cell == nil) { + cell = [[LeanChatConversationTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:[LeanChatConversationTableViewCell indentifier]]; + } + AVIMConversation *conversation = self.conversations[indexPath.row]; + cell.conversation = conversation; + return cell; +} + +- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { + AVIMConversation *conversation = self.conversations[indexPath.row]; + NSMutableArray *clientIds = [conversation.members mutableCopy]; + [clientIds removeObject:kJackClientID]; + LeanChatMessageTableViewController *leanChatMessageTableViewController = [[LeanChatMessageTableViewController alloc] initWithClientIDs:clientIds]; + [conversation clearUnreadCount]; + [self.navigationController pushViewController:leanChatMessageTableViewController animated:YES]; +} + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Pages/IM/LeanChatMessageTableViewController.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Pages/IM/LeanChatMessageTableViewController.h new file mode 100644 index 0000000..6f05195 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Pages/IM/LeanChatMessageTableViewController.h @@ -0,0 +1,15 @@ +// +// LeanChatMessageTableViewController.h +// MessageDisplayKitLeanchatExample +// +// Created by Jack_iMac on 15/3/21. +// Copyright (c) 2015年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import + +@interface LeanChatMessageTableViewController : XHMessageTableViewController + +- (instancetype)initWithClientIDs:(NSArray *)clientIDs; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Pages/IM/LeanChatMessageTableViewController.m b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Pages/IM/LeanChatMessageTableViewController.m new file mode 100644 index 0000000..5d1019e --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Pages/IM/LeanChatMessageTableViewController.m @@ -0,0 +1,551 @@ +// +// LeanChatMessageTableViewController.m +// MessageDisplayKitLeanchatExample +// +// Created by Jack_iMac on 15/3/21. +// Copyright (c) 2015年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import "LeanChatMessageTableViewController.h" +#import +#import +#import + +#import + +// IM +#import "LeanChatManager.h" + +static NSInteger const kOnePageSize = 7; + +@interface LeanChatMessageTableViewController () + +@property (nonatomic, strong) NSArray *emotionManagers; + +@property (nonatomic, strong) XHMessageTableViewCell *currentSelectedCell; + +@property (nonatomic, strong) AVIMConversation *conversation; + +@property (nonatomic, strong) NSArray *clientIDs; + +@property (nonatomic, assign) ConversationType conversationType; + +@end + +@implementation LeanChatMessageTableViewController + +- (instancetype)initWithClientIDs:(NSArray *)clientIDs { + self = [super init]; + if (self) { + self.clientIDs = clientIDs; + if (self.clientIDs.count > 1) { + self.conversationType = ConversationTypeGroup; + } + } + return self; +} + +- (void)viewWillDisappear:(BOOL)animated { + [super viewWillDisappear:animated]; + [[XHAudioPlayerHelper shareInstance] stopAudio]; +} + +- (void)viewDidLoad +{ + [super viewDidLoad]; + // Do any additional setup after loading the view. + if (CURRENT_SYS_VERSION >= 7.0) { + self.navigationController.interactivePopGestureRecognizer.delaysTouchesBegan = NO; + } + self.title = NSLocalizedStringFromTable(@"Chat", @"MessageDisplayKitString", @"聊天"); + + // Custom UI +// self.loadMoreActivityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite; +// [self setBackgroundColor:[UIColor clearColor]]; +// [self setBackgroundImage:[UIImage imageNamed:@"TableViewBackgroundImage"]]; + + // 设置自身用户名 + self.messageSender = [self displayNameByClientId:[[LeanChatManager manager] selfClientID]]; + + // 添加第三方接入数据 + NSMutableArray *shareMenuItems = [NSMutableArray array]; + NSArray *plugIcons = @[@"sharemore_pic", @"sharemore_video",@"sharemore_location", @"sharemore_videovoip", @"sharemore_friendcard", @"sharemore_myfav", @"sharemore_wxtalk", @"sharemore_voiceinput", @"sharemore_openapi", @"sharemore_openapi", @"Avatar"]; + NSArray *plugTitle = @[@"照片", @"拍摄",@"位置",@"视频",@"名片", @"我的收藏", @"实时对讲机", @"语音输入", @"大众点评", @"应用", @"曾宪华"]; + for (NSString *plugIcon in plugIcons) { + XHShareMenuItem *shareMenuItem = [[XHShareMenuItem alloc] initWithNormalIconImage:[UIImage imageNamed:plugIcon] title:[plugTitle objectAtIndex:[plugIcons indexOfObject:plugIcon]]]; + [shareMenuItems addObject:shareMenuItem]; + } + + NSMutableArray *emotionManagers = [NSMutableArray array]; + for (NSInteger i = 0; i < 10; i ++) { + XHEmotionManager *emotionManager = [[XHEmotionManager alloc] init]; + emotionManager.emotionName = [NSString stringWithFormat:@"表情%ld", (long)i]; + NSMutableArray *emotions = [NSMutableArray array]; + for (NSInteger j = 0; j < 18; j ++) { + XHEmotion *emotion = [[XHEmotion alloc] init]; + NSString *imageName = [NSString stringWithFormat:@"section%ld_emotion%ld", (long)i , (long)j % 16]; + emotion.emotionPath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"emotion%ld",(long)(j%16)] ofType:@"gif"]; + emotion.emotionConverPhoto = [UIImage imageNamed:imageName]; + [emotions addObject:emotion]; + } + emotionManager.emotions = emotions; + [emotionManagers addObject:emotionManager]; + } + + self.emotionManagers = emotionManagers; + [self.emotionManagerView reloadData]; + + self.shareMenuItems = shareMenuItems; + [self.shareMenuView reloadData]; + + // 创建一个对话 + self.loadingMoreMessage = YES; + WEAKSELF + [[LeanChatManager manager] createConversationsWithClientIDs:self.clientIDs conversationType:self.conversationType completion:^(BOOL succeeded, AVIMConversation *createConversation) { + if (succeeded) { + weakSelf.conversation = createConversation; + [weakSelf.conversation queryMessagesWithLimit:kOnePageSize callback:^(NSArray *queryMessages, NSError *error) { + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + NSMutableArray *typedMessages = [self filterTypedMessage:queryMessages]; + NSMutableArray *messages = [NSMutableArray array]; + for (AVIMTypedMessage *typedMessage in typedMessages) { + XHMessage *message = [weakSelf displayMessageByAVIMTypedMessage:typedMessage]; + if (message) { + [messages addObject:message]; + } + } + dispatch_async(dispatch_get_main_queue(), ^{ + weakSelf.messages = messages; + [weakSelf.messageTableView reloadData]; + [weakSelf scrollToBottomAnimated:NO]; + //延迟,以避免上面的滚动触发上拉加载消息 + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 0.5 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{ + weakSelf.loadingMoreMessage = NO; + }); + }); + }); + }]; + } + }]; +} + +// 这里也要把 setupDidReceiveTypedMessageCompletion 放到 viewDidAppear 中 +// 不然, 就会冲突, 导致不能实时接收到对方的消息 +- (void)viewDidAppear:(BOOL)animated +{ + [super viewDidAppear:animated]; + + WEAKSELF + [[LeanChatManager manager] setupDidReceiveTypedMessageCompletion:^(AVIMConversation *conversation, AVIMTypedMessage *message) { + // 富文本信息 + if([conversation.conversationId isEqualToString:self.conversation.conversationId]){ + [weakSelf insertAVIMTypedMessage:message]; + } + }]; +} + +- (void)viewDidDisappear:(BOOL)animated { + [super viewDidDisappear:animated]; + [[LeanChatManager manager] setupDidReceiveTypedMessageCompletion:nil]; +} + +- (void)didReceiveMemoryWarning +{ + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (void)dealloc { + self.emotionManagers = nil; + [[XHAudioPlayerHelper shareInstance] setDelegate:nil]; + [[LeanChatManager manager] setupDidReceiveTypedMessageCompletion:nil]; +} + +#pragma mark - LearnChat Message Handle Method + +- (NSMutableArray *)filterTypedMessage:(NSArray *)messages { + NSMutableArray *typedMessages = [NSMutableArray array]; + for (AVIMMessage *message in messages) { + if ([message isKindOfClass:[AVIMTypedMessage class]]) { + [typedMessages addObject:message]; + } + } + return typedMessages; +} + +- (NSString *)fetchDataOfMessageFile:(AVFile *)file fileName:(NSString*)fileName error:(NSError**)error{ + NSString* path = [[NSSearchPathForDirectoriesInDomains(NSDocumentationDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingString:fileName]; + NSData *data = [file getData:error]; + if(*error == nil) { + [data writeToFile:path atomically:YES]; + } + return path; +} + +- (XHMessage *)displayMessageByAVIMTypedMessage:(AVIMTypedMessage*)typedMessage { + AVIMMessageMediaType msgType = typedMessage.mediaType; + XHMessage *message; + NSDate *timestamp = [NSDate dateWithTimeIntervalSince1970:typedMessage.sendTimestamp/1000]; + NSString *displayName = [self displayNameByClientId:typedMessage.clientId]; + switch (msgType) { + case kAVIMMessageMediaTypeText: { + AVIMTextMessage *receiveTextMessage = (AVIMTextMessage *)typedMessage; + message = [[XHMessage alloc] initWithText:receiveTextMessage.text sender:displayName timestamp:timestamp]; + break; + } + case kAVIMMessageMediaTypeImage: { + AVIMImageMessage *imageMessage = (AVIMImageMessage *)typedMessage; + message = [[XHMessage alloc] initWithPhoto:nil thumbnailUrl:imageMessage.file.url originPhotoUrl:nil sender:displayName timestamp:timestamp]; + break; + } + case kAVIMMessageMediaTypeAudio: { + NSError *error; + NSString *path = [self fetchDataOfMessageFile:typedMessage.file fileName:typedMessage.messageId error:&error]; + AVIMAudioMessage* audioMessage = (AVIMAudioMessage *)typedMessage; + message = [[XHMessage alloc] initWithVoicePath:path voiceUrl:nil voiceDuration:[NSString stringWithFormat:@"%.1f",audioMessage.duration] sender:displayName timestamp:timestamp]; + break; + } + case kAVIMMessageMediaTypeEmotion: { + AVFile *file = [AVFile fileWithURL:typedMessage.text]; + NSError *error; + NSString *path = [self fetchDataOfMessageFile:file fileName:typedMessage.messageId error:&error]; + message = [[XHMessage alloc] initWithEmotionPath:path sender:displayName timestamp:timestamp]; + break; + } + case kAVIMMessageMediaTypeVideo: { + AVIMVideoMessage *receiveVideoMessage=(AVIMVideoMessage*)typedMessage; + NSString *format = receiveVideoMessage.format; + NSError *error; + NSString *path = [self fetchDataOfMessageFile:typedMessage.file fileName:[NSString stringWithFormat:@"%@.%@",typedMessage.messageId,format] error:&error]; + message = [[XHMessage alloc] initWithVideoConverPhoto:[XHMessageVideoConverPhotoFactory videoConverPhotoWithVideoPath:path] videoPath:path videoUrl:nil sender:displayName timestamp:timestamp]; + break; + } + default: + break; + } + if ([typedMessage.clientId isEqualToString:[LeanChatManager manager].selfClientID]) { + message.bubbleMessageType = XHBubbleMessageTypeSending; + } else { + message.bubbleMessageType = XHBubbleMessageTypeReceiving; + } + message.avatarUrl = [self avatarUrlByClientId:typedMessage.clientId]; + return message; +} + +- (void)insertAVIMTypedMessage:(AVIMTypedMessage *)typedMessage { + WEAKSELF + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + XHMessage *message=[self displayMessageByAVIMTypedMessage:typedMessage]; + [weakSelf addMessage:message]; + }); +} + +- (BOOL)filterError:(NSError*)error { + if (error) { + UIAlertView *alertView = [[UIAlertView alloc] + initWithTitle:nil message:error.description delegate:nil + cancelButtonTitle:@"确定" otherButtonTitles:nil]; + [alertView show]; + return NO; + } + return YES; +} + +#pragma mark - user info +/** + * 配置头像 + */ +- (NSString*)avatarUrlByClientId:(NSString*)clientId{ + return @"https://avatars1.githubusercontent.com/u/1969908?v=3&s=200"; +} + +/** + * 配置用户名 + */ +- (NSString*)displayNameByClientId:(NSString*)clientId{ + return clientId; +} + +#pragma mark - XHMessageTableViewCell delegate + +- (void)multiMediaMessageDidSelectedOnMessage:(id)message atIndexPath:(NSIndexPath *)indexPath onMessageTableViewCell:(XHMessageTableViewCell *)messageTableViewCell { + UIViewController *disPlayViewController; + switch (message.messageMediaType) { + case XHBubbleMessageMediaTypeVideo: + case XHBubbleMessageMediaTypePhoto: { + DLog(@"message : %@", message.photo); + DLog(@"message : %@", message.videoConverPhoto); + XHDisplayMediaViewController *messageDisplayTextView = [[XHDisplayMediaViewController alloc] init]; + messageDisplayTextView.message = message; + disPlayViewController = messageDisplayTextView; + break; + } + break; + case XHBubbleMessageMediaTypeVoice: { + DLog(@"message : %@", message.voicePath); + // Mark the voice as read and hide the red dot. + message.isRead = YES; + messageTableViewCell.messageBubbleView.voiceUnreadDotImageView.hidden = YES; + + [[XHAudioPlayerHelper shareInstance] setDelegate:(id)self]; + if (_currentSelectedCell) { + [_currentSelectedCell.messageBubbleView.animationVoiceImageView stopAnimating]; + } + if (_currentSelectedCell == messageTableViewCell) { + [messageTableViewCell.messageBubbleView.animationVoiceImageView stopAnimating]; + [[XHAudioPlayerHelper shareInstance] stopAudio]; + self.currentSelectedCell = nil; + } else { + self.currentSelectedCell = messageTableViewCell; + [messageTableViewCell.messageBubbleView.animationVoiceImageView startAnimating]; + [[XHAudioPlayerHelper shareInstance] managerAudioWithFileName:message.voicePath toPlay:YES]; + } + break; + } + case XHBubbleMessageMediaTypeEmotion: + DLog(@"facePath : %@", message.emotionPath); + break; + case XHBubbleMessageMediaTypeLocalPosition: { + DLog(@"facePath : %@", message.localPositionPhoto); + XHDisplayLocationViewController *displayLocationViewController = [[XHDisplayLocationViewController alloc] init]; + displayLocationViewController.message = message; + disPlayViewController = displayLocationViewController; + break; + } + default: + break; + } + if (disPlayViewController) { + [self.navigationController pushViewController:disPlayViewController animated:YES]; + } +} + +- (void)didDoubleSelectedOnTextMessage:(id)message atIndexPath:(NSIndexPath *)indexPath { + DLog(@"text : %@", message.text); + XHDisplayTextViewController *displayTextViewController = [[XHDisplayTextViewController alloc] init]; + displayTextViewController.message = message; + [self.navigationController pushViewController:displayTextViewController animated:YES]; +} + +- (void)didSelectedAvatarOnMessage:(id)message atIndexPath:(NSIndexPath *)indexPath { + DLog(@"indexPath : %@", indexPath); +} + +- (void)menuDidSelectedAtBubbleMessageMenuSelecteType:(XHBubbleMessageMenuSelecteType)bubbleMessageMenuSelecteType { + +} + +#pragma mark - XHAudioPlayerHelper Delegate + +- (void)didAudioPlayerStopPlay:(AVAudioPlayer *)audioPlayer { + if (!_currentSelectedCell) { + return; + } + [_currentSelectedCell.messageBubbleView.animationVoiceImageView stopAnimating]; + self.currentSelectedCell = nil; +} + +#pragma mark - XHEmotionManagerView DataSource + +- (NSInteger)numberOfEmotionManagers { + return self.emotionManagers.count; +} + +- (XHEmotionManager *)emotionManagerForColumn:(NSInteger)column { + return [self.emotionManagers objectAtIndex:column]; +} + +- (NSArray *)emotionManagersAtManager { + return self.emotionManagers; +} + +#pragma mark - XHMessageTableViewController Delegate + +- (BOOL)shouldLoadMoreMessagesScrollToTop { + return YES; +} + +- (void)loadMoreMessagesScrollTotop { + if (self.messages.count == 0) { + return; + } else { + if (!self.loadingMoreMessage) { + self.loadingMoreMessage = YES; + XHMessage *message = self.messages[0]; + WEAKSELF + [self.conversation queryMessagesBeforeId:nil timestamp:[message.timestamp timeIntervalSince1970]*1000 limit:kOnePageSize callback:^(NSArray *queryMessages, NSError *error) { + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + NSMutableArray *messages = [NSMutableArray array]; + NSMutableArray *typedMessages = [self filterTypedMessage:queryMessages]; + for(AVIMTypedMessage *typedMessage in typedMessages){ + if (weakSelf) { + XHMessage *message = [weakSelf displayMessageByAVIMTypedMessage:typedMessage]; + if (message) { + [messages addObject:message]; + } + } + } + dispatch_async(dispatch_get_main_queue(), ^{ + [weakSelf insertOldMessages:messages completion:^{ + weakSelf.loadingMoreMessage = NO; + }]; + }); + }); + }]; + } + } +} +/** + * 发送文本消息的回调方法 + * + * @param text 目标文本字符串 + * @param sender 发送者的名字 + * @param date 发送时间 + */ +- (void)didSendText:(NSString *)text fromSender:(NSString *)sender onDate:(NSDate *)date { + AVIMTextMessage *sendTextMessage = [AVIMTextMessage messageWithText:text attributes:nil]; + WEAKSELF + [self.conversation sendMessage:sendTextMessage callback:^(BOOL succeeded, NSError *error) { + if ([weakSelf filterError:error]) { + [weakSelf insertAVIMTypedMessage:sendTextMessage]; + [weakSelf finishSendMessageWithBubbleMessageType:XHBubbleMessageMediaTypeText]; + } + }]; +} + +/** + * 发送图片消息的回调方法 + * + * @param photo 目标图片对象,后续有可能会换 + * @param sender 发送者的名字 + * @param date 发送时间 + */ +- (void)didSendPhoto:(UIImage *)photo fromSender:(NSString *)sender onDate:(NSDate *)date { + NSString *filePath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject] stringByAppendingPathComponent:@"tmp.jpg"]; + NSData* photoData=UIImageJPEGRepresentation(photo,1.0); + [photoData writeToFile:filePath atomically:YES]; + AVIMImageMessage *sendPhotoMessage = [AVIMImageMessage messageWithText:nil attachedFilePath:filePath attributes:nil]; + WEAKSELF + [self.conversation sendMessage:sendPhotoMessage callback:^(BOOL succeeded, NSError *error) { + if([weakSelf filterError:error]) { + [weakSelf insertAVIMTypedMessage:sendPhotoMessage]; + [weakSelf finishSendMessageWithBubbleMessageType:XHBubbleMessageMediaTypePhoto]; + } + }]; +} + +/** + * 发送视频消息的回调方法 + * + * @param videoPath 目标视频本地路径 + * @param sender 发送者的名字 + * @param date 发送时间 + */ +- (void)didSendVideoConverPhoto:(UIImage *)videoConverPhoto videoPath:(NSString *)videoPath fromSender:(NSString *)sender onDate:(NSDate *)date { + AVIMVideoMessage *sendVideoMessage = [AVIMVideoMessage messageWithText:nil attachedFilePath:videoPath attributes:nil]; + WEAKSELF + [self.conversation sendMessage:sendVideoMessage callback:^(BOOL succeeded, NSError *error) { + if ([weakSelf filterError:error]) { + [weakSelf insertAVIMTypedMessage:sendVideoMessage]; + [weakSelf finishSendMessageWithBubbleMessageType:XHBubbleMessageMediaTypeVideo]; + } + }]; +} + +/** + * 发送语音消息的回调方法 + * + * @param voicePath 目标语音本地路径 + * @param voiceDuration 目标语音时长 + * @param sender 发送者的名字 + * @param date 发送时间 + */ +- (void)didSendVoice:(NSString *)voicePath voiceDuration:(NSString *)voiceDuration fromSender:(NSString *)sender onDate:(NSDate *)date { + AVIMAudioMessage* sendAudioMessage = [AVIMAudioMessage messageWithText:nil attachedFilePath:voicePath attributes:nil]; + WEAKSELF + [self.conversation sendMessage:sendAudioMessage callback:^(BOOL succeeded, NSError *error) { + DLog(@"succeed: %d, error:%@ ",succeeded,error); + if([weakSelf filterError:error]){ + [self insertAVIMTypedMessage:sendAudioMessage]; + [weakSelf finishSendMessageWithBubbleMessageType:XHBubbleMessageMediaTypeVoice]; + } + }]; +} + +/** + * 发送第三方表情消息的回调方法 + * + * @param facePath 目标第三方表情的本地路径 + * @param sender 发送者的名字 + * @param date 发送时间 + */ +- (void)didSendEmotion:(NSString *)emotionPath fromSender:(NSString *)sender onDate:(NSDate *)date { + WEAKSELF + AVFile *file = [AVFile fileWithName:@"emotion" contentsAtPath:emotionPath]; + [file saveInBackgroundWithBlock:^(BOOL succeeded, NSError *error) { + if ([weakSelf filterError:error]) { + AVIMEmotionMessage *sendEmotionMessage=[AVIMEmotionMessage messageWithText:file.url attributes:nil]; + [weakSelf.conversation sendMessage:sendEmotionMessage callback:^(BOOL succeeded, NSError *error) { + DLog(@"succeed: %d, error:%@ ",succeeded,error); + if ([weakSelf filterError:error]) { + [weakSelf insertAVIMTypedMessage:sendEmotionMessage]; + [weakSelf finishSendMessageWithBubbleMessageType:XHBubbleMessageMediaTypeEmotion]; + } + }]; + } + }]; +} + +/** + * 有些网友说需要发送地理位置,这个我暂时放一放 + */ +- (void)didSendGeoLocationsPhoto:(UIImage *)geoLocationsPhoto geolocations:(NSString *)geolocations location:(CLLocation *)location fromSender:(NSString *)sender onDate:(NSDate *)date { + XHMessage *geoLocationsMessage = [[XHMessage alloc] initWithLocalPositionPhoto:geoLocationsPhoto geolocations:geolocations location:location sender:sender timestamp:date]; + geoLocationsMessage.avatarUrl = [self avatarUrlByClientId:sender]; + [self addMessage:geoLocationsMessage]; + [self finishSendMessageWithBubbleMessageType:XHBubbleMessageMediaTypeLocalPosition]; +} + +/** + * 是否显示时间轴Label的回调方法 + * + * @param indexPath 目标消息的位置IndexPath + * + * @return 根据indexPath获取消息的Model的对象,从而判断返回YES or NO来控制是否显示时间轴Label + */ + +- (BOOL)shouldDisplayTimestampForRowAtIndexPath:(NSIndexPath *)indexPath { + if (indexPath.row == 0 || indexPath.row >= self.messages.count) { + return YES; + } else { + XHMessage *message = [self.messages objectAtIndex:indexPath.row]; + XHMessage *previousMessage = [self.messages objectAtIndex:indexPath.row-1]; + NSInteger interval = [message.timestamp timeIntervalSinceDate:previousMessage.timestamp]; + if (interval > 60 * 3) { + return YES; + } else { + return NO; + } + } +} + +/** + * 配置Cell的样式或者字体 + * + * @param cell 目标Cell + * @param indexPath 目标Cell所在位置IndexPath + */ +- (void)configureCell:(XHMessageTableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath { + +} + +/** + * 协议回掉是否支持用户手动滚动 + * + * @return 返回YES or NO + */ +- (BOOL)shouldPreventScrollToBottomWhileUserScrolling { + return YES; +} + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Pages/Root/LeanChatViewController.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Pages/Root/LeanChatViewController.h new file mode 100644 index 0000000..aedb155 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Pages/Root/LeanChatViewController.h @@ -0,0 +1,15 @@ +// +// ViewController.h +// MessageDisplayKitLeanchatExample +// +// Created by Jack_iMac on 15/3/21. +// Copyright (c) 2015年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import + +@interface LeanChatViewController : UIViewController + + +@end + diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Pages/Root/LeanChatViewController.m b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Pages/Root/LeanChatViewController.m new file mode 100644 index 0000000..e8718de --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Sections/Pages/Root/LeanChatViewController.m @@ -0,0 +1,68 @@ +// +// ViewController.m +// MessageDisplayKitLeanchatExample +// +// Created by Jack_iMac on 15/3/21. +// Copyright (c) 2015年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import "LeanChatViewController.h" +#import "LeanChatMessageTableViewController.h" +#import "LeanChatManager.h" +#import "LeanChatConversationTableViewController.h" + + +@interface LeanChatViewController () + +@end + +@implementation LeanChatViewController + +- (void)viewDidLoad { + [super viewDidLoad]; + // Do any additional setup after loading the view, typically from a nib. + [[XHConfigurationHelper appearance] setupPopMenuTitles:@[NSLocalizedStringFromTable(@"copy", @"MessageDisplayKitString", @"复制文本消息")]]; +} + +- (void)didReceiveMemoryWarning { + [super didReceiveMemoryWarning]; + // Dispose of any resources that can be recreated. +} + +- (IBAction)enterJackToDarcySingleIM:(id)sender { + // 打开通信链路 + [[LeanChatManager manager] openSessionWithClientID:kJackClientID completion:^(BOOL succeeded, NSError *error) { + NSLog(@"成功与否 : %d 错误 : %@", succeeded, error); + [self navigationToIMWithTargetClientIDs:@[kDarcyClientID]]; + }]; +} + +- (IBAction)enterDarcyToJackSingleIM:(id)sender { + // 打开通信链路 + [[LeanChatManager manager] openSessionWithClientID:kDarcyClientID completion:^(BOOL succeeded, NSError *error) { + NSLog(@"成功与否 : %d 错误 : %@", succeeded, error); + [self navigationToIMWithTargetClientIDs:@[kJackClientID]]; + }]; +} + +- (IBAction)enterMultipleIM:(id)sender { + // 打开通信链路 + [[LeanChatManager manager] openSessionWithClientID:kJackClientID completion:^(BOOL succeeded, NSError *error) { + NSLog(@"成功与否 : %d 错误 : %@", succeeded, error); + [self navigationToIMWithTargetClientIDs:@[kJackClientID, kDarcyClientID, kJaysonClientID]]; + }]; +} + +- (IBAction)enterRecentConversations:(id)sender { + [[LeanChatManager manager] openSessionWithClientID:kJackClientID completion:^(BOOL succeeded, NSError *error) { + LeanChatConversationTableViewController* conversationTableViewController=[[LeanChatConversationTableViewController alloc] init]; + [self.navigationController pushViewController:conversationTableViewController animated:YES]; + }]; +} + +- (void)navigationToIMWithTargetClientIDs:(NSArray *)clientIDs { + LeanChatMessageTableViewController *leanChatMessageTableViewController = [[LeanChatMessageTableViewController alloc] initWithClientIDs:clientIDs]; + [self.navigationController pushViewController:leanChatMessageTableViewController animated:YES]; +} + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/TableViewBackgroundImage@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/TableViewBackgroundImage@2x.png new file mode 100644 index 0000000..6570fe9 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/TableViewBackgroundImage@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/JSBadgeView/JSBadgeView.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/JSBadgeView/JSBadgeView.h new file mode 100644 index 0000000..49edfc9 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/JSBadgeView/JSBadgeView.h @@ -0,0 +1,95 @@ +/* +Copyright (c) 2013 Javier Soto. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. +*/ + +#import + +typedef NS_ENUM(NSUInteger, JSBadgeViewAlignment) +{ + JSBadgeViewAlignmentTopLeft = 1, + JSBadgeViewAlignmentTopRight, + JSBadgeViewAlignmentTopCenter, + JSBadgeViewAlignmentCenterLeft, + JSBadgeViewAlignmentCenterRight, + JSBadgeViewAlignmentBottomLeft, + JSBadgeViewAlignmentBottomRight, + JSBadgeViewAlignmentBottomCenter, + JSBadgeViewAlignmentCenter +}; + +@interface JSBadgeView : UIView + +@property (nonatomic, copy) NSString *badgeText; + +#pragma mark - Customization + +@property (nonatomic, assign) JSBadgeViewAlignment badgeAlignment UI_APPEARANCE_SELECTOR; + +@property (nonatomic, strong) UIColor *badgeTextColor UI_APPEARANCE_SELECTOR; +@property (nonatomic, assign) CGSize badgeTextShadowOffset UI_APPEARANCE_SELECTOR; +@property (nonatomic, strong) UIColor *badgeTextShadowColor UI_APPEARANCE_SELECTOR; + +@property (nonatomic, strong) UIFont *badgeTextFont UI_APPEARANCE_SELECTOR; + +@property (nonatomic, strong) UIColor *badgeBackgroundColor UI_APPEARANCE_SELECTOR; + +/** + * Color of the overlay circle at the top. Default is semi-transparent white. + */ +@property (nonatomic, strong) UIColor *badgeOverlayColor UI_APPEARANCE_SELECTOR; + +/** + * Color of the badge shadow. Default is semi-transparent black. + */ +@property (nonatomic, strong) UIColor *badgeShadowColor UI_APPEARANCE_SELECTOR; + +/** + * Offset of the badge shadow. Default is 3.0 points down. + */ +@property (nonatomic, assign) CGSize badgeShadowSize UI_APPEARANCE_SELECTOR; + +/** + * Width of the circle around the badge. Default is 2.0 points. + */ +@property (nonatomic, assign) CGFloat badgeStrokeWidth UI_APPEARANCE_SELECTOR; + +/** + * Color of the circle around the badge. Default is white. + */ +@property (nonatomic, strong) UIColor *badgeStrokeColor UI_APPEARANCE_SELECTOR; + +/** + * Allows to shift the badge by x and y points. + */ +@property (nonatomic, assign) CGPoint badgePositionAdjustment UI_APPEARANCE_SELECTOR; + +/** + * You can use this to position the view if you're drawing it using drawRect instead of `-addSubview:` + * (optional) If not provided, the superview frame is used. + */ +@property (nonatomic, assign) CGRect frameToPositionInRelationWith UI_APPEARANCE_SELECTOR; + +/** + * Optionally init using this method to have the badge automatically added to another view. + */ +- (id)initWithParentView:(UIView *)parentView alignment:(JSBadgeViewAlignment)alignment; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/JSBadgeView/JSBadgeView.m b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/JSBadgeView/JSBadgeView.m new file mode 100644 index 0000000..76bcad5 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/JSBadgeView/JSBadgeView.m @@ -0,0 +1,426 @@ +/* + Copyright (c) 2013 Javier Soto. + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. + */ + +#import "JSBadgeView.h" + +#import +#include + +#if !__has_feature(objc_arc) +#error JSBadgeView must be compiled with ARC. +#endif + +// Silencing some deprecation warnings if your deployment target is iOS7 that can only be fixed by using methods that +// Are only available on iOS7. +// Soon JSBadgeView will require iOS 7 and we'll be able to use the new methods. +#if __IPHONE_OS_VERSION_MIN_REQUIRED >= __IPHONE_7_0 + #define JSBadgeViewSilenceDeprecatedMethodStart() _Pragma("clang diagnostic push") \ + _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") + #define JSBadgeViewSilenceDeprecatedMethodEnd() _Pragma("clang diagnostic pop") +#else + #define JSBadgeViewSilenceDeprecatedMethodStart() + #define JSBadgeViewSilenceDeprecatedMethodEnd() +#endif + +static const CGFloat JSBadgeViewShadowRadius = 1.0f; +static const CGFloat JSBadgeViewHeight = 16.0f; +static const CGFloat JSBadgeViewTextSideMargin = 8.0f; +static const CGFloat JSBadgeViewCornerRadius = 10.0f; + +// Thanks to Peter Steinberger: https://gist.github.com/steipete/6526860 +static BOOL JSBadgeViewIsUIKitFlatMode(void) +{ + static BOOL isUIKitFlatMode = NO; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ +#ifndef kCFCoreFoundationVersionNumber_iOS_7_0 +#define kCFCoreFoundationVersionNumber_iOS_7_0 847.2 +#endif +#ifndef UIKitVersionNumber_iOS_7_0 +#define UIKitVersionNumber_iOS_7_0 0xB57 +#endif + // We get the modern UIKit if system is running >= iOS 7 and we were linked with >= SDK 7. + if (kCFCoreFoundationVersionNumber >= kCFCoreFoundationVersionNumber_iOS_7_0) { + isUIKitFlatMode = (NSVersionOfLinkTimeLibrary("UIKit") >> 16) >= UIKitVersionNumber_iOS_7_0; + } + }); + + return isUIKitFlatMode; +} + +@implementation JSBadgeView + ++ (void)applyCommonStyle +{ + JSBadgeView *badgeViewAppearanceProxy = JSBadgeView.appearance; + + badgeViewAppearanceProxy.backgroundColor = UIColor.clearColor; + badgeViewAppearanceProxy.badgeAlignment = JSBadgeViewAlignmentTopRight; + badgeViewAppearanceProxy.badgeBackgroundColor = UIColor.redColor; + badgeViewAppearanceProxy.badgeTextFont = [UIFont boldSystemFontOfSize:UIFont.systemFontSize]; + badgeViewAppearanceProxy.badgeTextColor = UIColor.whiteColor; +} + ++ (void)applyLegacyStyle +{ + JSBadgeView *badgeViewAppearanceProxy = JSBadgeView.appearance; + + badgeViewAppearanceProxy.badgeOverlayColor = [UIColor colorWithWhite:1.0f alpha:0.3]; + badgeViewAppearanceProxy.badgeTextShadowColor = UIColor.clearColor; + badgeViewAppearanceProxy.badgeShadowColor = [UIColor colorWithWhite:0.0f alpha:0.4f]; + badgeViewAppearanceProxy.badgeShadowSize = CGSizeMake(0.0f, 3.0f); + badgeViewAppearanceProxy.badgeStrokeWidth = 2.0f; + badgeViewAppearanceProxy.badgeStrokeColor = UIColor.whiteColor; +} + ++ (void)applyIOS7Style +{ + JSBadgeView *badgeViewAppearanceProxy = JSBadgeView.appearance; + + badgeViewAppearanceProxy.badgeOverlayColor = UIColor.clearColor; + badgeViewAppearanceProxy.badgeTextShadowColor = UIColor.clearColor; + badgeViewAppearanceProxy.badgeShadowColor = UIColor.clearColor; + badgeViewAppearanceProxy.badgeStrokeWidth = 0.0f; + badgeViewAppearanceProxy.badgeStrokeColor = badgeViewAppearanceProxy.badgeBackgroundColor; +} + ++ (void)initialize +{ + if (self == JSBadgeView.class) + { + [self applyCommonStyle]; + + if (JSBadgeViewIsUIKitFlatMode()) + { + [self applyIOS7Style]; + } + else + { + [self applyLegacyStyle]; + } + } +} + +- (id)initWithParentView:(UIView *)parentView alignment:(JSBadgeViewAlignment)alignment +{ + if ((self = [self initWithFrame:CGRectZero])) + { + self.badgeAlignment = alignment; + [parentView addSubview:self]; + } + + return self; +} + +#pragma mark - Layout + +- (CGFloat)marginToDrawInside +{ + return self.badgeStrokeWidth * 2.0f; +} + +- (void)layoutSubviews +{ + [super layoutSubviews]; + + CGRect newFrame = self.frame; + const CGRect superviewBounds = CGRectIsEmpty(_frameToPositionInRelationWith) ? self.superview.bounds : _frameToPositionInRelationWith; + + const CGFloat textWidth = [self sizeOfTextForCurrentSettings].width; + + const CGFloat marginToDrawInside = [self marginToDrawInside]; + const CGFloat viewWidth = textWidth + JSBadgeViewTextSideMargin + (marginToDrawInside * 2); + const CGFloat viewHeight = JSBadgeViewHeight + (marginToDrawInside * 2); + + const CGFloat superviewWidth = superviewBounds.size.width; + const CGFloat superviewHeight = superviewBounds.size.height; + + newFrame.size.width = viewWidth; + newFrame.size.height = viewHeight; + + switch (self.badgeAlignment) { + case JSBadgeViewAlignmentTopLeft: + newFrame.origin.x = -viewWidth / 2.0f; + newFrame.origin.y = -viewHeight / 2.0f; + break; + case JSBadgeViewAlignmentTopRight: + newFrame.origin.x = superviewWidth - (viewWidth / 2.0f); + newFrame.origin.y = -viewHeight / 2.0f; + break; + case JSBadgeViewAlignmentTopCenter: + newFrame.origin.x = (superviewWidth - viewWidth) / 2.0f; + newFrame.origin.y = -viewHeight / 2.0f; + break; + case JSBadgeViewAlignmentCenterLeft: + newFrame.origin.x = -viewWidth / 2.0f; + newFrame.origin.y = (superviewHeight - viewHeight) / 2.0f; + break; + case JSBadgeViewAlignmentCenterRight: + newFrame.origin.x = superviewWidth - (viewWidth / 2.0f); + newFrame.origin.y = (superviewHeight - viewHeight) / 2.0f; + break; + case JSBadgeViewAlignmentBottomLeft: + newFrame.origin.x = -viewWidth / 2.0f; + newFrame.origin.y = superviewHeight - (viewHeight / 2.0f); + break; + case JSBadgeViewAlignmentBottomRight: + newFrame.origin.x = superviewWidth - (viewWidth / 2.0f); + newFrame.origin.y = superviewHeight - (viewHeight / 2.0f); + break; + case JSBadgeViewAlignmentBottomCenter: + newFrame.origin.x = (superviewWidth - viewWidth) / 2.0f; + newFrame.origin.y = superviewHeight - (viewHeight / 2.0f); + break; + case JSBadgeViewAlignmentCenter: + newFrame.origin.x = (superviewWidth - viewWidth) / 2.0f; + newFrame.origin.y = (superviewHeight - viewHeight) / 2.0f; + break; + default: + NSAssert(NO, @"Unimplemented JSBadgeAligment type %lul", (unsigned long)self.badgeAlignment); + } + + newFrame.origin.x += _badgePositionAdjustment.x; + newFrame.origin.y += _badgePositionAdjustment.y; + + // Do not set frame directly so we do not interfere with any potential transform set on the view. + self.bounds = CGRectIntegral(CGRectMake(0, 0, CGRectGetWidth(newFrame), CGRectGetHeight(newFrame))); + self.center = CGPointMake(ceilf(CGRectGetMidX(newFrame)), ceilf(CGRectGetMidY(newFrame))); + + [self setNeedsDisplay]; +} + +#pragma mark - Private + +- (CGSize)sizeOfTextForCurrentSettings +{ + JSBadgeViewSilenceDeprecatedMethodStart(); + return [self.badgeText sizeWithFont:self.badgeTextFont]; + JSBadgeViewSilenceDeprecatedMethodEnd(); +} + +#pragma mark - Setters + +- (void)setBadgeAlignment:(JSBadgeViewAlignment)badgeAlignment +{ + if (badgeAlignment != _badgeAlignment) + { + _badgeAlignment = badgeAlignment; + + [self setNeedsLayout]; + } +} + +- (void)setBadgePositionAdjustment:(CGPoint)badgePositionAdjustment +{ + _badgePositionAdjustment = badgePositionAdjustment; + + [self setNeedsLayout]; +} + +- (void)setBadgeText:(NSString *)badgeText +{ + if (badgeText != _badgeText) + { + _badgeText = [badgeText copy]; + + [self setNeedsLayout]; + } +} + +- (void)setBadgeTextColor:(UIColor *)badgeTextColor +{ + if (badgeTextColor != _badgeTextColor) + { + _badgeTextColor = badgeTextColor; + + [self setNeedsDisplay]; + } +} + +- (void)setBadgeTextShadowColor:(UIColor *)badgeTextShadowColor +{ + if (badgeTextShadowColor != _badgeTextShadowColor) + { + _badgeTextShadowColor = badgeTextShadowColor; + + [self setNeedsDisplay]; + } +} + +- (void)setBadgeTextShadowOffset:(CGSize)badgeTextShadowOffset +{ + _badgeTextShadowOffset = badgeTextShadowOffset; + + [self setNeedsDisplay]; +} + +- (void)setBadgeTextFont:(UIFont *)badgeTextFont +{ + if (badgeTextFont != _badgeTextFont) + { + _badgeTextFont = badgeTextFont; + + [self setNeedsDisplay]; + } +} + +- (void)setBadgeBackgroundColor:(UIColor *)badgeBackgroundColor +{ + if (badgeBackgroundColor != _badgeBackgroundColor) + { + _badgeBackgroundColor = badgeBackgroundColor; + + [self setNeedsDisplay]; + } +} + +- (void)setBadgeStrokeWidth:(CGFloat)badgeStrokeWidth +{ + if (badgeStrokeWidth != _badgeStrokeWidth) + { + _badgeStrokeWidth = badgeStrokeWidth; + + [self setNeedsLayout]; + [self setNeedsDisplay]; + } +} + +- (void)setBadgeStrokeColor:(UIColor *)badgeStrokeColor +{ + if (badgeStrokeColor != _badgeStrokeColor) + { + _badgeStrokeColor = badgeStrokeColor; + + [self setNeedsDisplay]; + } +} + +- (void)setBadgeShadowColor:(UIColor *)badgeShadowColor +{ + if (badgeShadowColor != _badgeShadowColor) + { + _badgeShadowColor = badgeShadowColor; + + [self setNeedsDisplay]; + } +} + +- (void)setBadgeShadowSize:(CGSize)badgeShadowSize +{ + if (!CGSizeEqualToSize(badgeShadowSize, _badgeShadowSize)) + { + _badgeShadowSize = badgeShadowSize; + + [self setNeedsDisplay]; + } +} + +#pragma mark - Drawing + +- (void)drawRect:(CGRect)rect +{ + const BOOL anyTextToDraw = (self.badgeText.length > 0); + + if (anyTextToDraw) + { + CGContextRef ctx = UIGraphicsGetCurrentContext(); + + const CGFloat marginToDrawInside = [self marginToDrawInside]; + const CGRect rectToDraw = CGRectInset(rect, marginToDrawInside, marginToDrawInside); + + UIBezierPath *borderPath = [UIBezierPath bezierPathWithRoundedRect:rectToDraw byRoundingCorners:(UIRectCorner)UIRectCornerAllCorners cornerRadii:CGSizeMake(JSBadgeViewCornerRadius, JSBadgeViewCornerRadius)]; + + /* Background and shadow */ + CGContextSaveGState(ctx); + { + CGContextAddPath(ctx, borderPath.CGPath); + + CGContextSetFillColorWithColor(ctx, self.badgeBackgroundColor.CGColor); + CGContextSetShadowWithColor(ctx, self.badgeShadowSize, JSBadgeViewShadowRadius, self.badgeShadowColor.CGColor); + + CGContextDrawPath(ctx, kCGPathFill); + } + CGContextRestoreGState(ctx); + + const BOOL colorForOverlayPresent = self.badgeOverlayColor && ![self.badgeOverlayColor isEqual:[UIColor clearColor]]; + + if (colorForOverlayPresent) + { + /* Gradient overlay */ + CGContextSaveGState(ctx); + { + CGContextAddPath(ctx, borderPath.CGPath); + CGContextClip(ctx); + + const CGFloat height = rectToDraw.size.height; + const CGFloat width = rectToDraw.size.width; + + const CGRect rectForOverlayCircle = CGRectMake(rectToDraw.origin.x, + rectToDraw.origin.y - ceilf(height * 0.5), + width, + height); + + CGContextAddEllipseInRect(ctx, rectForOverlayCircle); + CGContextSetFillColorWithColor(ctx, self.badgeOverlayColor.CGColor); + + CGContextDrawPath(ctx, kCGPathFill); + } + CGContextRestoreGState(ctx); + } + + /* Stroke */ + CGContextSaveGState(ctx); + { + CGContextAddPath(ctx, borderPath.CGPath); + + CGContextSetLineWidth(ctx, self.badgeStrokeWidth); + CGContextSetStrokeColorWithColor(ctx, self.badgeStrokeColor.CGColor); + + CGContextDrawPath(ctx, kCGPathStroke); + } + CGContextRestoreGState(ctx); + + /* Text */ + + CGContextSaveGState(ctx); + { + CGContextSetFillColorWithColor(ctx, self.badgeTextColor.CGColor); + CGContextSetShadowWithColor(ctx, self.badgeTextShadowOffset, 1.0, self.badgeTextShadowColor.CGColor); + + CGRect textFrame = rectToDraw; + const CGSize textSize = [self sizeOfTextForCurrentSettings]; + + textFrame.size.height = textSize.height; + textFrame.origin.y = rectToDraw.origin.y + ceilf((rectToDraw.size.height - textFrame.size.height) / 2.0f); + + JSBadgeViewSilenceDeprecatedMethodStart(); + [self.badgeText drawInRect:textFrame + withFont:self.badgeTextFont + lineBreakMode:NSLineBreakByClipping + alignment:NSTextAlignmentCenter]; + JSBadgeViewSilenceDeprecatedMethodEnd(); + } + CGContextRestoreGState(ctx); + } +} + +@end \ No newline at end of file diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/AVOSCloud b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/AVOSCloud new file mode 100755 index 0000000..fa3997d Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/AVOSCloud differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVACL.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVACL.h new file mode 100644 index 0000000..f292262 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVACL.h @@ -0,0 +1,215 @@ +// AVACL.h +// Copyright 2013 AVOS Inc. All rights reserved. + +#import + +@class AVUser; +@class AVRole; + +/*! + A AVACL is used to control which users can access or modify a particular + object. Each AVObject can have its own AVACL. You can grant + read and write permissions separately to specific users, to groups of users + that belong to roles, or you can grant permissions to "the public" so that, + for example, any user could read a particular object but only a particular + set of users could write to that object. + */ +@interface AVACL : NSObject + +/** @name Creating an ACL */ + +/*! + Creates an ACL with no permissions granted. + */ ++ (AVACL *)ACL; + +/*! + Creates an ACL where only the provided user has access. + @param user the AVUser + */ ++ (AVACL *)ACLWithUser:(AVUser *)user; + +/** @name Controlling Public Access */ + +/*! + Set whether the public is allowed to read this object. + @param allowed allowed or not + */ + +- (void)setPublicReadAccess:(BOOL)allowed; + +/*! + Gets whether the public is allowed to read this object. + */ +- (BOOL)getPublicReadAccess; + +/*! + Set whether the public is allowed to write this object. + @param allowed allowed or not + */ +- (void)setPublicWriteAccess:(BOOL)allowed; + +/*! + Gets whether the public is allowed to write this object. + */ +- (BOOL)getPublicWriteAccess; + +/** @name Controlling Access Per-User */ + +/*! + Set whether the given user id is allowed to read this object. + @param allowed allowed or not + @param userId the AVUser's objectId + */ +- (void)setReadAccess:(BOOL)allowed forUserId:(NSString *)userId; + +/*! + Gets whether the given user id is *explicitly* allowed to read this object. + Even if this returns NO, the user may still be able to access it if getPublicReadAccess returns YES + or if the user belongs to a role that has access. + @param userId the AVUser's objectId + */ +- (BOOL)getReadAccessForUserId:(NSString *)userId; + +/*! + Set whether the given user id is allowed to write this object. + @param allowed allowed or not + @param userId the AVUser's objectId + */ +- (void)setWriteAccess:(BOOL)allowed forUserId:(NSString *)userId; + +/*! + Gets whether the given user id is *explicitly* allowed to write this object. + Even if this returns NO, the user may still be able to write it if getPublicWriteAccess returns YES + or if the user belongs to a role that has access. + + @param userId the AVUser's objectId + */ +- (BOOL)getWriteAccessForUserId:(NSString *)userId; + +/*! + Set whether the given user is allowed to read this object. + @param allowed allowed or not + @param user the AVUser + */ +- (void)setReadAccess:(BOOL)allowed forUser:(AVUser *)user; + +/*! + Gets whether the given user is *explicitly* allowed to read this object. + Even if this returns NO, the user may still be able to access it if getPublicReadAccess returns YES + or if the user belongs to a role that has access. + @param user the AVUser + */ +- (BOOL)getReadAccessForUser:(AVUser *)user; + +/*! + Set whether the given user is allowed to write this object. + @param allowed allowed or not + @param user the AVUser + */ +- (void)setWriteAccess:(BOOL)allowed forUser:(AVUser *)user; + +/*! + Gets whether the given user is *explicitly* allowed to write this object. + Even if this returns NO, the user may still be able to write it if getPublicWriteAccess returns YES + or if the user belongs to a role that has access. + @param user the AVUser + */ +- (BOOL)getWriteAccessForUser:(AVUser *)user; + +/** @name Controlling Access Per-Role */ + +/*! + Get whether users belonging to the role with the given name are allowed + to read this object. Even if this returns false, the role may still + be able to read it if a parent role has read access. + + @param name The name of the role. + @return YES if the role has read access. NO otherwise. + */ +- (BOOL)getReadAccessForRoleWithName:(NSString *)name; + +/*! + Set whether users belonging to the role with the given name are allowed + to read this object. + + @param name The name of the role. + @param allowed Whether the given role can read this object. + */ +- (void)setReadAccess:(BOOL)allowed forRoleWithName:(NSString *)name; + +/*! + Get whether users belonging to the role with the given name are allowed + to write this object. Even if this returns false, the role may still + be able to write it if a parent role has write access. + + @param name The name of the role. + @return YES if the role has read access. NO otherwise. + */ +- (BOOL)getWriteAccessForRoleWithName:(NSString *)name; + +/*! + Set whether users belonging to the role with the given name are allowed + to write this object. + + @param name The name of the role. + @param allowed Whether the given role can write this object. + */ +- (void)setWriteAccess:(BOOL)allowed forRoleWithName:(NSString *)name; + +/*! + Get whether users belonging to the given role are allowed to read this + object. Even if this returns NO, the role may still be able to + read it if a parent role has read access. The role must already be saved on + the server and its data must have been fetched in order to use this method. + + @param role the given role + @return YES if the role has read access. NO otherwise. + */ +- (BOOL)getReadAccessForRole:(AVRole *)role; + +/*! + Set whether users belonging to the given role are allowed to read this + object. The role must already be saved on the server and its data must have + been fetched in order to use this method. + + @param role The role to assign access. + @param allowed Whether the given role can read this object. + */ +- (void)setReadAccess:(BOOL)allowed forRole:(AVRole *)role; + +/*! + Get whether users belonging to the given role are allowed to write this + object. Even if this returns NO, the role may still be able to + write it if a parent role has write access. The role must already be saved on + the server and its data must have been fetched in order to use this method. + + @param role the given role + @return YES if the role has write access. NO otherwise. + */ +- (BOOL)getWriteAccessForRole:(AVRole *)role; + +/*! + Set whether users belonging to the given role are allowed to write this + object. The role must already be saved on the server and its data must have + been fetched in order to use this method. + + @param role The role to assign access. + @param allowed Whether the given role can write this object. + */ +- (void)setWriteAccess:(BOOL)allowed forRole:(AVRole *)role; + +/** @name Setting Access Defaults */ + +/*! + Sets a default ACL that will be applied to all AVObjects when they are created. + @param acl The ACL to use as a template for all AVObjects created after setDefaultACL has been called. + This value will be copied and used as a template for the creation of new ACLs, so changes to the + instance after setDefaultACL has been called will not be reflected in new AVObjects. + @param currentUserAccess If true, the AVACL that is applied to newly-created AVObjects will + provide read and write access to the currentUser at the time of creation. If false, + the provided ACL will be used without modification. If acl is nil, this value is ignored. + */ ++ (void)setDefaultACL:(AVACL *)acl withAccessForCurrentUser:(BOOL)currentUserAccess; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVAnalytics.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVAnalytics.h new file mode 100644 index 0000000..00bf8c7 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVAnalytics.h @@ -0,0 +1,363 @@ +// +// AVAnalytics.h +// LeanCloud +// +// Created by Zhu Zeng on 6/20/13. +// Copyright (c) 2013 AVOS. All rights reserved. +// + +#import +#import "AVConstants.h" + + +/** + * Report Policy + */ +typedef NS_ENUM(int, AVReportPolicy) { + /// 实时发送, debug only + AV_REALTIME = 0, + + /// 启动发送,当消息数量收集到30条时也会发送 + AV_BATCH = 1, + + /// 每日发送 + AV_SENDDAILY = 4, + + /// 仅在WIFI下启动时发送, debug only + AV_SENDWIFIONLY = 5, + + /// 按最小间隔发送 + AV_SEND_INTERVAL = 6, + + /// 退出或进入后台时发送 + AV_SEND_ON_EXIT = 7 + +} ; + +@protocol AVAnalyticsDelegate; +@class CLLocation; + + +/** + * 统计功能 + * + * 稳定实时的数据统计分析服务,从用户量,用户行为,渠道效果,自定义事件等多个维度,帮助您更清楚的了解用户习惯,提高用户黏性和活跃度 + */ +@interface AVAnalytics : NSObject + +/** + * 设置渠道名称, 如果不设置, 默认是 `App Store` + * + * @param channel 渠道名称 + */ ++ (void)setChannel:(NSString *)channel; + + +/** AVAnalytics 本身不需要实例化,所有方法以静态方法的形式提供. + 目前发送策略有AV_REALTIME, AV_BATCH, AV_SENDDAILY, AV_SENDWIFIONLY, AV_SEND_INTERVAL, AV_SEND_ON_EXIT。 + 其中AV_REALTIME, AV_SENDWIFIONLY 只在模拟器和DEBUG模式下生效,真机release模式会自动改成AV_BATCH。 + + AV_SEND_INTERVAL 为按最小间隔发送,默认为10秒,取值范围为10 到 86400(一天), 如果不在这个区间的话,会按10设置。 + AV_SEND_ON_EXIT 为退出或进入后台时发送,这种发送策略在App运行过程中不发送,对开发者和用户的影响最小。 + 不过这种发送策略只在iOS > 4.0时才会生效, iOS < 4.0 会被自动调整为AV_BATCH。 + + */ +#pragma mark basics + +/** 开启统计功能, 默认是开启状态 + @param value 设置成NO, 就可以关闭统计功能, 防止开发时测试数据污染线上数据. + */ ++ (void)setAnalyticsEnabled:(BOOL)value; + + +/** 开启CrashReport收集, 默认是关闭状态. + + @param value 设置成 YES,就可以开启CrashReport收集. + @return void. + */ ++ (void)setCrashReportEnabled:(BOOL)value AVDeprecated("使用 AVOSCloudCrashReporting.framework"); + +/** 开启CrashReport收集, 默认是关闭状态. + + @param value 设置成 YES,就可以开启CrashReport收集. + @param completion 设置完成后回调. + @return void. + */ ++ (void)setCrashReportEnabled:(BOOL)value completion:(void (^)(void))completion AVDeprecated("使用 AVOSCloudCrashReporting.framework"); + +/** 开启CrashReport收集, 并且尝试忽略异常. + @discuss 当异常被捕获后,如果开启了CrashReport功能,异常会被自动捕获,如果开启ignore,会尝试阻止app崩溃, 如果阻止成功,则会提示(UIAlertView)用户程序可能不稳定,请用户选择继续运行还是退出. + @warning 这不是解决问题的办法,因为App仍然存在不可控因素,而且忽略异常后会造成CPU的占用率提高5%左右. 所以,请尽量找出引起Crash的原因(AVOSCloud后台的错误报告中已经记录了相关信息),并且修复这个问题. + + @param value 设置成YES,就可以开启CrashReport收集. + @param ignore 设置成YES,可以尝试忽略异常. + */ + ++ (void)setCrashReportEnabled:(BOOL)value andIgnore:(BOOL)ignore AVDeprecated("使用 AVOSCloudCrashReporting.framework"); + + +/** 开启CrashReport收集, 并且尝试忽略异常. + @discuss 效果等同于`setCrashReportEnabled:andIgnore:` 但是可以自定义弹出提醒的文字内容. + + @param value 设置成 YES,就可以开启 CrashReport 收集. + @param alertTitle 弹出提醒的标题 + @param alertMsg 弹出提醒的内容 + @param alertQuit `退出`按钮的文字 + @param alertContinue `继续`按钮的文字 + */ ++ (void)setCrashReportEnabled:(BOOL)value withIgnoreAlertTitle:(NSString*)alertTitle andMessage:(NSString*)alertMsg andQuitTitle:(NSString*)alertQuit andContinueTitle:(NSString*)alertContinue AVDeprecated("使用 AVOSCloudCrashReporting.framework"); + + +/** 设置是否打印sdk的log信息,默认不开启 + @param value 设置为YES, SDK 会输出log信息,记得release产品时要设置回NO. + @return . + @exception . + */ + ++ (void)setLogEnabled:(BOOL)value; + +/** + 当reportPolicy == AV_SEND_INTERVAL 时设定log发送间隔 + @param second 单位为秒,最小为10,最大为86400(一天). + */ + ++ (void)setLogSendInterval:(double)second; + + +///--------------------------------------------------------------------------------------- +/// @name 开启统计(已废止) +///--------------------------------------------------------------------------------------- + + +/** 开启统计,默认以AV_BATCH方式发送log. 1.4.3以后不再需要,请前往在线配置进行配置。 + https://leancloud.cn/stat.html?appid=YOUR_APP_ID&os=ios#/statconfig/trans_strategoy + */ + ++ (void)start AVDeprecated("1.4.3以后不再需要,请前往在线配置进行配置"); + +/** 开启统计,默认以AV_BATCH方式发送log. 1.4.3以后不再需要,请前往在线配置进行配置。 + https://leancloud.cn/stat.html?appid=YOUR_APP_ID&os=ios#/statconfig/trans_strategoy + + @param rp 发送策略. + @param cid 渠道名称,为nil或@""时,默认会被被当作@"App Store"渠道 + */ ++ (void)startWithReportPolicy:(AVReportPolicy)rp channelId:(NSString *)cid AVDeprecated("1.4.3以后不再需要,请前往在线配置进行配置"); + + +/** 跟踪 app 打开情况 + @discussion 该方法应在 "- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions" 中调用 + @param launchOptions 对应上述方法的参数launchOptions + */ ++ (void)trackAppOpenedWithLaunchOptions:(NSDictionary *)launchOptions; + +/** 跟踪 app 被 Push 通知打开的情况 + @discussion 该方法应在 "- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo" 中调用 + @param userInfo 对应上述方法的参数userInfo + */ ++ (void)trackAppOpenedWithRemoteNotificationPayload:(NSDictionary *)userInfo; + + +///--------------------------------------------------------------------------------------- +/// @name 页面计时 +///--------------------------------------------------------------------------------------- + + +/** 页面时长统计,记录某个view被打开多长时间,可以自己计时也可以调用beginLogPageView,endLogPageView自动计时 + + @param pageName 需要记录时长的view名称. + @param seconds 秒数,int型. + @return void. + */ + ++ (void)logPageView:(NSString *)pageName seconds:(int)seconds; + +/** 页面时长统计,记录页面开始事件。 + @param pageName 需要记录时长的view名称. + @return void. + */ + ++ (void)beginLogPageView:(NSString *)pageName; + +/** 页面时长统计,记录页面结束事件。 + @param pageName 需要记录时长的view名称. + @return void. + */ ++ (void)endLogPageView:(NSString *)pageName; + +#pragma mark event logs + + +///--------------------------------------------------------------------------------------- +/// @name 事件统计 +///--------------------------------------------------------------------------------------- + + +/** 自定义事件,数量统计. + @param eventId 自定义的事件Id. + @return void. + */ ++ (void)event:(NSString *)eventId; + + + + /** 自定义事件,数量统计. + @param eventId 自定义的事件Id. + @param label 分类标签。不同的标签会分别进行统计,方便同一事件的不同标签的对比,为nil或空字符串时后台会生成和eventId同名的标签. + @return void. + */ ++ (void)event:(NSString *)eventId label:(NSString *)label; + +/** 自定义事件,数量统计. + @param eventId 自定义的事件Id. + @param accumulation 事件的累计发生次数,可以将相同事件合并在一起发送节省网络流量. + @return void. + */ ++ (void)event:(NSString *)eventId acc:(NSInteger)accumulation; + +/** 自定义事件,数量统计. + @param eventId 自定义的事件Id. + @param label 分类标签。不同的标签会分别进行统计,方便同一事件的不同标签的对比,为nil或空字符串时后台会生成和eventId同名的标签. + @param accumulation 事件的累计发生次数,可以将相同事件合并在一起发送节省网络流量. + */ ++ (void)event:(NSString *)eventId label:(NSString *)label acc:(NSInteger)accumulation; + + + /** 自定义事件,数量统计. + @param eventId 自定义的事件Id. + @param attributes 支持字符串和数字的key-value */ ++ (void)event:(NSString *)eventId attributes:(NSDictionary *)attributes; + + +/** 自定义事件,时长统计, 记录事件开始。 + @param eventId 自定义事件的Id. + */ ++ (void)beginEvent:(NSString *)eventId; + + +/** 自定义事件,时长统计,记录事件结束。 + @param eventId 自定义事件的Id. + */ ++ (void)endEvent:(NSString *)eventId; + +/** 自定义事件,时长统计, 记录事件开始。 + @param eventId 自定义事件的Id. + @param label 分类标签。不同的标签会分别进行统计,方便同一事件的不同标签的对比,为nil或空字符串时后台会生成和eventId同名的标签. + */ ++ (void)beginEvent:(NSString *)eventId label:(NSString *)label; + + +/** 自定义事件,时长统计, 记录事件结束。 + @param eventId 自定义事件的Id. + @param label 分类标签。不同的标签会分别进行统计,方便同一事件的不同标签的对比,为nil或空字符串时后台会生成和eventId同名的标签. + */ ++ (void)endEvent:(NSString *)eventId label:(NSString *)label; + +/** 自定义事件,时长统计, 记录事件开始。 + @param eventId 自定义事件的Id. + @param keyName 自定义关键事件的标签. 关键事件标签用于区分同名事件,但不参与统计运算结果. + @param attributes 自定义事件的属性列表. + */ ++ (void)beginEvent:(NSString *)eventId primarykey :(NSString *)keyName attributes:(NSDictionary *)attributes; + +/** 自定义事件,时长统计, 记录事件结束。 + @param eventId 自定义事件的Id. + @param keyName 自定义关键事件的标签. 关键事件标签用于区分同名事件,但不参与统计运算结果. + */ ++ (void)endEvent:(NSString *)eventId primarykey:(NSString *)keyName; + + +/** 自定义事件,时长统计. + @param eventId 自定义事件的Id. + @param millisecond 自定义事件的持续时间. + */ ++ (void)event:(NSString *)eventId durations:(int)millisecond; + +/** 自定义事件,时长统计. + @param eventId 自定义事件的Id. + @param label 分类标签。不同的标签会分别进行统计,方便同一事件的不同标签的对比,为nil或空字符串时后台会生成和eventId同名的标签. + @param millisecond 自定义事件的持续时间. + */ + ++ (void)event:(NSString *)eventId label:(NSString *)label durations:(int)millisecond; + +/** 自定义事件,时长统计. + @param eventId 自定义事件的Id. + @param attributes 自定义事件的属性列表. + @param millisecond 自定义事件的持续时间. + */ ++ (void)event:(NSString *)eventId attributes:(NSDictionary *)attributes durations:(int)millisecond; + + + +///--------------------------------------------------------------------------------------- +/// @name 在线参数 +///--------------------------------------------------------------------------------------- + + +/** 使用在线参数功能,可以让你动态修改应用中的参数值, + 检查并更新服务器端配置的在线参数,缓存在NSUserDefaults里, + 调用此方法您将自动拥有在线更改SDK端发送策略的功能,您需要先在服务器端设置好在线参数. + 请在[AVAnalytics start]方法之后调用; + @param 无. + @return void. + */ + ++ (void)updateOnlineConfig; + +/** 使用在线参数功能,可以让你动态修改应用中的参数值, + 检查并更新服务器端配置的在线参数,缓存在NSUserDefaults里, + 调用此方法您将自动拥有在线更改SDK端发送策略的功能,您需要先在服务器端设置好在线参数. + 请在[AVAnalytics start]方法之后调用; + @param block 自定义的接收block,您的配置参数会通过block传给您的应用. + @return void. + */ ++ (void)updateOnlineConfigWithBlock:(AVDictionaryResultBlock)block; + + +/** 从[NSUserDefaults standardUserDefaults]获取缓存的在线参数的数值 + 带参数的方法获取某个key的值,不带参数的获取所有的在线参数. + 需要先调用updateOnlineConfig才能使用 + + @param key 键名 + @return 返回键值 + */ + ++ (NSString *)getConfigParams:(NSString *)key; + +/** 从[NSUserDefaults standardUserDefaults]获取缓存的在线参数 + @return (NSDictionary *). + */ + ++ (NSDictionary *)getConfigParams; + + +///--------------------------------------------------------------------------------------- +/// @name 地理位置设置 +///--------------------------------------------------------------------------------------- + + +/** 为了更精确的统计用户地理位置,可以调用此方法传入经纬度信息 + 需要链接 CoreLocation.framework 并且 #import + @param latitude 纬度. + @param longitude 经度. + + @return void + */ + ++ (void)setLatitude:(double)latitude longitude:(double)longitude; + +/** 为了更精确的统计用户地理位置,可以调用此方法传入经纬度信息 + @param location CLLocation *型的地理信息 + */ ++ (void)setLocation:(CLLocation *)location; + + +/** + * 设置自定义信息 + * + * @param info 自定义信息 + * + * @warning info的内容只支持数字和字符串 + */ ++ (void)setCustomInfo:(NSDictionary*)info; +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVAnonymousUtils.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVAnonymousUtils.h new file mode 100644 index 0000000..dcac6e2 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVAnonymousUtils.h @@ -0,0 +1,57 @@ +// +// AVAnonymousUtils.h +// LeanCloud +// +// Created by Zhu Zeng on 6/20/13. +// Copyright (c) 2013 AVOS. All rights reserved. +// + +#import +#import "AVUser.h" +#import "AVConstants.h" + +/*! + Provides utility functions for working with Anonymously logged-in users. Anonymous users have some unique characteristics: +
    +
  • Anonymous users don't need a user name or password.
  • +
  • Once logged out, an anonymous user cannot be recovered.
  • +
  • When the current user is anonymous, the following methods can be used to switch to a different user or convert the + anonymous user into a regular one: +
      +
    • signUp converts an anonymous user to a standard user with the given username and password. + Data associated with the anonymous user is retained.
    • +
    • logIn switches users without converting the anonymous user. Data associated with the anonymous user will be lost.
    • +
    • Service logIn (e.g. Facebook, Twitter) will attempt to convert the anonymous user into a standard user by linking it to the service. + If a user already exists that is linked to the service, it will instead switch to the existing user.
    • +
    • Service linking (e.g. Facebook, Twitter) will convert the anonymous user into a standard user by linking it to the service.
    • +
    +
+ */ +@interface AVAnonymousUtils : NSObject + +/*! @name Creating an Anonymous User */ + +/*! + Creates an anonymous user. + @param block The block to execute when anonymous user creation is complete. The block should have the following argument signature: + (AVUser *user, NSError *error) + */ ++ (void)logInWithBlock:(AVUserResultBlock)block; + +/*! + Creates an anonymous user. The selector for the callback should look like: (AVUser *)user error:(NSError *)error + @param target Target object for the selector. + @param selector The selector that will be called when the asynchronous request is complete. + */ ++ (void)logInWithTarget:(id)target selector:(SEL)selector; + +/*! @name Determining Whether a AVUser is Anonymous */ + +/*! + Whether the user is logged in anonymously. + @param user User to check for anonymity. The user must be logged in on this device. + @return True if the user is anonymous. False if the user is not the current user or is not anonymous. + */ ++ (BOOL)isLinkedWithUser:(AVUser *)user; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVCloud.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVCloud.h new file mode 100644 index 0000000..519f234 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVCloud.h @@ -0,0 +1,60 @@ +// +// AVCloud.h +// LeanCloud +// +// Created by Zhu Zeng on 2/25/13. +// Copyright (c) 2013 AVOS. All rights reserved. +// + +#import +#import "AVConstants.h" + + +/** + * Call the cloud code from client + */ +@interface AVCloud : NSObject + + +/*! + Calls the given cloud function with the parameters passed in. + @param function The function name to call. + @param parameters The parameters to send to the function. + @return The response from the cloud function. + */ ++ (id)callFunction:(NSString *)function withParameters:(NSDictionary *)parameters; + +/*! + Calls the given cloud function with the parameters passed in and sets the error if there is one. + @param function The function name to call. + @param parameters The parameters to send to the function. + @param error Pointer to an NSError that will be set if necessary. + @return The response from the cloud function. This result could be a NSDictionary, an NSArray, NSInteger or NSString. + */ ++ (id)callFunction:(NSString *)function withParameters:(NSDictionary *)parameters error:(NSError **)error; + +/*! + Calls the given cloud function with the parameters provided asynchronously and calls the given block when it is done. + @param function The function name to call. + @param parameters The parameters to send to the function. + @param block The block to execute. The block should have the following argument signature:(id result, NSError *error). + */ ++ (void)callFunctionInBackground:(NSString *)function withParameters:(NSDictionary *)parameters block:(AVIdResultBlock)block; + +/*! + Calls the given cloud function with the parameters provided asynchronously and runs the callback when it is done. + @param function The function name to call. + @param parameters The parameters to send to the function. + @param target The object to call the selector on. + @param selector The selector to call. It should have the following signature: (void)callbackWithResult:(id) result error:(NSError *)error. result will be nil if error is set and vice versa. + */ ++ (void)callFunctionInBackground:(NSString *)function withParameters:(NSDictionary *)parameters target:(id)target selector:(SEL)selector; + +/** + * Set call what production mode's cloud code + * + * @param isProduction the production mode or test mode + */ ++ (void)setProductionMode:(BOOL)isProduction; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVCloudQueryResult.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVCloudQueryResult.h new file mode 100644 index 0000000..6ade801 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVCloudQueryResult.h @@ -0,0 +1,28 @@ +// +// AVCloudQueryResult.h +// AVOS +// +// Created by Qihe Bian on 9/22/14. +// +// + +#import + +@interface AVCloudQueryResult : NSObject +/** + * 查询结果的 className + */ +@property(nonatomic, strong, readonly) NSString *className; + +/** + * 查询的结果 AVObject 对象列表 + */ +@property(nonatomic, strong, readonly) NSArray *results; + +/** + * 查询 count 结果, 只有使用 select count(*) ... 时有效 + */ +@property(nonatomic, readonly) NSUInteger count; +@end + +typedef void(^AVCloudQueryCallback)(AVCloudQueryResult *result, NSError *error); diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVConstants.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVConstants.h new file mode 100644 index 0000000..c744d8f --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVConstants.h @@ -0,0 +1,193 @@ +// AVConstants.h +// Copyright 2013 AVOS, Inc. All rights reserved. + +#import +@class AVObject; +@class AVUser; +@class AVFile; + +//! Project version number for AVOSCloud. +FOUNDATION_EXPORT double AVOSCloudVersionNumber; + +//! Project version string for AVOSCloud. +FOUNDATION_EXPORT const unsigned char AVOSCloudVersionString[]; + +// Version +#define AVOSCLOUD_VERSION @"1.0.0" + +extern NSInteger const AVOSCLOUD_API_VERSION; + +// Platform +#define PARSE_IOS_ONLY (TARGET_OS_IPHONE) +#define PARSE_OSX_ONLY (TARGET_OS_MAC && !(TARGET_OS_IPHONE)) + +extern NSString *const kPFDeviceType; + +#if PARSE_IOS_ONLY +#import +#else +#import +@compatibility_alias UIImage NSImage; +@compatibility_alias UIColor NSColor; +@compatibility_alias UIView NSView; +#endif + +typedef enum : NSUInteger { + kAVVerboseShow, + kAVVerboseNone, + kAVVerboseAuto = kAVVerboseShow +} AVVerbosePolicy; +#if DEBUG +#define kAVVerboseAuto kAVVerboseShow +#else +#define kAVVerboseAuto kAVVerboseNone +#endif +/// Cache policies +typedef NS_ENUM(int, AVCachePolicy) { + ///Ignore Cache + kAVCachePolicyIgnoreCache = 0, + + ///Cache Only + kAVCachePolicyCacheOnly, + + ///Network Only + kAVCachePolicyNetworkOnly, + + ///CacheElseNetwork + kAVCachePolicyCacheElseNetwork, + + ///NetworkElseCache + kAVCachePolicyNetworkElseCache, + + ///CacheThenNetwork + kAVCachePolicyCacheThenNetwork, +} ; + +// Errors + + +/*! @abstract 1: Internal server error. No information available. */ +extern NSInteger const kAVErrorInternalServer; +/*! @abstract 100: The connection to the AVOS servers failed. */ +extern NSInteger const kAVErrorConnectionFailed; +/*! @abstract 101: Object doesn't exist, or has an incorrect password. */ +extern NSInteger const kAVErrorObjectNotFound; +/*! @abstract 102: You tried to find values matching a datatype that doesn't support exact database matching, like an array or a dictionary. */ +extern NSInteger const kAVErrorInvalidQuery; +/*! @abstract 103: Missing or invalid classname. Classnames are case-sensitive. They must start with a letter, and a-zA-Z0-9_ are the only valid characters. */ +extern NSInteger const kAVErrorInvalidClassName; +/*! @abstract 104: Missing object id. */ +extern NSInteger const kAVErrorMissingObjectId; +/*! @abstract 105: Invalid key name. Keys are case-sensitive. They must start with a letter, and a-zA-Z0-9_ are the only valid characters. */ +extern NSInteger const kAVErrorInvalidKeyName; +/*! @abstract 106: Malformed pointer. Pointers must be arrays of a classname and an object id. */ +extern NSInteger const kAVErrorInvalidPointer; +/*! @abstract 107: Malformed json object. A json dictionary is expected. */ +extern NSInteger const kAVErrorInvalidJSON; +/*! @abstract 108: Tried to access a feature only available internally. */ +extern NSInteger const kAVErrorCommandUnavailable; +/*! @abstract 111: Field set to incorrect type. */ +extern NSInteger const kAVErrorIncorrectType; +/*! @abstract 112: Invalid channel name. A channel name is either an empty string (the broadcast channel) or contains only a-zA-Z0-9_ characters and starts with a letter. */ +extern NSInteger const kAVErrorInvalidChannelName; +/*! @abstract 114: Invalid device token. */ +extern NSInteger const kAVErrorInvalidDeviceToken; +/*! @abstract 115: Push is misconfigured. See details to find out how. */ +extern NSInteger const kAVErrorPushMisconfigured; +/*! @abstract 116: The object is too large. */ +extern NSInteger const kAVErrorObjectTooLarge; +/*! @abstract 119: That operation isn't allowed for clients. */ +extern NSInteger const kAVErrorOperationForbidden; +/*! @abstract 120: The results were not found in the cache. */ +extern NSInteger const kAVErrorCacheMiss; +/*! @abstract 121: Keys in NSDictionary values may not include '$' or '.'. */ +extern NSInteger const kAVErrorInvalidNestedKey; +/*! @abstract 122: Invalid file name. A file name contains only a-zA-Z0-9_. characters and is between 1 and 36 characters. */ +extern NSInteger const kAVErrorInvalidFileName; +/*! @abstract 123: Invalid ACL. An ACL with an invalid format was saved. This should not happen if you use PFACL. */ +extern NSInteger const kAVErrorInvalidACL; +/*! @abstract 124: The request timed out on the server. Typically this indicates the request is too expensive. */ +extern NSInteger const kAVErrorTimeout; +/*! @abstract 125: The email address was invalid. */ +extern NSInteger const kAVErrorInvalidEmailAddress; +/*! @abstract 137: A unique field was given a value that is already taken. */ +extern NSInteger const kAVErrorDuplicateValue; +/*! @abstract 139: Role's name is invalid. */ +extern NSInteger const kAVErrorInvalidRoleName; +/*! @abstract 140: Exceeded an application quota. Upgrade to resolve. */ +extern NSInteger const kAVErrorExceededQuota; +/*! @abstract 141: Cloud Code script had an error. */ +extern NSInteger const kAVScriptError; +/*! @abstract 142: Cloud Code validation failed. */ +extern NSInteger const kAVValidationError; +/*! @abstract 143: Product purchase receipt is missing */ +extern NSInteger const kAVErrorReceiptMissing; +/*! @abstract 144: Product purchase receipt is invalid */ +extern NSInteger const kAVErrorInvalidPurchaseReceipt; +/*! @abstract 145: Payment is disabled on this device */ +extern NSInteger const kAVErrorPaymentDisabled; +/*! @abstract 146: The product identifier is invalid */ +extern NSInteger const kAVErrorInvalidProductIdentifier; +/*! @abstract 147: The product is not found in the App Store */ +extern NSInteger const kAVErrorProductNotFoundInAppStore; +/*! @abstract 148: The Apple server response is not valid */ +extern NSInteger const kAVErrorInvalidServerResponse; +/*! @abstract 149: Product fails to download due to file system error */ +extern NSInteger const kAVErrorProductDownloadFileSystemFailure; +/*! @abstract 150: Fail to convert data to image. */ +extern NSInteger const kAVErrorInvalidImageData; +/*! @abstract 151: Unsaved file. */ +extern NSInteger const kAVErrorUnsavedFile; +/*! @abstract 153: Fail to delete file. */ +extern NSInteger const kAVErrorFileDeleteFailure; +/*! @abstract 200: Username is missing or empty */ +extern NSInteger const kAVErrorUsernameMissing; +/*! @abstract 201: Password is missing or empty */ +extern NSInteger const kAVErrorUserPasswordMissing; +/*! @abstract 202: Username has already been taken */ +extern NSInteger const kAVErrorUsernameTaken; +/*! @abstract 203: Email has already been taken */ +extern NSInteger const kAVErrorUserEmailTaken; +/*! @abstract 204: The email is missing, and must be specified */ +extern NSInteger const kAVErrorUserEmailMissing; +/*! @abstract 205: A user with the specified email was not found */ +extern NSInteger const kAVErrorUserWithEmailNotFound; +/*! @abstract 206: The user cannot be altered by a client without the session. */ +extern NSInteger const kAVErrorUserCannotBeAlteredWithoutSession; +/*! @abstract 207: Users can only be created through sign up */ +extern NSInteger const kAVErrorUserCanOnlyBeCreatedThroughSignUp; +/*! @abstract 208: An existing Facebook account already linked to another user. */ +extern NSInteger const kAVErrorFacebookAccountAlreadyLinked; +/*! @abstract 208: An existing account already linked to another user. */ +extern NSInteger const kAVErrorAccountAlreadyLinked; +/*! @abstract 209: User ID mismatch */ +extern NSInteger const kAVErrorUserIdMismatch; +/*! @abstract 210: The username and password mismatch. */ +extern NSInteger const kAVErrorUsernamePasswordMismatch; +/*! @abstract 211: Could not find user. */ +extern NSInteger const kAVErrorUserNotFound; +/*! @abstract 250: Facebook id missing from request */ +extern NSInteger const kAVErrorFacebookIdMissing; +/*! @abstract 250: Linked id missing from request */ +extern NSInteger const kAVErrorLinkedIdMissing; +/*! @abstract 251: Invalid Facebook session */ +extern NSInteger const kAVErrorFacebookInvalidSession; +/*! @abstract 251: Invalid linked session */ +extern NSInteger const kAVErrorInvalidLinkedSession; + +typedef void (^AVBooleanResultBlock)(BOOL succeeded, NSError *error); +typedef void (^AVIntegerResultBlock)(NSInteger number, NSError *error); +typedef void (^AVArrayResultBlock)(NSArray *objects, NSError *error); +typedef void (^AVObjectResultBlock)(AVObject *object, NSError *error); +typedef void (^AVSetResultBlock)(NSSet *channels, NSError *error); +typedef void (^AVUserResultBlock)(AVUser *user, NSError *error); +typedef void (^AVDataResultBlock)(NSData *data, NSError *error); +typedef void (^AVImageResultBlock)(UIImage * image, NSError *error); +typedef void (^AVDataStreamResultBlock)(NSInputStream *stream, NSError *error); +typedef void (^AVStringResultBlock)(NSString *string, NSError *error); +typedef void (^AVIdResultBlock)(id object, NSError *error); +typedef void (^AVProgressBlock)(NSInteger percentDone); +typedef void (^AVFileResultBlock)(AVFile * file, NSError *error); +typedef void (^AVDictionaryResultBlock)(NSDictionary * dict, NSError *error); + +#define AVDeprecated(explain) __attribute__((deprecated(explain))) diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVFile.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVFile.h new file mode 100644 index 0000000..16b7a03 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVFile.h @@ -0,0 +1,333 @@ +// +// AVFile.h +// LeanCloud +// + +#import +#import "AVConstants.h" + +/*! + A file of binary data stored on the LeanCloud servers. This can be a image, video, or anything else + that an application needs to reference in a non-relational way. + */ +@interface AVFile : NSObject + +/** @name Creating a AVFile */ + +/*! + Creates a file with given data. A name will be assigned to it by the server. + @param data The contents of the new AVFile. + @return A AVFile. + */ ++ (instancetype)fileWithData:(NSData *)data; + +/*! + Creates a file with given data and name. + @param name The name of the new AVFile. + @param data The contents of the new AVFile. + @return A AVFile. + */ ++ (instancetype)fileWithName:(NSString *)name data:(NSData *)data; + + +/*! + Creates a file with given url. + @warning only for getting image thumbnail with a known QiNiu file url + @param url The url of file. + @return an AVFile. + */ ++ (instancetype)fileWithURL:(NSString *)url; + +/*! + Creates a file with the contents of another file. + @param name The name of the new AVFile + @param path The path to the file that will be uploaded to LeanCloud + */ ++ (instancetype)fileWithName:(NSString *)name + contentsAtPath:(NSString *)path; + +/*! +The name of the file. + */ +@property (readonly) NSString *name; + +/*! + The id of the file. + */ +@property (readwrite, copy) NSString * objectId; + + +/*! + The url of the file. + */ +@property (readonly) NSString *url; + +/*! + The Qiniu bucket of the file. + */ +@property (readonly) NSString *bucket; + +/** @name Storing Data with LeanCloud */ + +/*! + Whether the file has been uploaded for the first time. + */ +@property (readonly) BOOL isDirty; + +/*! + File metadata, caller is able to store additional values here. + */ +@property (readwrite, strong) NSMutableDictionary * metadata AVDeprecated("2.6.1以后请使用metaData"); +/*! + File metadata, caller is able to store additional values here. + */ +@property (readwrite, strong) NSMutableDictionary * metaData; + +/*! + Saves the file. + @return whether the save succeeded. + */ +- (BOOL)save; + +/*! + Saves the file and sets an error if it occurs. + @param error Pointer to an NSError that will be set if necessary. + @return whether the save succeeded. + */ +- (BOOL)save:(NSError **)error; + +/*! + Saves the file asynchronously. + @return whether the save succeeded. + */ +- (void)saveInBackground; + +/*! + Saves the file asynchronously and executes the given block. + @param block The block should have the following argument signature: (BOOL succeeded, NSError *error) + */ +- (void)saveInBackgroundWithBlock:(AVBooleanResultBlock)block; + +/*! + Saves the file asynchronously and executes the given resultBlock. Executes the progressBlock periodically with the percent + progress. progressBlock will get called with 100 before resultBlock is called. + @param block The block should have the following argument signature: (BOOL succeeded, NSError *error) + @param progressBlock The block should have the following argument signature: (int percentDone) + */ +- (void)saveInBackgroundWithBlock:(AVBooleanResultBlock)block + progressBlock:(AVProgressBlock)progressBlock; + +/*! + Saves the file asynchronously and calls the given callback. + @param target The object to call selector on. + @param selector The selector to call. It should have the following signature: (void)callbackWithResult:(NSNumber *)result error:(NSError *)error. error will be nil on success and set if there was an error. [result boolValue] will tell you whether the call succeeded or not. + */ +- (void)saveInBackgroundWithTarget:(id)target selector:(SEL)selector; + +/** @name Getting Data from LeanCloud */ + +/*! + Whether the data is available in memory or needs to be downloaded. + */ +@property (readonly) BOOL isDataAvailable; + +/*! + Gets the data from cache if available or fetches its contents from the LeanCloud + servers. + @return The data. Returns nil if there was an error in fetching. + */ +- (NSData *)getData; + +/*! + This method is like getData but avoids ever holding the entire AVFile's + contents in memory at once. This can help applications with many large AVFiles + avoid memory warnings. + @return A stream containing the data. Returns nil if there was an error in + fetching. + */ +- (NSInputStream *)getDataStream; + +/*! + Gets the data from cache if available or fetches its contents from the LeanCloud + servers. Sets an error if it occurs. + @param error Pointer to an NSError that will be set if necessary. + @return The data. Returns nil if there was an error in fetching. + */ +- (NSData *)getData:(NSError **)error; + +/*! + This method is like getData: but avoids ever holding the entire AVFile's + contents in memory at once. This can help applications with many large AVFiles + avoid memory warnings. Sets an error if it occurs. + @param error Pointer to an NSError that will be set if necessary. + @return A stream containing the data. Returns nil if there was an error in + fetching. + */ +- (NSInputStream *)getDataStream:(NSError **)error; + +/*! + Asynchronously gets the data from cache if available or fetches its contents + from the LeanCloud servers. Executes the given block. + @param block The block should have the following argument signature: (NSData *result, NSError *error) + */ +- (void)getDataInBackgroundWithBlock:(AVDataResultBlock)block; + +/*! + This method is like getDataInBackgroundWithBlock: but avoids ever holding the + entire AVFile's contents in memory at once. This can help applications with + many large AVFiles avoid memory warnings. + @param block The block should have the following argument signature: (NSInputStream *result, NSError *error) + */ +- (void)getDataStreamInBackgroundWithBlock:(AVDataStreamResultBlock)block; + +/*! + Asynchronously gets the data from cache if available or fetches its contents + from the LeanCloud servers. Executes the resultBlock upon + completion or error. Executes the progressBlock periodically with the percent progress. progressBlock will get called with 100 before resultBlock is called. + @param resultBlock The block should have the following argument signature: (NSData *result, NSError *error) + @param progressBlock The block should have the following argument signature: (int percentDone) + */ +- (void)getDataInBackgroundWithBlock:(AVDataResultBlock)resultBlock + progressBlock:(AVProgressBlock)progressBlock; + +/*! + This method is like getDataInBackgroundWithBlock:progressBlock: but avoids ever + holding the entire AVFile's contents in memory at once. This can help + applications with many large AVFiles avoid memory warnings. + @param resultBlock The block should have the following argument signature: (NSInputStream *result, NSError *error) + @param progressBlock The block should have the following argument signature: (int percentDone) + */ +- (void)getDataStreamInBackgroundWithBlock:(AVDataStreamResultBlock)resultBlock + progressBlock:(AVProgressBlock)progressBlock; + +/*! + Asynchronously gets the data from cache if available or fetches its contents + from the LeanCloud servers. + @param target The object to call selector on. + @param selector The selector to call. It should have the following signature: (void)callbackWithResult:(NSData *)result error:(NSError *)error. error will be nil on success and set if there was an error. + */ +- (void)getDataInBackgroundWithTarget:(id)target selector:(SEL)selector; + +/** @name Interrupting a Transfer */ + +/*! + Cancels the current request (whether upload or download of file data). + */ +- (void)cancel; + + +/*! + Gets a AVFile asynchronously and calls the given block with the result. + + @param objectId The objectId associated with file object. + @param block The block to execute. The block should have the following argument signature: (AVFile *file, NSError *error) + */ ++ (void)getFileWithObjectId:(NSString *)objectId + withBlock:(AVFileResultBlock)block; + +/*! + Get a thumbnail URL for image saved on Qiniu. + + @param scaleToFit Scale the thumbnail and keep aspect ratio. + @param width The thumbnail width. + @param height The thumbnail height. + @param quality The thumbnail image quality in 1 - 100. + @param format The thumbnail image format such as 'jpg', 'gif', 'png', 'tif' etc. + */ +- (NSString *)getThumbnailURLWithScaleToFit:(BOOL)scaleToFit + width:(int)width + height:(int)height + quality:(int)quality + format:(NSString *)format; + +/*! + Get a thumbnail URL for image saved on Qiniu. + @see -getThumbnailURLWithScaleToFit:width:height:quality:format + + @param scaleToFit Scale the thumbnail and keep aspect ratio. + @param width The thumbnail width. + @param height The thumbnail height. + */ +- (NSString *)getThumbnailURLWithScaleToFit:(BOOL)scaleToFit + width:(int)width + height:(int)height; + +/*! + Gets a thumbnail asynchronously and calls the given block with the result. + + @param scaleToFit Scale the thumbnail and keep aspect ratio. + @param width The desired width. + @param height The desired height. + @param block The block to execute. The block should have the following argument signature: (UIImage *image, NSError *error) + */ +- (void)getThumbnail:(BOOL)scaleToFit + width:(int)width + height:(int)height + withBlock:(AVImageResultBlock)block; + +/*! + Sets a owner id to metadata. + + @param ownerId The owner objectId. + */ +-(void)setOwnerId:(NSString *)ownerId; + +/*! + Gets owner id from metadata. + + */ +-(NSString *)ownerId; + + +/*! + Gets file size in bytes. + */ +-(NSUInteger)size; + +/*! + Gets file path extension from url, name or local file path. + */ +-(NSString *)pathExtension; + +/*! + Gets local file path. + */ +- (NSString *)localPath; + +/*! + Remove file in background. + @param block The block to execute. The block should have the following argument signature: (BOOL succeeded, NSError *error) + */ +- (void)deleteInBackgroundWithBlock:(AVBooleanResultBlock)block; + +/*! + Remove file in background. + */ +- (void)deleteInBackground; + + +/** @name Cache management */ + +/*! + Clear file cache. + */ +- (void)clearCachedFile; + +/** + * clear All Cached AVFiles + * + * @return clear success or not + */ ++ (BOOL)clearAllCachedFiles; + +/** + * clear All Cached AVFiles by days ago + * + * @param numberOfDays number Of Days + * + * @return clear success or not + */ ++ (BOOL)clearCacheMoreThanDays:(NSInteger)numberOfDays; + + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVGeoPoint.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVGeoPoint.h new file mode 100644 index 0000000..44bfcf2 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVGeoPoint.h @@ -0,0 +1,84 @@ +// +// AVGeoPoint.h +// LeanCloud +// + + +#import + +@class CLLocation; + +/*! + Object which may be used to embed a latitude / longitude point as the value for a key in a AVObject. + AVObjects with a AVGeoPoint field may be queried in a geospatial manner using AVQuery's whereKey:nearGeoPoint:. + + This is also used as a point specifier for whereKey:nearGeoPoint: queries. + + Currently, object classes may only have one key associated with a GeoPoint type. + */ + +@interface AVGeoPoint : NSObject + +/** @name Creating a AVGeoPoint */ +/*! + Create a AVGeoPoint object. Latitude and longitude are set to 0.0. + @return a new AVGeoPoint. + */ ++ (AVGeoPoint *)geoPoint; + +/*! + Creates a new AVGeoPoint object for the given CLLocation, set to the location's + coordinates. + @param location CLLocation object, with set latitude and longitude. + @return a new AVGeoPoint at specified location. + */ ++ (AVGeoPoint *)geoPointWithLocation:(CLLocation *)location; + +/*! + Creates a new AVGeoPoint object with the specified latitude and longitude. + @param latitude Latitude of point in degrees. + @param longitude Longitude of point in degrees. + @return New point object with specified latitude and longitude. + */ ++ (AVGeoPoint *)geoPointWithLatitude:(double)latitude longitude:(double)longitude; + +/*! + Fetches the user's current location and returns a new AVGeoPoint object via the + provided block. + @param geoPointHandler A block which takes the newly created AVGeoPoint as an + argument. + */ ++ (void)geoPointForCurrentLocationInBackground:(void(^)(AVGeoPoint *geoPoint, NSError *error))geoPointHandler; + +/** @name Controlling Position */ + +/// Latitude of point in degrees. Valid range (-90.0, 90.0). +@property (nonatomic) double latitude; +/// Longitude of point in degrees. Valid range (-180.0, 180.0). +@property (nonatomic) double longitude; + +/** @name Calculating Distance */ + +/*! + Get distance in radians from this point to specified point. + @param point AVGeoPoint location of other point. + @return distance in radians + */ +- (double)distanceInRadiansTo:(AVGeoPoint*)point; + +/*! + Get distance in miles from this point to specified point. + @param point AVGeoPoint location of other point. + @return distance in miles + */ +- (double)distanceInMilesTo:(AVGeoPoint*)point; + +/*! + Get distance in kilometers from this point to specified point. + @param point AVGeoPoint location of other point. + @return distance in kilometers + */ +- (double)distanceInKilometersTo:(AVGeoPoint*)point; + + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVGroup.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVGroup.h new file mode 100644 index 0000000..0b70cec --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVGroup.h @@ -0,0 +1,147 @@ +// +// AVGroup.h +// AVOS +// +// Created by Qihe Bian on 7/22/14. +// +// + +#import +#import "AVConstants.h" +#import "AVMessage.h" + +@class AVSession; +@class AVGroup; +@protocol AVGroupDelegate; + +typedef enum : NSUInteger { + AVGroupEventSelfJoined = 1, + AVGroupEventSelfLeft, + AVGroupEventSelfRejected, + AVGroupEventMemberJoined, + AVGroupEventMemberLeft, + AVGroupEventMemberInvited, + AVGroupEventMemberKicked, + AVGroupEventReject +} AVGroupEvent; + +typedef uint64_t AVGroupOption; +enum : AVGroupOption { + AVGroupOptionNone = 0, + AVGroupOptionTransient = 1 << 0, +}; + +typedef void (^AVGroupResultBlock)(AVGroup *group, NSError *error); +@interface AVGroup : NSObject + +@property (nonatomic, weak) id delegate; +@property (nonatomic, readonly) NSString *groupId; +@property (nonatomic, weak) AVSession *session; + +/*! + * 异步创建一个新group并加入此group + * @param session group依赖的服务器会话 + * @param groupDelegate group使用的delegate + * @param callback group创建成功或失败的回调 + */ ++ (void)createGroupWithSession:(AVSession *)session + groupDelegate:(id)groupDelegate + callback:(AVGroupResultBlock)callback; + +/*! + * 异步创建一个新group并加入此group + * @param session group依赖的服务器会话 + * @param groupDelegate group使用的delegate + * @param options - 可选参数,可以使用或 “|” 操作表示多个选项 + * @param callback group创建成功或失败的回调 + */ ++ (void)createGroupWithSession:(AVSession *)session + groupDelegate:(id)groupDelegate + options:(AVGroupOption)options + callback:(AVGroupResultBlock)callback; + +/*! + * 根据groupId获取一个AVGroup对象 + * @param groupId 已经存在的groupId,不能为nil + * @param session group依赖的服务器会话 + * @return 返回group对象 + */ ++ (AVGroup *)getGroupWithGroupId:(NSString *)groupId session:(AVSession *)session; + +/*! + * 当生成一个AVGroup对象时默认使用此delegate,主要用于构建非主动创建的AVGroup对象,如被邀请加入某个Group + * @param delegate 默认的delegate + */ ++ (void)setDefaultDelegate:(id)delegate; + +/*! + * 加入group + */ +- (void)join; + +/*! + * 向group发送消息 + * @param message 消息对象 + */ +- (void)sendMessage:(AVMessage *)message; + +/*! + * 向group发送消息 + * @param message 消息对象 + * @param transient 设置为 YES, 当且仅当某个 peer 在线才会收到该条消息,且该条消息既不会存为离线消息,也不会通过消息推送系统发出去. + * 如果设置为 NO, 则该条消息会设法通过各种途径发到 peer 客户端,比如即时通信、推送、离线消息等。 + */ +- (void)sendMessage:(AVMessage *)message transient:(BOOL)transient; + +- (void)sendMessage:(NSString *)message isTransient:(BOOL)transient AVDeprecated("2.6.4"); + +/*! + * 将指定peerIds踢出group + * @param peerIds 需要踢出group的peerId列表 + */ +- (void)kickPeerIds:(NSArray *)peerIds; + +/*! + * 将指定peerIds踢出group + * @param peerIds 需要踢出group的peerId列表 + * @param callback 结果回调 + */ +- (void)kickPeerIds:(NSArray *)peerIds callback:(AVArrayResultBlock)callback; + +- (BOOL)kick:(NSArray *)peerIds AVDeprecated("2.6.4"); + +/*! + * 邀请peerIds加入group + * @param peerIds 需要邀请的peerId列表 + */ +- (void)invitePeerIds:(NSArray *)peerIds; + +/*! + * 邀请peerIds加入group + * @param peerIds 需要邀请的peerId列表 + * @param callback 结果回调 + */ +- (void)invitePeerIds:(NSArray *)peerIds callback:(AVArrayResultBlock)callback; + +- (BOOL)invite:(NSArray *)peerIds AVDeprecated("2.6.4"); + +/*! + * 退出group + */ +- (void)quit; + +@end + +@protocol AVGroupDelegate +@optional +- (void)group:(AVGroup *)group didReceiveMessage:(AVMessage *)message; +- (void)group:(AVGroup *)group didReceiveEvent:(AVGroupEvent)event peerIds:(NSArray *)peerIds; +- (void)group:(AVGroup *)group messageSendFinished:(AVMessage *)message; +- (void)group:(AVGroup *)group messageSendFailed:(AVMessage *)message error:(NSError *)error; + + +- (void)session:(AVSession *)session group:(AVGroup *)group didReceiveGroupMessage:(NSString *)message fromPeerId:(NSString *)peerId AVDeprecated("2.6.4"); +- (void)session:(AVSession *)session group:(AVGroup *)group didReceiveGroupEvent:(AVGroupEvent)event memberIds:(NSArray *)memberIds AVDeprecated("2.6.4"); +- (void)session:(AVSession *)session group:(AVGroup *)group messageSent:(NSString *)message success:(BOOL)success AVDeprecated("2.6.4"); + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVHistoryMessage.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVHistoryMessage.h new file mode 100644 index 0000000..24a70a1 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVHistoryMessage.h @@ -0,0 +1,14 @@ +// +// AVHistoryMessage.h +// AVOS +// +// Created by Qihe Bian on 10/21/14. +// +// + +#import +#import "AVMessage.h" + +@interface AVHistoryMessage : AVMessage +@property(nonatomic, strong)NSString *conversationId; +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVHistoryMessageQuery.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVHistoryMessageQuery.h new file mode 100644 index 0000000..359a277 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVHistoryMessageQuery.h @@ -0,0 +1,115 @@ +// +// AVHistoryMessageQuery.h +// AVOS +// +// Created by Qihe Bian on 10/21/14. +// +// + +#import +#import "AVHistoryMessage.h" +#import "AVConstants.h" + +@interface AVHistoryMessageQuery : NSObject +@property(nonatomic)int64_t timestamp; +@property(nonatomic)int limit; + +/** + * 构造通用 AVHistoryMessageQuery + * @return query 对象 + */ ++ (instancetype)query; + +/** + * 构造通用 AVHistoryMessageQuery + * @param timestamp 截止时间,0表示不指定 + * @param limit 限制返回结果数量,0表示不指定 + * @return query 对象 + */ ++ (instancetype)queryWithTimestamp:(int64_t)timestamp limit:(int)limit; + +/** + * 构造指定 conversationId 的 AVHistoryMessageQuery + * @param conversationId 对话Id + * @return query 对象 + */ ++ (instancetype)queryWithConversationId:(NSString *)conversationId; + +/** + * 构造指定 conversationId 的 AVHistoryMessageQuery + * @param conversationId 对话Id + * @param timestamp 截止时间,0表示不指定 + * @param limit 限制返回结果数量,0表示不指定 + * @return query 对象 + */ ++ (instancetype)queryWithConversationId:(NSString *)conversationId timestamp:(int64_t)timestamp limit:(int)limit; + +/** + * 构造查询指定来源 peerId 的 AVHistoryMessageQuery + * @param fromPeerId 来源peerId + * @return query 对象 + */ ++ (instancetype)queryWithFromPeerId:(NSString *)fromPeerId; + +/** + * 构造查询指定来源 peerId 的 AVHistoryMessageQuery + * @param fromPeerId 来源peerId + * @param timestamp 截止时间,0表示不指定 + * @param limit 限制返回结果数量,0表示不指定 + * @return query 对象 + */ ++ (instancetype)queryWithFromPeerId:(NSString *)fromPeerId timestamp:(int64_t)timestamp limit:(int)limit; + +/** + * 构造查询两个 peerId 之间历史记录的 AVHistoryMessageQuery + * @param firstPeerId 参与对话的一个peerId + * @param secondPeerId 参与对话的另一个peerId + * @return query 对象 + */ ++ (instancetype)queryWithFirstPeerId:(NSString *)firstPeerId secondPeerId:(NSString *)secondPeerId; + +/** + * 构造查询两个 peerId 之间历史记录的 AVHistoryMessageQuery + * @param firstPeerId 参与对话的一个peerId + * @param secondPeerId 参与对话的另一个peerId + * @param timestamp 截止时间,0表示不指定 + * @param limit 限制返回结果数量,0表示不指定 + * @return query 对象 + */ ++ (instancetype)queryWithFirstPeerId:(NSString *)firstPeerId secondPeerId:(NSString *)secondPeerId timestamp:(int64_t)timestamp limit:(int)limit; + +/** + * 构造查询群组历史记录的 AVHistoryMessageQuery + * @param groupId 群组Id + * @return query 对象 + */ ++ (instancetype)queryWithGroupId:(NSString *)groupId; + +/** + * 构造查询群组历史记录的 AVHistoryMessageQuery + * @param groupId 群组Id + * @param timestamp 截止时间,0表示不指定 + * @param limit 限制返回结果数量,0表示不指定 + * @return query 对象 + */ ++ (instancetype)queryWithGroupId:(NSString *)groupId timestamp:(int64_t)timestamp limit:(int)limit; + +/** + * 开始查询 + * @return 历史聊天记录数组,发生错误返回nil + */ +-(NSArray *)find; + +/** + * 开始查询 + * @param error 发生错误通过error返回 + * @return 历史聊天记录数组,发生错误返回nil + */ +-(NSArray *)find:(NSError **)error; + +/** + * 开始查询 + * @param callback 结果回调 + */ +-(void)findInBackgroundWithCallback:(AVArrayResultBlock)callback; +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVInstallation.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVInstallation.h new file mode 100644 index 0000000..1309a51 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVInstallation.h @@ -0,0 +1,85 @@ +// +// AVInstallation.h +// LeanCloud +// + +#import +#import "AVObject.h" +#import "AVQuery.h" + +/*! + A LeanCloud Framework Installation Object that is a local representation of an + installation persisted to the LeanCloud. This class is a subclass of a + AVObject, and retains the same functionality of a AVObject, but also extends + it with installation-specific fields and related immutability and validity + checks. + + A valid AVInstallation can only be instantiated via + [AVInstallation currentInstallation] because the required identifier fields + are readonly. The timeZone and badge fields are also readonly properties which + are automatically updated to match the device's time zone and application badge + when the AVInstallation is saved, thus these fields might not reflect the + latest device state if the installation has not recently been saved. + + AVInstallation objects which have a valid deviceToken and are saved to + the LeanCloud can be used to target push notifications. + + This class is currently for iOS only. There is no AVInstallation for LeanCloud + applications running on OS X, because they cannot receive push notifications. + */ + +@interface AVInstallation : AVObject { +} + +/** @name Targeting Installations */ + +/*! + Creates a query for AVInstallation objects. The resulting query can only + be used for targeting a AVPush. Calling find methods on the resulting query + will raise an exception. + */ ++ (AVQuery *)query; + +/** @name Accessing the Current Installation */ + +/*! + Gets the currently-running installation from disk and returns an instance of + it. If this installation is not stored on disk, returns a AVInstallation + with deviceType and installationId fields set to those of the + current installation. + @return a AVInstallation that represents the currently-running + installation. + */ ++ (AVInstallation *)currentInstallation; + +/*! + Sets the device token string property from an NSData-encoded token. + + @param deviceTokenData NSData-encoded device token. + */ +- (void)setDeviceTokenFromData:(NSData *)deviceTokenData; + +/** @name Properties */ + +/// The device type for the AVInstallation. +@property (nonatomic, readonly, retain) NSString *deviceType; + +/// The installationId for the AVInstallation. +@property (nonatomic, readonly, retain) NSString *installationId; + +/// The device token for the AVInstallation. +@property (nonatomic, retain) NSString *deviceToken; + +/// The device profile for the AVInstallation. +@property (nonatomic, retain) NSString *deviceProfile; + +/// The badge for the AVInstallation. +@property (nonatomic, assign) NSInteger badge; + +/// The timeZone for the AVInstallation. +@property (nonatomic, readonly, retain) NSString *timeZone; + +/// The channels for the AVInstallation. +@property (nonatomic, retain) NSArray *channels; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVLogger.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVLogger.h new file mode 100644 index 0000000..16afaa3 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVLogger.h @@ -0,0 +1,37 @@ +// +// AVLogger.h +// AVOS +// +// Created by Qihe Bian on 9/9/14. +// +// + +#import + +typedef enum : NSUInteger { + AVLoggerLevelNone = 0, + AVLoggerLevelInfo = 1, + AVLoggerLevelDebug = 1 << 1, + AVLoggerLevelError = 1 << 2, + AVLoggerLevelAll = AVLoggerLevelInfo | AVLoggerLevelDebug | AVLoggerLevelError, +} AVLoggerLevel; + +extern NSString *const AVLoggerDomainCURL; +extern NSString *const AVLoggerDomainNetwork; +extern NSString *const AVLoggerDomainIM; +extern NSString *const AVLoggerDomainStorage; + +@interface AVLogger : NSObject ++ (void)setLoggerLevelMask:(NSUInteger)levelMask; ++ (void)addLoggerDomain:(NSString *)domain; ++ (void)removeLoggerDomain:(NSString *)domain; ++ (void)logFunc:(const char *)func domain:(NSString *)domain level:(AVLoggerLevel)level message:(NSString *)fmt, ... NS_FORMAT_FUNCTION(4, 5); +@end + +#define _AVLoggerInfo(_domain, ...) [AVLogger logFunc:__func__ domain:_domain level:AVLoggerLevelInfo message:__VA_ARGS__] +#define _AVLoggerDebug(_domain, ...) [AVLogger logFunc:__func__ domain:_domain level:AVLoggerLevelDebug message:__VA_ARGS__] +#define _AVLoggerError(_domain, ...) [AVLogger logFunc:__func__ domain:_domain level:AVLoggerLevelError message:__VA_ARGS__] + +#define AVLoggerInfo(domain, ...) _AVLoggerInfo(domain, __VA_ARGS__) +#define AVLoggerDebug(domain, ...) _AVLoggerDebug(domain, __VA_ARGS__) +#define AVLoggerError(domain, ...) _AVLoggerError(domain, __VA_ARGS__) \ No newline at end of file diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVMessage.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVMessage.h new file mode 100644 index 0000000..5cec29f --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVMessage.h @@ -0,0 +1,49 @@ +// +// AVMessage.h +// AVOS +// +// Created by Qihe Bian on 8/6/14. +// +// + +#import + +@class AVSession; +@class AVGroup; +typedef enum : NSUInteger { + AVMessageTypePeerIn = 1, + AVMessageTypePeerOut, + AVMessageTypeGroupIn, + AVMessageTypeGroupOut, +} AVMessageType; + +@interface AVMessage : NSObject +@property(nonatomic)AVMessageType type; +@property(nonatomic, strong)NSString *payload; +@property(nonatomic, strong)NSString *fromPeerId; +@property(nonatomic, strong)NSString *toPeerId; +@property(nonatomic, strong)NSString *groupId; +@property(nonatomic)int64_t timestamp; +@property(nonatomic)int64_t receiptTimestamp; +@property(nonatomic)BOOL offline; + +/*! + * 构造一个发送到group的message对象 + * @param group 要发送的group + * @param payload 消息载体 + * @return message 对象 + */ ++ (AVMessage *)messageForGroup:(AVGroup *)group payload:(NSString *)payload; + +/*! + * 构造一个发送给 toPeerId 的message对象 + * @param session 服务器会话 + * @param toPeerId 要发往的 peerId + * @param payload 消息载体 + * @return message 对象 + */ ++ (AVMessage *)messageForPeerWithSession:(AVSession *)session + toPeerId:(NSString *)toPeerId + payload:(NSString *)payload; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVOSCloud.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVOSCloud.h new file mode 100644 index 0000000..7e345d4 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVOSCloud.h @@ -0,0 +1,263 @@ +// +// paas.h +// paas +// +// Created by Zhu Zeng on 2/25/13. +// Copyright (c) 2013 AVOS. All rights reserved. +// + +#import +#import "AVConstants.h" +#import "AVGeoPoint.h" +#import "AVObject.h" +#import "AVObject+Subclass.h" +#import "AVQuery.h" +#import "AVSearchQuery.h" +#import "AVSearchSortBuilder.h" +#import "AVUser.h" +#import "AVRole.h" +#import "AVFile.h" +#import "AVAnonymousUtils.h" +#import "AVACL.h" +#import "AVInstallation.h" +#import "AVPush.h" +#import "AVCloud.h" +#import "AVRelation.h" +#import "AVSubclassing.h" +#import "AVStatus.h" +#import "AVSession.h" +#import "AVSignature.h" +#import "AVLogger.h" +#import "AVHistoryMessageQuery.h" + +#if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) +#import "AVAnalytics.h" +#endif + +/** + * Storage Type + */ +typedef NS_ENUM(int, AVStorageType) { + /// QiNiu + AVStorageTypeQiniu = 0, + + /* Parse */ + AVStorageTypeParse, + + /* AWS S3 */ + AVStorageTypeS3, + +} ; + +typedef enum AVLogLevel : NSUInteger { + AVLogLevelNone = 0, + AVLogLevelError = 1 << 0, + AVLogLevelWarning = 1 << 1, + AVLogLevelInfo = 1 << 2, + AVLogLevelVerbose = 1 << 3, + AVLogLevelDefault = AVLogLevelError | AVLogLevelWarning +} AVLogLevel; + +#define kAVDefaultNetworkTimeoutInterval 10.0 + +/** + * AVOSCloud is the main Class for AVOSCloud SDK + */ +@interface AVOSCloud : NSObject + +/*! + * Enable logs of all levels and domains. + */ ++ (void)setAllLogsEnabled:(BOOL)enabled; + +/** + * 设置SDK信息显示 + * @param verbosePolicy SDK信息显示策略,kAVVerboseShow为显示, + * kAVVerboseNone为不显示,kAVVerboseAuto在DEBUG时显示 + */ ++ (void)setVerbosePolicy:(AVVerbosePolicy)verbosePolicy; + +/** @name Connecting to LeanCloud */ + +/*! + Sets the applicationId and clientKey of your application. + @param applicationId The applicaiton id for your LeanCloud application. + @param clientKey The client key for your LeanCloud application. + */ ++ (void)setApplicationId:(NSString *)applicationId clientKey:(NSString *)clientKey; + +/** + * get Application Id + * + * @return Application Id + */ ++ (NSString *)getApplicationId; + +/** + * get Client Key + * + * @return Client Key + */ ++ (NSString *)getClientKey; + + +/** + * 开启LastModify支持, 减少流量消耗 + * + * @param enabled 开启 + */ ++ (void)setLastModifyEnabled:(BOOL)enabled; + +/** + * 获取是否开启LastModify支持 + */ ++ (BOOL)getLastModifyEnabled; + +/** + * 清空LastModify缓存 + */ ++(void)clearLastModifyCache; + ++ (void)useAVCloud AVDeprecated("2.3.3以后废除"); ++ (void)setStorageType:(AVStorageType)type; + +/** + * Use AVOS US data center + */ ++ (void)useAVCloudUS; + +/** + * Use AVOS China data center. the default option is China + */ ++ (void)useAVCloudCN; + +/** + * * get the timeout interval for AVOS request + * + * @return timeout interval + */ ++ (NSTimeInterval)networkTimeoutInterval; + +/** + * set the timeout interval for AVOS request + * + * @param time timeout interval + */ ++ (void)setNetworkTimeoutInterval:(NSTimeInterval)time; + +// log ++ (void)setLogLevel:(AVLogLevel)level; ++ (AVLogLevel)logLevel; + +#pragma mark Schedule work + +/** + * Register remote notification with types. + * @param types Notification types. + * @param categories A set of UIUserNotificationCategory objects that define the groups of actions a notification may include. + * NOTE: categories only supported by iOS 8 and later. If application run below iOS 8, categories will be ignored. + */ ++ (void)registerForRemoteNotificationTypes:(NSUInteger)types categories:(NSSet *)categories; + +/** + * Register remote notification with all types (badge, alert, sound) and empty categories. + */ ++ (void)registerForRemoteNotification; + +/** + * get the query cache expired days + * + * @return the query cache expired days + */ ++ (NSInteger)queryCacheExpiredDays; + +/** + * set Query Cache Expired Days, default is 30 days + * + * @param days the days you want to set + */ ++ (void)setQueryCacheExpiredDays:(NSInteger)days; + +/** + * get the file cache expired days + * + * @return the file cache expired days + */ ++ (NSInteger)fileCacheExpiredDays; + + +/** + * set File Cache Expired Days, default is 30 days + * + * @param days the days you want to set + */ ++ (void)setFileCacheExpiredDays:(NSInteger)days; + +/*! + * 请求短信验证码,需要开启手机短信验证 API 选项。 + * 发送短信到指定的手机上,发送短信到指定的手机上,获取6位数字验证码。 + * @param phoneNumber 11位电话号码 + * @param callback 回调结果 + */ ++(void)requestSmsCodeWithPhoneNumber:(NSString *)phoneNumber + callback:(AVBooleanResultBlock)callback; +/*! + * 请求短信验证码,需要开启手机短信验证 API 选项。 + * 发送短信到指定的手机上,获取6位数字验证码。 + * @param phoneNumber 11位电话号码 + * @param appName 应用名称,传nil为默认值您的应用名称 + * @param operation 操作名称,传nil为默认值"短信认证" + * @param ttl 短信过期时间,单位分钟,传0为默认值10分钟 + * @param callback 回调结果 + */ ++(void)requestSmsCodeWithPhoneNumber:(NSString *)phoneNumber + appName:(NSString *)appName + operation:(NSString *)operation + timeToLive:(NSUInteger)ttl + callback:(AVBooleanResultBlock)callback; + +/*! + * 请求短信验证码,需要开启手机短信验证 API 选项。 + * 发送短信到指定的手机上,获取6位数字验证码。 + * @param phoneNumber 11位电话号码 + * @param templateName 模板名称,传nil为默认模板 + * @param variables 模板中使用的变量 + * @param callback 回调结果 + */ ++(void)requestSmsCodeWithPhoneNumber:(NSString *)phoneNumber + templateName:(NSString *)templateName + variables:(NSDictionary *)variables + callback:(AVBooleanResultBlock)callback; + +/*! + * 请求语音短信验证码,需要开启手机短信验证 API 选项 + * 发送语音短信到指定手机上 + * @param phoneNumber 11 位电话号码 + * @param IDD 号码的所在地国家代码,如果传 nil,默认为 "+86" + * @param callback 回调结果 + */ ++(void)requestVoiceCodeWithPhoneNumber:(NSString *)phoneNumber + IDD:(NSString *)IDD + callback:(AVBooleanResultBlock)callback; + +/*! + * 验证短信验证码,需要开启手机短信验证 API 选项。 + * 发送验证码给服务器进行验证。 + * @param code 6位手机验证码 + * @param phoneNumber 11位电话号码 + * @param callback 回调结果 + */ ++(void)verifySmsCode:(NSString *)code mobilePhoneNumber:(NSString *)phoneNumber callback:(AVBooleanResultBlock)callback; + +/*! + * 获取服务端时间。 + */ ++ (NSDate *)getServerDate:(NSError **)error; + +/*! + * 异步地获取服务端时间。 + * @param block 回调结果。 + */ ++ (void)getServerDateWithBlock:(void(^)(NSDate *date, NSError *error))block; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVObject+Subclass.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVObject+Subclass.h new file mode 100644 index 0000000..ca24079 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVObject+Subclass.h @@ -0,0 +1,87 @@ +// +// AVObject+Subclass.h +// paas +// +// Created by Summer on 13-4-2. +// Copyright (c) 2013年 AVOS. All rights reserved. +// + +#import "AVObject.h" + +@class AVQuery; + +/*! +

Subclassing Notes

+ + Developers can subclass AVObject for a more native object-oriented class structure. Strongly-typed subclasses of AVObject must conform to the AVSubclassing protocol and must call registerSubclass to be returned by AVQuery and other AVObject factories. All methods in AVSubclassing except for [AVSubclassing parseClassName] are already implemented in the AVObject(Subclass) category. Inculding AVObject+Subclass.h in your implementation file provides these implementations automatically. + + Subclasses support simpler initializers, query syntax, and dynamic synthesizers. The following shows an example subclass: + + ``` + @interface MYGame : AVObject< AVSubclassing > + // Accessing this property is the same as objectForKey:@"title" + @property (retain) NSString *title; + + (NSString *)parseClassName; + @end + + @implementation MYGame + @dynamic title; + + (NSString *)parseClassName { + return @"Game"; + } + @end + + MYGame *game = [[MYGame alloc] init]; + game.title = @"Bughouse"; + [game saveInBackground]; + ``` + + */ +@interface AVObject(Subclass) + +///*! @name Methods for Subclasses */ +// +///*! +// Designated initializer for subclasses. +// This method can only be called on subclasses which conform to AVSubclassing. +// This method should not be overridden. +// */ +//- (id)init; + +/*! + Creates an instance of the registered subclass with this class's parseClassName. + This helps a subclass ensure that it can be subclassed itself. For example, [AVUser object] will + return a MyUser object if MyUser is a registered subclass of AVUser. For this reason, [MyClass object] is + preferred to [[MyClass alloc] init]. + This method can only be called on subclasses which conform to AVSubclassing. + A default implementation is provided by AVObject which should always be sufficient. + */ ++ (instancetype)object; + +/*! + Creates a reference to an existing AVObject for use in creating associations between AVObjects. Calling isDataAvailable on this + object will return NO until fetchIfNeeded or refresh has been called. No network request will be made. + This method can only be called on subclasses which conform to AVSubclassing. + A default implementation is provided by AVObject which should always be sufficient. + @param objectId The object id for the referenced object. + @return A AVObject without data. + */ ++ (instancetype)objectWithoutDataWithObjectId:(NSString *)objectId; + +/*! + Registers an Objective-C class for LeanCloud to use for representing a given LeanCloud class. + Once this is called on a AVObject subclass, any AVObject LeanCloud creates with a class + name matching [self parseClassName] will be an instance of subclass. + This method can only be called on subclasses which conform to AVSubclassing. + A default implementation is provided by AVObject which should always be sufficient. + */ ++ (void)registerSubclass; + +/*! + Returns a query for objects of type +parseClassName. + This method can only be called on subclasses which conform to AVSubclassing. + A default implementation is provided by AVObject which should always be sufficient. + */ ++ (AVQuery *)query; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVObject.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVObject.h new file mode 100644 index 0000000..5767207 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVObject.h @@ -0,0 +1,614 @@ +// AVObject.h +// Copyright 2013 AVOS Inc. All rights reserved. + +#import +#import "AVConstants.h" + +@class AVRelation; +@class AVACL; + +/*! + An object that is a local representation of data persisted to the LeanCloud. This is the + main class that is used to interact with objects in your app. +*/ + +@interface AVObject : NSObject + +#pragma mark Constructors + +/*! @name Creating a AVObject */ + +/*! + Creates a new AVObject with a class name. + @param className A class name can be any alphanumeric string that begins with a letter. It represents an object in your app, like a User of a Document. + @return the object that is instantiated with the given class name. + */ ++ (instancetype)objectWithClassName:(NSString *)className; + +/*! + Creates a reference to an existing AVObject for use in creating associations between AVObjects. Calling isDataAvailable on this + object will return NO until fetchIfNeeded or refresh has been called. No network request will be made. + + @param className The object's class. + @param objectId The object id for the referenced object. + @return A AVObject without data. + */ ++ (instancetype)objectWithoutDataWithClassName:(NSString *)className + objectId:(NSString *)objectId; + +/*! + Creates a new AVObject with a class name, initialized with data constructed from the specified set of objects and keys. + @param className The object's class. + @param dictionary An NSDictionary of keys and objects to set on the new AVObject. + @return A AVObject with the given class name and set with the given data. + */ ++ (instancetype)objectWithClassName:(NSString *)className dictionary:(NSDictionary *)dictionary; + +/*! + Initializes a new AVObject with a class name. + @param newClassName A class name can be any alphanumeric string that begins with a letter. It represents an object in your app, like a User or a Document. + @return the object that is instantiated with the given class name. + */ +- (instancetype)initWithClassName:(NSString *)newClassName; + +#pragma mark - +#pragma mark Properties + +/*! @name Managing Object Properties */ + +/*! + The id of the object. + */ +@property (nonatomic, retain) NSString *objectId; + +/*! + When the object was last updated. + */ +@property (nonatomic, retain, readonly) NSDate *updatedAt; + +/*! + When the object was created. + */ +@property (nonatomic, retain, readonly) NSDate *createdAt; + +/*! + The class name of the object. + */ +@property (readonly) NSString *className; + +/*! + The ACL for this object. + */ +@property (nonatomic, retain) AVACL *ACL; + +/*! + Returns an array of the keys contained in this object. This does not include + createdAt, updatedAt, authData, or objectId. It does include things like username + and ACL. + */ +- (NSArray *)allKeys; + +#pragma mark - +#pragma mark Get and set + +/*! + Returns the object associated with a given key. + @param key The key that the object is associated with. + @return The value associated with the given key, or nil if no value is associated with key. + */ +- (id)objectForKey:(NSString *)key; + +/*! + Sets the object associated with a given key. + @param object The object. + @param key The key. + */ +- (void)setObject:(id)object forKey:(NSString *)key; + +/*! + Unsets a key on the object. + @param key The key. + */ +- (void)removeObjectForKey:(NSString *)key; + +/*! + * In LLVM 4.0 (XCode 4.5) or higher allows myAVObject[key]. + @param key The key. + */ +- (id)objectForKeyedSubscript:(NSString *)key; + +/*! + * In LLVM 4.0 (XCode 4.5) or higher allows myObject[key] = value + @param object The object. + @param key The key. + */ +- (void)setObject:(id)object forKeyedSubscript:(NSString *)key; + +/*! + Returns the relation object associated with the given key + @param key The key that the relation is associated with. + */ +- (AVRelation *)relationforKey:(NSString *)key; + +#pragma mark - +#pragma mark Array add and remove + +/*! + Adds an object to the end of the array associated with a given key. + @param object The object to add. + @param key The key. + */ +- (void)addObject:(id)object forKey:(NSString *)key; + +/*! + Adds the objects contained in another array to the end of the array associated + with a given key. + @param objects The array of objects to add. + @param key The key. + */ +- (void)addObjectsFromArray:(NSArray *)objects forKey:(NSString *)key; + +/*! + Adds an object to the array associated with a given key, only if it is not + already present in the array. The position of the insert is not guaranteed. + @param object The object to add. + @param key The key. + */ +- (void)addUniqueObject:(id)object forKey:(NSString *)key; + +/*! + Adds the objects contained in another array to the array associated with + a given key, only adding elements which are not already present in the array. + The position of the insert is not guaranteed. + @param objects The array of objects to add. + @param key The key. + */ +- (void)addUniqueObjectsFromArray:(NSArray *)objects forKey:(NSString *)key; + +/*! + Removes all occurrences of an object from the array associated with a given + key. + @param object The object to remove. + @param key The key. + */ +- (void)removeObject:(id)object forKey:(NSString *)key; + +/*! + Removes all occurrences of the objects contained in another array from the + array associated with a given key. + @param objects The array of objects to remove. + @param key The key. + */ +- (void)removeObjectsInArray:(NSArray *)objects forKey:(NSString *)key; + +#pragma mark - +#pragma mark Increment + +/*! + Increments the given key by 1. + @param key The key. + */ +- (void)incrementKey:(NSString *)key; + +/*! + Increments the given key by a number. + @param key The key. + @param amount The amount to increment. + */ +- (void)incrementKey:(NSString *)key byAmount:(NSNumber *)amount; + +#pragma mark - +#pragma mark Save + +/*! @name Saving an Object to LeanCloud */ + +/*! + Saves the AVObject. + @return whether the save succeeded. + */ +- (BOOL)save; + +/*! + Saves the AVObject and sets an error if it occurs. + @param error Pointer to an NSError that will be set if necessary. + @return whether the save succeeded. + */ +- (BOOL)save:(NSError **)error; + +/*! + Saves the AVObject asynchronously. + */ +- (void)saveInBackground; + +/*! + Saves the AVObject asynchronously and executes the given callback block. + @param block The block to execute. The block should have the following argument signature: (BOOL succeeded, NSError *error) + */ +- (void)saveInBackgroundWithBlock:(AVBooleanResultBlock)block; + +/*! + Saves the AVObject asynchronously and calls the given callback. + @param target The object to call selector on. + @param selector The selector to call. It should have the following signature: (void)callbackWithResult:(NSNumber *)result error:(NSError *)error. error will be nil on success and set if there was an error. [result boolValue] will tell you whether the call succeeded or not. + */ +- (void)saveInBackgroundWithTarget:(id)target selector:(SEL)selector; + +/*! + @see saveEventually: + */ +- (void)saveEventually; + +/*! + Saves this object to the server at some unspecified time in the future, even if LeanCloud is currently inaccessible. + Use this when you may not have a solid network connection, and don't need to know when the save completes. + If there is some problem with the object such that it can't be saved, it will be silently discarded. If the save + completes successfully while the object is still in memory, then callback will be called. + + Objects saved with this method will be stored locally in an on-disk cache until they can be delivered to LeanCloud. + They will be sent immediately if possible. Otherwise, they will be sent the next time a network connection is + available. Objects saved this way will persist even after the app is closed, in which case they will be sent the + next time the app is opened. If more than 10MB of data is waiting to be sent, subsequent calls to saveEventually + will cause old saves to be silently discarded until the connection can be re-established, and the queued objects + can be saved. + + + @param callback The block to execute. The block should have the following argument signature: (BOOL succeeded, NSError *error) + */ +- (void)saveEventually:(AVBooleanResultBlock)callback; + +#pragma mark - +#pragma mark Save All + +/*! @name Saving Many Objects to LeanCloud */ + +/*! + Saves a collection of objects all at once. + @param objects The array of objects to save. + @return whether the save succeeded. + */ ++ (BOOL)saveAll:(NSArray *)objects; + +/*! + Saves a collection of objects all at once and sets an error if necessary. + @param objects The array of objects to save. + @param error Pointer to an NSError that will be set if necessary. + @return whether the save succeeded. + */ ++ (BOOL)saveAll:(NSArray *)objects error:(NSError **)error; + +/*! + Saves a collection of objects all at once asynchronously. + @param objects The array of objects to save. + */ ++ (void)saveAllInBackground:(NSArray *)objects; + +/*! + Saves a collection of objects all at once asynchronously and the block when done. + @param objects The array of objects to save. + @param block The block to execute. The block should have the following argument signature: (BOOL succeeded, NSError *error) + */ ++ (void)saveAllInBackground:(NSArray *)objects + block:(AVBooleanResultBlock)block; + +/*! + Saves a collection of objects all at once asynchronously and calls a callback when done. + @param objects The array of objects to save. + @param target The object to call selector on. + @param selector The selector to call. It should have the following signature: (void)callbackWithError:(NSError *)error. error will be nil on success and set if there was an error. + */ ++ (void)saveAllInBackground:(NSArray *)objects + target:(id)target + selector:(SEL)selector; + +#pragma mark - Refresh + +/*! @name Getting an Object from LeanCloud */ + +/*! + Gets whether the AVObject has been fetched. + @return YES if the AVObject is new or has been fetched or refreshed. NO otherwise. + */ +- (BOOL)isDataAvailable; + +#if PARSE_IOS_ONLY +// Deprecated and intentionally not available on the new OS X SDK + +/*! + Refreshes the AVObject with the current data from the server. + */ +- (void)refresh; + +/*! + Refreshes the AVObject with the current data from the server. + @param keys Pointer to an NSArray that contains objects specified by the keys want to fetch. + */ +- (void)refreshWithKeys:(NSArray *)keys; + +/*! + Refreshes the AVObject with the current data from the server and sets an error if it occurs. + @param error Pointer to an NSError that will be set if necessary. + @return success or not + */ +- (BOOL)refresh:(NSError **)error; + +/*! + Refreshes the AVObject asynchronously and executes the given callback block. + @param block The block to execute. The block should have the following argument signature: (AVObject *object, NSError *error) + */ +- (void)refreshInBackgroundWithBlock:(AVObjectResultBlock)block; + +/*! + Refreshes the AVObject with the current data from the server. + @param keys Pointer to an NSArray that contains objects specified by the keys want to fetch. + @param block The block to execute. The block should have the following argument signature: (AVObject *object, NSError *error) + */ +- (void)refreshInBackgroundWithKeys:(NSArray *)keys + block:(AVObjectResultBlock)block; + +/*! + Refreshes the AVObject asynchronously and calls the given callback. + @param target The target on which the selector will be called. + @param selector The selector to call. It should have the following signature: (void)callbackWithResult:(AVObject *)refreshedObject error:(NSError *)error. error will be nil on success and set if there was an error. refreshedObject will be the AVObject with the refreshed data. + */ +- (void)refreshInBackgroundWithTarget:(id)target selector:(SEL)selector; +#endif + +#pragma mark - Fetch + +/*! + Fetches the AVObject with the current data from the server. + */ +- (BOOL)fetch; +/*! + Fetches the AVObject with the current data from the server and sets an error if it occurs. + @param error Pointer to an NSError that will be set if necessary. + @return success or not + */ +- (BOOL)fetch:(NSError **)error; + +/*! + Fetches the AVObject with the current data and specified keys from the server and sets an error if it occurs. + @param keys Pointer to an NSArray that contains objects specified by the keys want to fetch. + */ +- (void)fetchWithKeys:(NSArray *)keys; + +/*! + Fetches the AVObject with the current data and specified keys from the server and sets an error if it occurs. + @param keys Pointer to an NSArray that contains objects specified by the keys want to fetch. + @param error Pointer to an NSError that will be set if necessary. + @return success or not + */ +- (BOOL)fetchWithKeys:(NSArray *)keys + error:(NSError **)error; + +/*! + Fetches the AVObject's data from the server if isDataAvailable is false. + */ +- (AVObject *)fetchIfNeeded; + +/*! + Fetches the AVObject's data from the server if isDataAvailable is false. + @param error Pointer to an NSError that will be set if necessary. + */ +- (AVObject *)fetchIfNeeded:(NSError **)error; + +/*! + Fetches the AVObject's data from the server if isDataAvailable is false. + @param keys Pointer to an NSArray that contains objects specified by the keys want to fetch. + */ +- (AVObject *)fetchIfNeededWithKeys:(NSArray *)keys; + +/*! + Fetches the AVObject's data from the server if isDataAvailable is false. + @param keys Pointer to an NSArray that contains objects specified by the keys want to fetch. + @param error Pointer to an NSError that will be set if necessary. + */ +- (AVObject *)fetchIfNeededWithKeys:(NSArray *)keys + error:(NSError **)error; + +/*! + Fetches the AVObject asynchronously and executes the given callback block. + @param block The block to execute. The block should have the following argument signature: (AVObject *object, NSError *error) + */ +- (void)fetchInBackgroundWithBlock:(AVObjectResultBlock)block; + +/*! + Fetches the AVObject asynchronously and executes the given callback block. + @param keys Pointer to an NSArray that contains objects specified by the keys want to fetch. + @param block The block to execute. The block should have the following argument signature: (AVObject *object, NSError *error) + */ +- (void)fetchInBackgroundWithKeys:(NSArray *)keys + block:(AVObjectResultBlock)block; + +/*! + Fetches the AVObject asynchronously and calls the given callback. + @param target The target on which the selector will be called. + @param selector The selector to call. It should have the following signature: (void)callbackWithResult:(AVObject *)refreshedObject error:(NSError *)error. error will be nil on success and set if there was an error. refreshedObject will be the AVObject with the refreshed data. + */ +- (void)fetchInBackgroundWithTarget:(id)target selector:(SEL)selector; + +/*! + Fetches the AVObject's data asynchronously if isDataAvailable is false, then calls the callback block. + @param block The block to execute. The block should have the following argument signature: (AVObject *object, NSError *error) + */ +- (void)fetchIfNeededInBackgroundWithBlock:(AVObjectResultBlock)block; + +/*! + Fetches the AVObject's data asynchronously if isDataAvailable is false, then calls the callback. + @param target The target on which the selector will be called. + @param selector The selector to call. It should have the following signature: (void)callbackWithResult:(AVObject *)fetchedObject error:(NSError *)error. error will be nil on success and set if there was an error. + */ +- (void)fetchIfNeededInBackgroundWithTarget:(id)target + selector:(SEL)selector; + +/*! @name Getting Many Objects from LeanCloud */ + +/*! + Fetches all of the AVObjects with the current data from the server + @param objects The list of objects to fetch. + */ ++ (void)fetchAll:(NSArray *)objects; + +/*! + Fetches all of the AVObjects with the current data from the server and sets an error if it occurs. + @param objects The list of objects to fetch. + @param error Pointer to an NSError that will be set if necessary + @return success or not + */ ++ (BOOL)fetchAll:(NSArray *)objects error:(NSError **)error; + +/*! + Fetches all of the AVObjects with the current data from the server + @param objects The list of objects to fetch. + */ ++ (void)fetchAllIfNeeded:(NSArray *)objects; + +/*! + Fetches all of the AVObjects with the current data from the server and sets an error if it occurs. + @param objects The list of objects to fetch. + @param error Pointer to an NSError that will be set if necessary + @return success or not + */ ++ (BOOL)fetchAllIfNeeded:(NSArray *)objects error:(NSError **)error; + +/*! + Fetches all of the AVObjects with the current data from the server asynchronously and calls the given block. + @param objects The list of objects to fetch. + @param block The block to execute. The block should have the following argument signature: (NSArray *objects, NSError *error) + */ ++ (void)fetchAllInBackground:(NSArray *)objects + block:(AVArrayResultBlock)block; + +/*! + Fetches all of the AVObjects with the current data from the server asynchronously and calls the given callback. + @param objects The list of objects to fetch. + @param target The target on which the selector will be called. + @param selector The selector to call. It should have the following signature: (void)callbackWithResult:(NSArray *)fetchedObjects error:(NSError *)error. error will be nil on success and set if there was an error. fetchedObjects will the array of AVObjects that were fetched. + */ ++ (void)fetchAllInBackground:(NSArray *)objects + target:(id)target + selector:(SEL)selector; + +/*! + Fetches all of the AVObjects with the current data from the server asynchronously and calls the given block. + @param objects The list of objects to fetch. + @param block The block to execute. The block should have the following argument signature: (NSArray *objects, NSError *error) + */ ++ (void)fetchAllIfNeededInBackground:(NSArray *)objects + block:(AVArrayResultBlock)block; + +/*! + Fetches all of the AVObjects with the current data from the server asynchronously and calls the given callback. + @param objects The list of objects to fetch. + @param target The target on which the selector will be called. + @param selector The selector to call. It should have the following signature: (void)callbackWithResult:(NSArray *)fetchedObjects error:(NSError *)error. error will be nil on success and set if there was an error. fetchedObjects will the array of AVObjects + that were fetched. + */ ++ (void)fetchAllIfNeededInBackground:(NSArray *)objects + target:(id)target + selector:(SEL)selector; + +#pragma mark - Delete + +/*! @name Removing an Object from LeanCloud */ + +/*! + Deletes the AVObject. + @return whether the delete succeeded. + */ +- (BOOL)delete; + +/*! + Deletes the AVObject and sets an error if it occurs. + @param error Pointer to an NSError that will be set if necessary. + @return whether the delete succeeded. + */ +- (BOOL)delete:(NSError **)error; + +/*! + Deletes the AVObject asynchronously. + */ +- (void)deleteInBackground; + +/*! + Deletes the AVObject asynchronously and executes the given callback block. + @param block The block to execute. The block should have the following argument signature: (BOOL succeeded, NSError *error) + */ +- (void)deleteInBackgroundWithBlock:(AVBooleanResultBlock)block; + +/*! + Deletes the AVObject asynchronously and calls the given callback. + @param target The object to call selector on. + @param selector The selector to call. It should have the following signature: (void)callbackWithResult:(NSNumber *)result error:(NSError *)error. error will be nil on success and set if there was an error. [result boolValue] will tell you whether the call succeeded or not. + */ +- (void)deleteInBackgroundWithTarget:(id)target + selector:(SEL)selector; + +/*! + Deletes this object from the server at some unspecified time in the future, even if LeanCloud is currently inaccessible. + Use this when you may not have a solid network connection, and don't need to know when the delete completes. + If there is some problem with the object such that it can't be deleted, the request will be silently discarded. + + Delete instructions made with this method will be stored locally in an on-disk cache until they can be transmitted + to LeanCloud. They will be sent immediately if possible. Otherwise, they will be sent the next time a network connection + is available. Delete requests will persist even after the app is closed, in which case they will be sent the + next time the app is opened. If more than 10MB of saveEventually or deleteEventually commands are waiting to be sent, + subsequent calls to saveEventually or deleteEventually will cause old requests to be silently discarded until the + connection can be re-established, and the queued requests can go through. + */ +- (void)deleteEventually; + +/*! + deleteEventually with callback block. + + @param block The block to execute. + */ +- (void)deleteEventuallyWithBlock:(AVIdResultBlock)block; + + +/*! + * Deletes all objects specified in object array. + * @param objects object array + * @return whether the delete succeeded + */ ++ (BOOL)deleteAll:(NSArray *)objects; + +/*! + * Deletes all objects specified in object array. + * @param objects object array + * @param error Pointer to an NSError that will be set if necessary. + * @return whether the delete succeeded. + */ ++ (BOOL)deleteAll:(NSArray *)objects error:(NSError **)error; + +/** + * Deletes all objects specified in object array. The element of objects array is AVObject or its subclass. + * + * @param objects object array + * @param block The block to execute. The block should have the following argument signature: (BOOL succeeded, NSError *error) + */ ++ (void)deleteAllInBackground:(NSArray *)objects + block:(AVBooleanResultBlock)block; + +#pragma mark - extension +@property (nonatomic, readwrite) BOOL fetchWhenSave; + +/*! + Generate JSON dictionary from AVObject or its subclass object. + */ +-(NSMutableDictionary *)dictionaryForObject; + +/*! + * Construct an AVObject with dictionary. + * @param dictionary A dictionary to construct an AVObject. + */ ++ (AVObject *)objectWithDictionary:(NSDictionary *)dictionary; + +/** + * Load object properties from JSON dictionary. + * + * @param dict JSON dictionary + */ +-(void)objectFromDictionary:(NSDictionary *)dict; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVPush.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVPush.h new file mode 100644 index 0000000..572421f --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVPush.h @@ -0,0 +1,435 @@ +// +// AVPush.h +// LeanCloud +// + +#import +#import +#import "AVConstants.h" +#import "AVQuery.h" + +extern NSString *const kAVPushTargetPlatformIOS; +extern NSString *const kAVPushTargetPlatformAndroid; +extern NSString *const kAVPushTargetPlatformWindowsPhone; + +/*! + A class which defines a push notification that can be sent from + a client device. + + The preferred way of modifying or retrieving channel subscriptions is to use + the AVInstallation class, instead of the class methods in AVPush. + + This class is currently for iOS only. LeanCloud does not handle Push Notifications + to LeanCloud applications running on OS X. Push Notifications can be sent from OS X + applications via Cloud Code or the REST API to push-enabled devices (e.g. iOS + or Android). + */ +@interface AVPush : NSObject + +/*! @name Creating a Push Notification */ + +/** + * 创建一个 AVPush 对象 + * @return AVPush 对象 + */ ++ (instancetype)push; +/** + * Set call what production mode's cloud code + * + * @param isProduction the production mode or test mode + */ ++ (void)setProductionMode:(BOOL)isProduction; + +/*! @name Configuring a Push Notification */ + +/*! + Sets the channel on which this push notification will be sent. + @param channel The channel to set for this push. The channel name must start + with a letter and contain only letters, numbers, dashes, and underscores. + */ +- (void)setChannel:(NSString *)channel; + +/*! + Sets the array of channels on which this push notification will + be sent. + @param channels The array of channels to set for this push. Each channel name + must start with a letter and contain only letters, numbers, dashes, and underscores. + */ +- (void)setChannels:(NSArray *)channels; + +/*! + Sets an installation query to which this push notification will be sent. The + query should be created via [AVInstallation query] and should not specify a + skip, limit, or order. + @param query The installation query to set for this push. + */ +- (void)setQuery:(AVQuery *)query; + +/*! + Sets an alert message for this push notification. This will overwrite + any data specified in setData. + @param message The message to send in this push. + */ +- (void)setMessage:(NSString *)message; + +/*! + Sets an arbitrary data payload for this push notification. See the guide + for information about the dictionary structure. This will overwrite any + data specified in setMessage. + @param data The data to send in this push. + */ +- (void)setData:(NSDictionary *)data; + +/** + * Sets push target platforms. + * + * @param platforms Target platforms. + * Value maybe in kAVPushTargetPlatformIOS,kAVPushTargetPlatformAndroid,kAVPushTargetPlatformWindowsPhone + */ +- (void)setPushToTargetPlatforms:(NSArray *)platforms; + +/** + * Sets whether this push will go to Android devices. + * + * @param pushToAndroid Defaults to true. + */ +- (void)setPushToAndroid:(BOOL)pushToAndroid; + +/** + * Sets whether this push will go to iOS devices + * + * @param pushToIOS Defaults to true + */ +- (void)setPushToIOS:(BOOL)pushToIOS; + +/** + * Sets whether this push will go to WinPhone devices. + * + * @param pushToWP Defaults to true. + */ +- (void)setPushToWP:(BOOL)pushToWP; + +/** + * Sets to push at sometime + * + * @param dateToPush Defaults is now. + */ +- (void)setPushDate:(NSDate*)dateToPush; + + +/*! + Sets the expiration time for this notification. The notification will be + sent to devices which are either online at the time the notification + is sent, or which come online before the expiration time is reached. + Because device clocks are not guaranteed to be accurate, most applications + should instead use expireAfterTimeInterval. + @param date The time at which the notification should expire. + */ +- (void)expireAtDate:(NSDate *)date; + +/*! + Sets the time interval after which this notification should expire. + This notification will be sent to devices which are either online at + the time the notification is sent, or which come online within the given + time interval of the notification being received by LeanCloud server. + An interval which is less than or equal to zero indicates that the + message should only be sent to devices which are currently online. + @param timeInterval The interval after which the notification should expire. + */ +- (void)expireAfterTimeInterval:(NSTimeInterval)timeInterval; + +/*! + Clears both expiration values, indicating that the notification should + never expire. + */ +- (void)clearExpiration; + +/*! @name Sending Push Notifications */ + +/*! + Send a push message to a channel. + @param channel The channel to send to. The channel name must start with + a letter and contain only letters, numbers, dashes, and underscores. + @param message The message to send. + @param error Pointer to an NSError that will be set if necessary. + @return whether the send succeeded. + */ ++ (BOOL)sendPushMessageToChannel:(NSString *)channel + withMessage:(NSString *)message + error:(NSError **)error; + +/*! + Asynchronously send a push message to a channel. + @param channel The channel to send to. The channel name must start with + a letter and contain only letters, numbers, dashes, and underscores. + @param message The message to send. + */ ++ (void)sendPushMessageToChannelInBackground:(NSString *)channel + withMessage:(NSString *)message; + +/*! + Asynchronously sends a push message to a channel and calls the given block. + @param channel The channel to send to. The channel name must start with + a letter and contain only letters, numbers, dashes, and underscores. + @param message The message to send. + @param block The block to execute. The block should have the following argument signature: (BOOL succeeded, NSError *error) + */ ++ (void)sendPushMessageToChannelInBackground:(NSString *)channel + withMessage:(NSString *)message + block:(AVBooleanResultBlock)block; + +/*! + Asynchronously send a push message to a channel. + @param channel The channel to send to. The channel name must start with + a letter and contain only letters, numbers, dashes, and underscores. + @param message The message to send. + @param target The object to call selector on. + @param selector The selector to call. It should have the following signature: (void)callbackWithResult:(NSNumber *)result error:(NSError *)error. error will be nil on success and set if there was an error. [result boolValue] will tell you whether the call succeeded or not. + */ ++ (void)sendPushMessageToChannelInBackground:(NSString *)channel + withMessage:(NSString *)message + target:(id)target + selector:(SEL)selector; + +/*! + Send a push message to a query. + @param query The query to send to. The query must be a AVInstallation query + created with [AVInstallation query]. + @param message The message to send. + @param error Pointer to an NSError that will be set if necessary. + @return whether the send succeeded. + */ ++ (BOOL)sendPushMessageToQuery:(AVQuery *)query + withMessage:(NSString *)message + error:(NSError **)error; + +/*! + Asynchronously send a push message to a query. + @param query The query to send to. The query must be a AVInstallation query + created with [AVInstallation query]. + @param message The message to send. + */ ++ (void)sendPushMessageToQueryInBackground:(AVQuery *)query + withMessage:(NSString *)message; + +/*! + Asynchronously sends a push message to a query and calls the given block. + @param query The query to send to. The query must be a AVInstallation query + created with [AVInstallation query]. + @param message The message to send. + @param block The block to execute. The block should have the following argument signature: (BOOL succeeded, NSError *error) + */ ++ (void)sendPushMessageToQueryInBackground:(AVQuery *)query + withMessage:(NSString *)message + block:(AVBooleanResultBlock)block; + +/*! + Send this push message. + @param error Pointer to an NSError that will be set if necessary. + @return whether the send succeeded. + */ +- (BOOL)sendPush:(NSError **)error; + +/*! + Asynchronously send this push message. + */ +- (void)sendPushInBackground; + +/*! + Asynchronously send this push message and executes the given callback block. + @param block The block to execute. The block should have the following argument signature: (BOOL succeeded, NSError *error) + */ +- (void)sendPushInBackgroundWithBlock:(AVBooleanResultBlock)block; + +/*! + Asynchronously send this push message and calls the given callback. + @param target The object to call selector on. + @param selector The selector to call. It should have the following signature: (void)callbackWithResult:(NSNumber *)result error:(NSError *)error. error will be nil on success and set if there was an error. [result boolValue] will tell you whether the call succeeded or not. + */ +- (void)sendPushInBackgroundWithTarget:(id)target selector:(SEL)selector; + +/*! + Send a push message with arbitrary data to a channel. See the guide for information about the dictionary structure. + @param channel The channel to send to. The channel name must start with + a letter and contain only letters, numbers, dashes, and underscores. + @param data The data to send. + @param error Pointer to an NSError that will be set if necessary. + @return whether the send succeeded. + */ ++ (BOOL)sendPushDataToChannel:(NSString *)channel + withData:(NSDictionary *)data + error:(NSError **)error; + +/*! + Asynchronously send a push message with arbitrary data to a channel. See the guide for information about the dictionary structure. + @param channel The channel to send to. The channel name must start with + a letter and contain only letters, numbers, dashes, and underscores. + @param data The data to send. + */ ++ (void)sendPushDataToChannelInBackground:(NSString *)channel + withData:(NSDictionary *)data; + +/*! + Asynchronously sends a push message with arbitrary data to a channel and calls the given block. See the guide for information about the dictionary structure. + @param channel The channel to send to. The channel name must start with + a letter and contain only letters, numbers, dashes, and underscores. + @param data The data to send. + @param block The block to execute. The block should have the following argument signature: (BOOL succeeded, NSError *error) + */ ++ (void)sendPushDataToChannelInBackground:(NSString *)channel + withData:(NSDictionary *)data + block:(AVBooleanResultBlock)block; + +/*! + Asynchronously send a push message with arbitrary data to a channel. See the guide for information about the dictionary structure. + @param channel The channel to send to. The channel name must start with + a letter and contain only letters, numbers, dashes, and underscores. + @param data The data to send. + @param target The object to call selector on. + @param selector The selector to call. It should have the following signature: (void)callbackWithResult:(NSNumber *)result error:(NSError *)error. error will be nil on success and set if there was an error. [result boolValue] will tell you whether the call succeeded or not. + */ ++ (void)sendPushDataToChannelInBackground:(NSString *)channel + withData:(NSDictionary *)data + target:(id)target + selector:(SEL)selector; + +/*! + Send a push message with arbitrary data to a query. See the guide for information about the dictionary structure. + @param query The query to send to. The query must be a AVInstallation query + created with [AVInstallation query]. + @param data The data to send. + @param error Pointer to an NSError that will be set if necessary. + @return whether the send succeeded. + */ ++ (BOOL)sendPushDataToQuery:(AVQuery *)query + withData:(NSDictionary *)data + error:(NSError **)error; + +/*! + Asynchronously send a push message with arbitrary data to a query. See the guide for information about the dictionary structure. + @param query The query to send to. The query must be a AVInstallation query + created with [AVInstallation query]. + @param data The data to send. + */ ++ (void)sendPushDataToQueryInBackground:(AVQuery *)query + withData:(NSDictionary *)data; + +/*! + Asynchronously sends a push message with arbitrary data to a query and calls the given block. See the guide for information about the dictionary structure. + @param query The query to send to. The query must be a AVInstallation query + created with [AVInstallation query]. + @param data The data to send. + @param block The block to execute. The block should have the following argument signature: (BOOL succeeded, NSError *error) + */ ++ (void)sendPushDataToQueryInBackground:(AVQuery *)query + withData:(NSDictionary *)data + block:(AVBooleanResultBlock)block; + +/*! @name Handling Notifications */ + +/*! + A default handler for push notifications while the app is active to mimic the behavior of iOS push notifications while the app is backgrounded or not running. Call this from didReceiveRemoteNotification. + @param userInfo The userInfo dictionary you get in didReceiveRemoteNotification. + */ ++ (void)handlePush:(NSDictionary *)userInfo; + +/*! @name Managing Channel Subscriptions */ + +/*! + Store the device token locally for push notifications. Usually called from you main app delegate's didRegisterForRemoteNotificationsWithDeviceToken. + @param deviceToken Either as an NSData straight from didRegisterForRemoteNotificationsWithDeviceToken or as an NSString if you converted it yourself. + */ ++ (void)storeDeviceToken:(id)deviceToken; + +/*! + Get all the channels that this device is subscribed to. + @param error Pointer to an NSError that will be set if necessary. + @return an NSSet containing all the channel names this device is subscribed to. + */ ++ (NSSet *)getSubscribedChannels:(NSError **)error; + +/*! + Get all the channels that this device is subscribed to. + @param block The block to execute. The block should have the following argument signature: (NSSet *channels, NSError *error) + */ ++ (void)getSubscribedChannelsInBackgroundWithBlock:(AVSetResultBlock)block; + +/*! + Asynchronously get all the channels that this device is subscribed to. + @param target The object to call selector on. + @param selector The selector to call. It should have the following signature: (void)callbackWithResult:(NSSet *)result error:(NSError *)error. error will be nil on success and set if there was an error. + @return an NSSet containing all the channel names this device is subscribed to. + */ ++ (void)getSubscribedChannelsInBackgroundWithTarget:(id)target + selector:(SEL)selector; + +/*! + Subscribes the device to a channel of push notifications. + @param channel The channel to subscribe to. The channel name must start with + a letter and contain only letters, numbers, dashes, and underscores. + @param error Pointer to an NSError that will be set if necessary. + @return whether the subscribe succeeded. + */ ++ (BOOL)subscribeToChannel:(NSString *)channel error:(NSError **)error; + +/*! + Asynchronously subscribes the device to a channel of push notifications. + @param channel The channel to subscribe to. The channel name must start with + a letter and contain only letters, numbers, dashes, and underscores. + */ ++ (void)subscribeToChannelInBackground:(NSString *)channel; + +/*! + Asynchronously subscribes the device to a channel of push notifications and calls the given block. + @param channel The channel to subscribe to. The channel name must start with + a letter and contain only letters, numbers, dashes, and underscores. + @param block The block to execute. The block should have the following argument signature: (BOOL succeeded, NSError *error) + */ ++ (void)subscribeToChannelInBackground:(NSString *)channel + block:(AVBooleanResultBlock)block; + +/*! + Asynchronously subscribes the device to a channel of push notifications and calls the given callback. + @param channel The channel to subscribe to. The channel name must start with + a letter and contain only letters, numbers, dashes, and underscores. + @param target The object to call selector on. + @param selector The selector to call. It should have the following signature: (void)callbackWithResult:(NSNumber *)result error:(NSError *)error. error will be nil on success and set if there was an error. [result boolValue] will tell you whether the call succeeded or not. + */ ++ (void)subscribeToChannelInBackground:(NSString *)channel + target:(id)target + selector:(SEL)selector; + +/*! + Unsubscribes the device to a channel of push notifications. + @param channel The channel to unsubscribe from. + @param error Pointer to an NSError that will be set if necessary. + @return whether the unsubscribe succeeded. + */ ++ (BOOL)unsubscribeFromChannel:(NSString *)channel error:(NSError **)error; + +/*! + Asynchronously unsubscribes the device from a channel of push notifications. + @param channel The channel to unsubscribe from. + */ ++ (void)unsubscribeFromChannelInBackground:(NSString *)channel; + + +/*! + Asynchronously unsubscribes the device from a channel of push notifications and calls the given block. + @param channel The channel to unsubscribe from. + @param block The block to execute. The block should have the following argument signature: (BOOL succeeded, NSError *error) + */ ++ (void)unsubscribeFromChannelInBackground:(NSString *)channel + block:(AVBooleanResultBlock)block; + +/*! + Asynchronously unsubscribes the device from a channel of push notifications and calls the given callback. + @param channel The channel to unsubscribe from. + @param target The object to call selector on. + @param selector The selector to call. It should have the following signature: (void)callbackWithResult:(NSNumber *)result error:(NSError *)error. error will be nil on success and set if there was an error. [result boolValue] will tell you whether the call succeeded or not. + */ ++ (void)unsubscribeFromChannelInBackground:(NSString *)channel + target:(id)target + selector:(SEL)selector; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVQuery.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVQuery.h new file mode 100644 index 0000000..5aecebf --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVQuery.h @@ -0,0 +1,655 @@ +// AVQuery.m +// Copyright 2013 AVOS Inc. All rights reserved. + +#import +#import "AVGeoPoint.h" +#import "AVObject.h" +#import "AVCloudQueryResult.h" +/*! + A class that defines a query that is used to query for AVObjects. + */ +@class AVRequestOperation; +@interface AVQuery : NSObject + +#pragma mark Query options + +/** @name Creating a Query for a Class */ + +/*! + Returns a AVQuery for a given class. + @param className The class to query on. + @return A AVQuery object. + */ ++ (instancetype)queryWithClassName:(NSString *)className; + +/*! + Creates a AVQuery with the constraints given by predicate. + + The following types of predicates are supported: + * Simple comparisons such as =, !=, <, >, <=, >=, and BETWEEN with a key and a constant. + * Containment predicates, such as "x IN {1, 2, 3}". + * Key-existence predicates, such as "x IN SELF". + * BEGINSWITH expressions. + * Compound predicates with AND, OR, and NOT. + * SubQueries with "key IN %@", subquery. + + The following types of predicates are NOT supported: + * Aggregate operations, such as ANY, SOME, ALL, or NONE. + * Regular expressions, such as LIKE, MATCHES, CONTAINS, or ENDSWITH. + * Predicates comparing one key to another. + * Complex predicates with many ORed clauses. + + @param className the class name + @param predicate the predicates + */ ++ (instancetype)queryWithClassName:(NSString *)className predicate:(NSPredicate *)predicate; + +/*! + * 使用 CQL 查询 + * @param cql CQL 字符串 + * @return 查询结果 + */ ++ (AVCloudQueryResult *)doCloudQueryWithCQL:(NSString *)cql; + +/*! + * 使用 CQL 查询 + * @param cql CQL 字符串 + * @param error 用于返回错误结果 + * @return 查询结果 + */ ++ (AVCloudQueryResult *)doCloudQueryWithCQL:(NSString *)cql error:(NSError **)error; + +/*! + * 使用 CQL 查询 + * @param cql CQL 字符串 + * @param pvalues 参数列表 + * @param error 用于返回错误结果 + * @return 查询结果 + */ ++ (AVCloudQueryResult *)doCloudQueryWithCQL:(NSString *)cql pvalues:(NSArray *)pvalues error:(NSError **)error; + +/*! + * 使用 CQL 异步查询 + * @param cql CQL 字符串 + * @param callback 查询结果回调 + */ ++ (void)doCloudQueryInBackgroundWithCQL:(NSString *)cql callback:(AVCloudQueryCallback)callback; + +/*! + * 使用 CQL 异步查询 + * @param cql CQL 字符串 + * @param pvalues 参数列表 + * @param callback 查询结果回调 + */ ++ (void)doCloudQueryInBackgroundWithCQL:(NSString *)cql pvalues:(NSArray *)pvalues callback:(AVCloudQueryCallback)callback; + +/*! + Initializes the query with a class name. + @param newClassName The class name. + */ +- (id)initWithClassName:(NSString *)newClassName; + +/*! + The class name to query for + */ +@property (nonatomic, copy) NSString *className; + +/** @name Adding Basic Constraints */ + +/*! + Make the query include AVObjects that have a reference stored at the provided key. + This has an effect similar to a join. You can use dot notation to specify which fields in + the included object are also fetch. + @param key The key to load child AVObjects for. + */ +- (void)includeKey:(NSString *)key; + +/*! + Make the query restrict the fields of the returned AVObjects to include only the provided keys. + If this is called multiple times, then all of the keys specified in each of the calls will be included. + @param keys The keys to include in the result. + */ +- (void)selectKeys:(NSArray *)keys; + +/*! + Add a constraint that requires a particular key exists. + @param key The key that should exist. + */ +- (void)whereKeyExists:(NSString *)key; + +/*! + Add a constraint that requires a key not exist. + @param key The key that should not exist. + */ +- (void)whereKeyDoesNotExist:(NSString *)key; + +/*! + Add a constraint to the query that requires a particular key's object to be equal to the provided object. + @param key The key to be constrained. + @param object The object that must be equalled. + */ +- (void)whereKey:(NSString *)key equalTo:(id)object; + +/*! + Add a constraint to the query that requires a particular key's object to be less than the provided object. + @param key The key to be constrained. + @param object The object that provides an upper bound. + */ +- (void)whereKey:(NSString *)key lessThan:(id)object; + +/*! + Add a constraint to the query that requires a particular key's object to be less than or equal to the provided object. + @param key The key to be constrained. + @param object The object that must be equalled. + */ +- (void)whereKey:(NSString *)key lessThanOrEqualTo:(id)object; + +/*! + Add a constraint to the query that requires a particular key's object to be greater than the provided object. + @param key The key to be constrained. + @param object The object that must be equalled. + */ +- (void)whereKey:(NSString *)key greaterThan:(id)object; + +/*! + Add a constraint to the query that requires a particular key's object to be greater than or equal to the provided object. + @param key The key to be constrained. + @param object The object that must be equalled. + */ +- (void)whereKey:(NSString *)key greaterThanOrEqualTo:(id)object; + +/*! + Add a constraint to the query that requires a particular key's object to be not equal to the provided object. + @param key The key to be constrained. + @param object The object that must not be equalled. + */ +- (void)whereKey:(NSString *)key notEqualTo:(id)object; + +/*! + Add a constraint to the query that requires a particular key's object to be contained in the provided array. + @param key The key to be constrained. + @param array The possible values for the key's object. + */ +- (void)whereKey:(NSString *)key containedIn:(NSArray *)array; + +/*! + Add a constraint to the query that requires a particular key's object not be contained in the provided array. + @param key The key to be constrained. + @param array The list of values the key's object should not be. + */ +- (void)whereKey:(NSString *)key notContainedIn:(NSArray *)array; + +/*! + Add a constraint to the query that requires a particular key's array contains every element of the provided array. + @param key The key to be constrained. + @param array The array of values to search for. + */ +- (void)whereKey:(NSString *)key containsAllObjectsInArray:(NSArray *)array; + +/** @name Adding Location Constraints */ + +/*! + Add a constraint to the query that requires a particular key's coordinates (specified via AVGeoPoint) be near + a reference point. Distance is calculated based on angular distance on a sphere. Results will be sorted by distance + from reference point. + @param key The key to be constrained. + @param geopoint The reference point. A AVGeoPoint. + */ +- (void)whereKey:(NSString *)key nearGeoPoint:(AVGeoPoint *)geopoint; + +/*! + Add a constraint to the query that requires a particular key's coordinates (specified via AVGeoPoint) be near + a reference point and within the maximum distance specified (in miles). Distance is calculated based on + a spherical coordinate system. Results will be sorted by distance (nearest to farthest) from the reference point. + @param key The key to be constrained. + @param geopoint The reference point. A AVGeoPoint. + @param maxDistance Maximum distance in miles. + */ +- (void)whereKey:(NSString *)key nearGeoPoint:(AVGeoPoint *)geopoint withinMiles:(double)maxDistance; + +/*! + Add a constraint to the query that requires a particular key's coordinates (specified via AVGeoPoint) be near + a reference point and within the maximum distance specified (in kilometers). Distance is calculated based on + a spherical coordinate system. Results will be sorted by distance (nearest to farthest) from the reference point. + @param key The key to be constrained. + @param geopoint The reference point. A AVGeoPoint. + @param maxDistance Maximum distance in kilometers. + */ +- (void)whereKey:(NSString *)key nearGeoPoint:(AVGeoPoint *)geopoint withinKilometers:(double)maxDistance; + +/*! + Add a constraint to the query that requires a particular key's coordinates (specified via AVGeoPoint) be near + a reference point and within the maximum distance specified (in radians). Distance is calculated based on + angular distance on a sphere. Results will be sorted by distance (nearest to farthest) from the reference point. + @param key The key to be constrained. + @param geopoint The reference point. A AVGeoPoint. + @param maxDistance Maximum distance in radians. + */ +- (void)whereKey:(NSString *)key nearGeoPoint:(AVGeoPoint *)geopoint withinRadians:(double)maxDistance; + +/*! + Add a constraint to the query that requires a particular key's coordinates (specified via AVGeoPoint) be + contained within a given rectangular geographic bounding box. + @param key The key to be constrained. + @param southwest The lower-left inclusive corner of the box. + @param northeast The upper-right inclusive corner of the box. + */ +- (void)whereKey:(NSString *)key withinGeoBoxFromSouthwest:(AVGeoPoint *)southwest toNortheast:(AVGeoPoint *)northeast; + +/** @name Adding String Constraints */ + +/*! + Add a regular expression constraint for finding string values that match the provided regular expression. + This may be slow for large datasets. + @param key The key that the string to match is stored in. + @param regex The regular expression pattern to match. + */ +- (void)whereKey:(NSString *)key matchesRegex:(NSString *)regex; + +/*! + Add a regular expression constraint for finding string values that match the provided regular expression. + This may be slow for large datasets. + @param key The key that the string to match is stored in. + @param regex The regular expression pattern to match. + @param modifiers Any of the following supported PCRE modifiers:
i - Case insensitive search
m - Search across multiple lines of input + */ +- (void)whereKey:(NSString *)key matchesRegex:(NSString *)regex modifiers:(NSString *)modifiers; + +/*! + Add a constraint for finding string values that contain a provided substring. + This will be slow for large datasets. + @param key The key that the string to match is stored in. + @param substring The substring that the value must contain. + */ +- (void)whereKey:(NSString *)key containsString:(NSString *)substring; + +/*! + Add a constraint for finding string values that start with a provided prefix. + This will use smart indexing, so it will be fast for large datasets. + @param key The key that the string to match is stored in. + @param prefix The substring that the value must start with. + */ +- (void)whereKey:(NSString *)key hasPrefix:(NSString *)prefix; + +/*! + Add a constraint for finding string values that end with a provided suffix. + This will be slow for large datasets. + @param key The key that the string to match is stored in. + @param suffix The substring that the value must end with. + */ +- (void)whereKey:(NSString *)key hasSuffix:(NSString *)suffix; + +/** @name Adding Subqueries */ + +/*! + Returns a AVQuery that is the or of the passed in AVQuerys. + @param queries The list of queries to or together. + @return a AVQuery that is the or of the passed in AVQuerys. + */ ++ (AVQuery *)orQueryWithSubqueries:(NSArray *)queries; + +/*! + Returns a AVQuery that is the AND of the passed in AVQuerys. + @param queries The list of queries to AND together. + @return a AVQuery that is the AND of the passed in AVQuerys. + */ ++ (AVQuery *)andQueryWithSubqueries:(NSArray *)queries; + +/*! + Adds a constraint that requires that a key's value matches a value in another key + in objects returned by a sub query. + @param key The key that the value is stored + @param otherKey The key in objects in the returned by the sub query whose value should match + @param query The query to run. + */ +- (void)whereKey:(NSString *)key matchesKey:(NSString *)otherKey inQuery:(AVQuery *)query; + +/*! + Adds a constraint that requires that a key's value NOT match a value in another key + in objects returned by a sub query. + @param key The key that the value is stored + @param otherKey The key in objects in the returned by the sub query whose value should match + @param query The query to run. + */ +- (void)whereKey:(NSString *)key doesNotMatchKey:(NSString *)otherKey inQuery:(AVQuery *)query; + +/*! + Add a constraint that requires that a key's value matches a AVQuery constraint. + This only works where the key's values are AVObjects or arrays of AVObjects. + @param key The key that the value is stored in + @param query The query the value should match + */ +- (void)whereKey:(NSString *)key matchesQuery:(AVQuery *)query; + +/*! + Add a constraint that requires that a key's value to not match a AVQuery constraint. + This only works where the key's values are AVObjects or arrays of AVObjects. + @param key The key that the value is stored in + @param query The query the value should not match + */ +- (void)whereKey:(NSString *)key doesNotMatchQuery:(AVQuery *)query; + + +/*! + Matches any array with the number of elements specified by count + @param key The key that the value is stored in, value should be kind of array + @param count the array size + */ +- (void)whereKey:(NSString *)key sizeEqualTo:(NSUInteger)count; + +#pragma mark - +#pragma mark Sorting + +/** @name Sorting */ + +/*! + Sort the results in ascending order with the given key. + @param key The key to order by. + */ +- (void)orderByAscending:(NSString *)key; + +/*! + Also sort in ascending order by the given key. The previous keys provided will + precedence over this key. + @param key The key to order bye + */ +- (void)addAscendingOrder:(NSString *)key; + +/*! + Sort the results in descending order with the given key. + @param key The key to order by. + */ +- (void)orderByDescending:(NSString *)key; +/*! + Also sort in descending order by the given key. The previous keys provided will + precedence over this key. + @param key The key to order bye + */ +- (void)addDescendingOrder:(NSString *)key; + +/*! + Sort the results in descending order with the given descriptor. + @param sortDescriptor The NSSortDescriptor to order by. + */ +- (void)orderBySortDescriptor:(NSSortDescriptor *)sortDescriptor; + +/*! + Sort the results in descending order with the given descriptors. + @param sortDescriptors An NSArray of NSSortDescriptor instances to order by. + */ +- (void)orderBySortDescriptors:(NSArray *)sortDescriptors; + +#pragma mark - +#pragma mark Get methods + +/** @name Getting Objects by ID */ + +/*! + Returns a AVObject with a given class and id. + @param objectClass The class name for the object that is being requested. + @param objectId The id of the object that is being requested. + @return The AVObject if found. Returns nil if the object isn't found, or if there was an error. + */ ++ (AVObject *)getObjectOfClass:(NSString *)objectClass + objectId:(NSString *)objectId; + +/*! + Returns a AVObject with a given class and id and sets an error if necessary. + @param objectClass The class name for the object that is being requested. + @param objectId The id of the object that is being requested. + @param error Pointer to an NSError that will be set if necessary. + @return The AVObject if found. Returns nil if the object isn't found, or if there was an error. + */ ++ (AVObject *)getObjectOfClass:(NSString *)objectClass + objectId:(NSString *)objectId + error:(NSError **)error; + +/*! + Returns a AVObject with the given id. + + This mutates the AVQuery. + + @param objectId The id of the object that is being requested. + @return The AVObject if found. Returns nil if the object isn't found, or if there was an error. + */ +- (AVObject *)getObjectWithId:(NSString *)objectId; + +/*! + Returns a AVObject with the given id and sets an error if necessary. + + This mutates the AVQuery + + @param objectId The id of the object that is being requested. + @param error Pointer to an NSError that will be set if necessary. + @return The AVObject if found. Returns nil if the object isn't found, or if there was an error. + */ +- (AVObject *)getObjectWithId:(NSString *)objectId error:(NSError **)error; + +/*! + Gets a AVObject asynchronously and calls the given block with the result. + + This mutates the AVQuery + @param objectId The id of the object being requested. + @param block The block to execute. The block should have the following argument signature: (NSArray *object, NSError *error) + */ +- (void)getObjectInBackgroundWithId:(NSString *)objectId + block:(AVObjectResultBlock)block; + +/*! + Gets a AVObject asynchronously. + + This mutates the AVQuery + + @param objectId The id of the object being requested. + @param target The target for the callback selector. + @param selector The selector for the callback. It should have the following signature: (void)callbackWithResult:(AVObject *)result error:(NSError *)error. result will be nil if error is set and vice versa. + */ +- (void)getObjectInBackgroundWithId:(NSString *)objectId + target:(id)target + selector:(SEL)selector; + +#pragma mark - +#pragma mark Getting Users + +/*! @name Getting User Objects */ + +/*! + Returns a AVUser with a given id. + @param objectId The id of the object that is being requested. + @return The AVUser if found. Returns nil if the object isn't found, or if there was an error. + */ ++ (AVUser *)getUserObjectWithId:(NSString *)objectId; + +/*! + Returns a AVUser with a given class and id and sets an error if necessary. + + @param objectId The id of the object that is being requested. + @param error Pointer to an NSError that will be set if necessary. + @return The AVUser if found. Returns nil if the object isn't found, or if there was an error. + */ ++ (AVUser *)getUserObjectWithId:(NSString *)objectId + error:(NSError **)error; + +/*! + Deprecated. Please use [AVUser query] instead. + */ ++ (AVQuery *)queryForUser __attribute__ ((deprecated)); + +#pragma mark - +#pragma mark Find methods + +/** @name Getting all Matches for a Query */ + +/*! + Finds objects based on the constructed query. + @return an array of AVObjects that were found. + */ +- (NSArray *)findObjects; + +/*! + Finds objects based on the constructed query and sets an error if there was one. + @param error Pointer to an NSError that will be set if necessary. + @return an array of AVObjects that were found. + */ +- (NSArray *)findObjects:(NSError **)error; + +/*! + Finds objects asynchronously and calls the given block with the results. + @param block The block to execute. The block should have the following argument signature:(NSArray *objects, NSError *error) + */ +- (void)findObjectsInBackgroundWithBlock:(AVArrayResultBlock)block; + +/*! + Finds objects asynchronously and calls the given callback with the results. + @param target The object to call the selector on. + @param selector The selector to call. It should have the following signature: (void)callbackWithResult:(NSArray *)result error:(NSError *)error. result will be nil if error is set and vice versa. + */ +- (void)findObjectsInBackgroundWithTarget:(id)target selector:(SEL)selector; + + +/*! + Remove objects asynchronously and calls the given block with the results. + @param block The block to execute. The block should have the following argument signature:(NSArray *objects, NSError *error) + */ +- (void)deleteAllInBackgroundWithBlock:(AVBooleanResultBlock)block; + + +/** @name Getting the First Match in a Query */ + +/*! + Gets an object based on the constructed query. + + This mutates the AVQuery. + + @return a AVObject, or nil if none was found. + */ +- (AVObject *)getFirstObject; + +/*! + Gets an object based on the constructed query and sets an error if any occurred. + + This mutates the AVQuery. + + @param error Pointer to an NSError that will be set if necessary. + @return a AVObject, or nil if none was found. + */ +- (AVObject *)getFirstObject:(NSError **)error; + +/*! + Gets an object asynchronously and calls the given block with the result. + + This mutates the AVQuery. + + @param block The block to execute. The block should have the following argument signature:(AVObject *object, NSError *error) result will be nil if error is set OR no object was found matching the query. error will be nil if result is set OR if the query succeeded, but found no results. + */ +- (void)getFirstObjectInBackgroundWithBlock:(AVObjectResultBlock)block; + +/*! + Gets an object asynchronously and calls the given callback with the results. + + This mutates the AVQuery. + + @param target The object to call the selector on. + @param selector The selector to call. It should have the following signature: (void)callbackWithResult:(AVObject *)result error:(NSError *)error. result will be nil if error is set OR no object was found matching the query. error will be nil if result is set OR if the query succeeded, but found no results. + */ +- (void)getFirstObjectInBackgroundWithTarget:(id)target selector:(SEL)selector; + +#pragma mark - +#pragma mark Count methods + +/** @name Counting the Matches in a Query */ + +/*! + Counts objects based on the constructed query. + @return the number of AVObjects that match the query, or -1 if there is an error. + */ +- (NSInteger)countObjects; + +/*! + Counts objects based on the constructed query and sets an error if there was one. + @param error Pointer to an NSError that will be set if necessary. + @return the number of AVObjects that match the query, or -1 if there is an error. + */ +- (NSInteger)countObjects:(NSError **)error; + +/*! + Counts objects asynchronously and calls the given block with the counts. + @param block The block to execute. The block should have the following argument signature: + (int count, NSError *error) + */ +- (void)countObjectsInBackgroundWithBlock:(AVIntegerResultBlock)block; + +/*! + Counts objects asynchronously and calls the given callback with the count. + @param target The object to call the selector on. + @param selector The selector to call. It should have the following signature: (void)callbackWithResult:(NSNumber *)result error:(NSError *)error. */ +- (void)countObjectsInBackgroundWithTarget:(id)target selector:(SEL)selector; + +#pragma mark - +#pragma mark Cancel methods + +/** @name Cancelling a Query */ + +/*! + Cancels the current network request (if any). Ensures that callbacks won't be called. + */ +- (void)cancel; + +#pragma mark - +#pragma mark Pagination properties + + +/** @name Paginating Results */ +/*! + A limit on the number of objects to return. Note: If you are calling findObject with limit=1, you may find it easier to use getFirst instead. + */ +@property (nonatomic) NSInteger limit; + +/*! + The number of objects to skip before returning any. + */ +@property (nonatomic) NSInteger skip; + +#pragma mark - +#pragma mark Cache methods + +/** @name Controlling Caching Behavior */ + +/*! + The cache policy to use for requests. + */ +@property (readwrite, assign) AVCachePolicy cachePolicy; + +/* ! + The age(seconds) after which a cached value will be ignored. + */ +@property (readwrite, assign) NSTimeInterval maxCacheAge; + +/*! + Returns whether there is a cached result for this query. + @return YES if there is a cached result for this query, and NO otherwise. + */ +- (BOOL)hasCachedResult; + +/*! + Clears the cached result for this query. If there is no cached result, this is a noop. + */ +- (void)clearCachedResult; + +/*! + Clears the cached results for all queries. + */ ++ (void)clearAllCachedResults; + +#pragma mark - Advanced Settings + +/** @name Advanced Settings */ + +/*! + Whether or not performance tracing should be done on the query. + This should not be set in most cases. + */ +@property (nonatomic, assign) BOOL trace; + + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVRelation.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVRelation.h new file mode 100644 index 0000000..6293760 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVRelation.h @@ -0,0 +1,64 @@ +// +// AVRelation.h +// LeanCloud +// +// + +#import +#import "AVObject.h" +#import "AVQuery.h" + +/*! + A class that is used to access all of the children of a many-to-many relationship. Each instance + of AVRelation is associated with a particular parent object and key. + */ +@interface AVRelation : NSObject { + +} + +@property (nonatomic, retain) NSString *targetClass; + + +#pragma mark Accessing objects +/*! + @return A AVQuery that can be used to get objects in this relation. + */ +- (AVQuery *)query; + + +#pragma mark Modifying relations + +/*! + Adds a relation to the passed in object. + @param object AVObject to add relation to. + */ +- (void)addObject:(AVObject *)object; + +/*! + Removes a relation to the passed in object. + @param object AVObject to add relation to. + */ +- (void)removeObject:(AVObject *)object; + +/*! + @return A AVQuery that can be used to get parent objects in this relation. + */ + +/** + * A AVQuery that can be used to get parent objects in this relation. + * + * @param parentClassName parent Class Name + * @param relationKey relation Key + * @param child child object + * + * @return the Query + */ ++(AVQuery *)reverseQuery:(NSString *)parentClassName + relationKey:(NSString *)relationKey + childObject:(AVObject *)child; + +@end + + + + diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVRole.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVRole.h new file mode 100644 index 0000000..61d233a --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVRole.h @@ -0,0 +1,99 @@ +// +// AVRole.h +// LeanCloud +// + +#import +#import "AVObject.h" + +@class AVQuery; + +/*! + Represents a Role on the LeanCloud server. AVRoles represent groupings + of AVUsers for the purposes of granting permissions (e.g. specifying a + AVACL for a AVObject). Roles are specified by their sets of child users + and child roles, all of which are granted any permissions that the + parent role has.
+
+ Roles must have a name (which cannot be changed after creation of the role), + and must specify an ACL. + */ +@interface AVRole : AVObject + +#pragma mark Creating a New Role + +/** @name Creating a New Role */ + +/*! + Constructs a new AVRole with the given name. If no default ACL has been + specified, you must provide an ACL for the role. + + @param name The name of the Role to create. + */ +- (id)initWithName:(NSString *)name; + +/*! + Constructs a new AVRole with the given name. + + @param name The name of the Role to create. + @param acl The ACL for this role. Roles must have an ACL. + */ +- (id)initWithName:(NSString *)name acl:(AVACL *)acl; + +/*! + Constructs a new AVRole with the given name. If no default ACL has been + specified, you must provide an ACL for the role. + + @param name The name of the Role to create. + */ ++ (AVRole *)roleWithName:(NSString *)name; + +/*! + Constructs a new AVRole with the given name. + + @param name The name of the Role to create. + @param acl The ACL for this role. Roles must have an ACL. + */ ++ (AVRole *)roleWithName:(NSString *)name acl:(AVACL *)acl; + +#pragma mark - +#pragma mark Role-specific Properties + +/** @name Role-specific Properties */ + +/*! + Gets or sets the name for a role. This value must be set before the role + has been saved to the server, and cannot be set once the role has been + saved.
+
+ A role's name can only contain alphanumeric characters, _, -, and spaces. + */ +@property (nonatomic, copy) NSString *name; + +/*! + Gets the AVRelation for the AVUsers that are direct children of this role. + These users are granted any privileges that this role has been granted + (e.g. read or write access through ACLs). You can add or remove users from + the role through this relation. + + @return the relation for the users belonging to this role. + */ +- (AVRelation *)users; + +/*! + Gets the AVRelation for the AVRoles that are direct children of this role. + These roles' users are granted any privileges that this role has been granted + (e.g. read or write access through ACLs). You can add or remove child roles + from this role through this relation. + + @return the relation for the roles belonging to this role. + */ +- (AVRelation *)roles; + +#pragma mark - +#pragma mark Querying for Roles + +/** @name Querying for Roles */ ++ (AVQuery *)query; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVSearchQuery.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVSearchQuery.h new file mode 100644 index 0000000..918463c --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVSearchQuery.h @@ -0,0 +1,132 @@ +// +// AVSearchQuery.h +// paas +// +// Created by yang chaozhong on 5/30/14. +// Copyright (c) 2014 AVOS. All rights reserved. +// + +#import +#import "AVConstants.h" +@class AVSearchSortBuilder; + +@interface AVSearchQuery : NSObject + +/*! + * 使用 queryString 构造一个 AVSearchQuery 对象 + * @return AVSearchQuery 实例 + */ ++ (instancetype)searchWithQueryString:(NSString *)queryString; + +/*! + * 查询的 className,默认为 nil,即包括所有启用了应用内搜索的 Class + */ +@property (nonatomic, retain) NSString *className; + +/*! + * 返回集合大小上限,默认值为100,最大为1000 + */ +@property (nonatomic, assign) NSInteger limit; + +/*! + * 查询字符串,具体语法参考 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-query-string-query.html#query-string-syntax + */ +@property (nonatomic, retain) NSString *queryString; + +/*! + * 查询的AVSearchSortBuilder,使用更丰富的排序选项 + */ +@property (nonatomic, retain) AVSearchSortBuilder *sortBuilder; + +/*! + * 符合查询条件的记录条数 + */ +@property (nonatomic, readonly) NSInteger hits; + +/*! + * 当前页面的scroll id,用于分页,可选。 + # @warning 如非特殊需求,请不要手动设置 sid。每次 findObjects 之后,SDK 会自动更新 sid。如果手动设置了错误的sid,将无法获取到搜索结果。 + * 有关scroll id,可以参考 http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/scan-scroll.html + */ +@property (nonatomic, retain) NSString *sid; + +/*! + * 查询的字段列表,可选。 + */ +@property (nonatomic, retain) NSArray *fields; + +/*! + * 返回结果的高亮语法,默认为 "*" + * 语法规则可以参考 http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-highlighting.html#highlighting-settings + */ +@property (nonatomic, retain) NSString *highlights; + +/*! + * 缓存策略 + */ +@property (readwrite, assign) AVCachePolicy cachePolicy; + +/* ! + * 最多缓存时间,单位为秒,默认值 24*3600 秒 + */ +@property (readwrite, assign) NSTimeInterval maxCacheAge; + +#pragma mark - Find methods + +/*! + * 根据查询条件获取结果对象 + * @return AVObjects 数组 + */ +- (NSArray *)findObjects; + +/*! + * 根据查询条件获取结果对象,如果有 error,则设置一个 error + * @param error 指针 + * @return AVObjects 数组 + */ +- (NSArray *)findObjects:(NSError **)error; + +/*! + * 异步获取搜索结果,并回调block + * @param block 需要有这样的方法签名 (NSArray *objects, NSError *error) + */ +- (void)findInBackground:(AVArrayResultBlock)block; + +#pragma mark - Sorting +/*! + 搜索结果会根据关键字,按升序排序 + @param key 排序关键字 + */ +- (void)orderByAscending:(NSString *)key; + +/*! + 添加一个升序排序关键字。排序优先级由添加关键字的前后顺序决定。 + @param key 排序关键字 + */ +- (void)addAscendingOrder:(NSString *)key; + +/*! + 搜索结果会根据关键字,按降序排序 + @param key 排序关键字 + */ +- (void)orderByDescending:(NSString *)key; + +/*! + 添加一个降序排序关键字。关键字的排序优先级由添加关键字的前后顺序决定。 + @param key 排序关键字 + */ +- (void)addDescendingOrder:(NSString *)key; + +/*! + 根据 NSSortDescriptor 排序搜索结果 + @param sortDescriptor 排序描述符 + */ +- (void)orderBySortDescriptor:(NSSortDescriptor *)sortDescriptor; + +/*! + 根据 NSSortDescriptor 数组排序搜索结果 + @param sortDescriptors NSSortDescriptor 数组 + */ +- (void)orderBySortDescriptors:(NSArray *)sortDescriptors; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVSearchSortBuilder.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVSearchSortBuilder.h new file mode 100644 index 0000000..aab988a --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVSearchSortBuilder.h @@ -0,0 +1,95 @@ +// +// AVSearchSortBuilder.h +// paas +// +// Created by yang chaozhong on 6/13/14. +// Copyright (c) 2014 AVOS. All rights reserved. +// + +#import + +@class AVGeoPoint; + +/*! + * 应用搜索的排序对象产生器 + */ +@interface AVSearchSortBuilder : NSObject + +@property (nonatomic, readonly) NSMutableArray *sortFields; + +/*! + * 新建 AVSearchSortBuilder 实例 + * @return AVSearchSortBuilder 实例 + */ ++ (instancetype)newBuilder; + +/*! + * 按照key升序排序 + * @param key 排序的key + * @param mode 数组或者多值字段的排序模式,min表示取最小值,max取最大值,sum取综合,avg取平均值,默认值是avg + * @param missing 当搜索匹配的文档没有排序的key的时候,设置本选项决定文档放在开头还是末尾,取值是"last"或者"first",默认是"last"表示在末尾 + */ +- (void)orderByAscending:(NSString *)key withMode:(NSString *)mode andMissing:(NSString *)missing; + +/*! + * @see orderByAscending:withMode:andMissing + * @param key + * @param mode + */ +- (void)orderByAscending:(NSString *)key withMode:(NSString *)mode; + +/*! + * @see orderByAscending:withMode:andMissing + * @param key + */ +- (void)orderByAscending:(NSString *)key; + +/*! + * 按照key降序排序 + * + * @param key 排序的key + * @param mode 数组或者多值字段的排序模式,min表示取最小值,max取最大值,sum取综合,avg取平均值,默认值是avg。 + * @param missing 当搜索匹配的文档没有排序的key的时候,设置本选项决定文档放在开头还是末尾,取值是"last"或者"first",默认是"last"表示在末尾。 + */ +- (void)orderByDescending:(NSString *)key withMode:(NSString *)mode andMissing:(NSString *)missing; + +/*! + * @see orderByDescending:withMode:andMissing + * @param key + * @param mode + */ +- (void)orderByDescending:(NSString *)key withMode:(NSString *)mode; + +/*! + * @see orderByDescending:withMode:andMissing + * @param key + */ +- (void)orderByDescending:(NSString *)key; + +/*! + * 按照地理位置信息远近排序,key对应的字段类型必须是GeoPoint。 + * + * @param key 排序的字段key + * @param point GeoPoint经纬度对象 + * @param order 排序顺序,升序"asc",降序"desc",默认升序,也就是从近到远。 + * @param mode 数组或者多值字段的排序模式,min表示取最小值,max取最大值,avg取平均值,默认值是avg。 + * @param unit 距离单位,"m"表示米,"cm"表示厘米,"mm"表示毫米,"km"表示公里,"mi"表示英里,"in"表示英寸,"yd"表示英亩,默认"km"。 + */ +- (void)whereNear:(NSString *)key point:(AVGeoPoint *)point inOrder:(NSString *)order withMode:(NSString *)mode andUnit:(NSString *)unit; + +/*! + * @see whereNear:point:inOrder:withMode:andUnit + * @param key + * @param point + * @param order + */ +- (void)whereNear:(NSString *)key point:(AVGeoPoint *)point inOrder:(NSString *)order; + +/*! + * @see whereNear:point:inOrder:withMode:andUnit + * @param key + * @param point + */ +- (void)whereNear:(NSString *)key point:(AVGeoPoint *)point; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVSession.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVSession.h new file mode 100644 index 0000000..beb24ee --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVSession.h @@ -0,0 +1,223 @@ +// +// AVSession.h +// paas +// +// Created by yang chaozhong on 5/6/14. +// Copyright (c) 2014 AVOS. All rights reserved. +// + +#import +#import "AVSignature.h" +#import "AVConstants.h" +#import "AVGroup.h" +#import "AVMessage.h" + +@protocol AVSessionDelegate; + +typedef enum : NSUInteger { + AVPeerStatusOffline = 1, + AVPeerStatusOnline, +} AVPeerStatus; + +@interface AVSession : NSObject + +@property (nonatomic, weak) id sessionDelegate; +@property (nonatomic, weak) id signatureDelegate; + +/*! + * 自身的peerId + */ +@property (nonatomic, strong) NSString *peerId; + +/*! + * 发送消息Timeout,默认10秒 + */ +@property (nonatomic, assign) int messageTimeout; + +/*! + * 通过peerId获取已经打开的session + * @param peerId session打开时使用的peerId + * @return 返回使用peerId打开的session,不存在或session已关闭返回nil + */ ++ (AVSession *)getSessionWithPeerId:(NSString *)peerId; + +/*! + * 通过peerId获取已经打开的session + * @param peerId session打开时使用的peerId + * @param createAndOpen 如果不存在是否创建 + * @return 返回使用peerId打开的session,不存在或session已关闭返回nil + */ ++ (AVSession *)getSessionWithPeerId:(NSString *)peerId + createAndOpenWhenNotExists:(BOOL)createAndOpen + sessionDelegate:(id)sessionDelegate + signatureDelegate:(id)signatureDelegate; + +/*! + * 打开 session + * @param peerId 用户自己的peer id + */ +- (void)openWithPeerId:(NSString *)peerId; + +/*! + * 打开 session 并关注一组 peer id 数组 + * @param peerId 用户自己的peer id + * @param peerIds 关注的peer id 数组 + */ +- (void)openWithPeerId:(NSString *)peerId watchedPeerIds:(NSArray *)peerIds; + +- (void)open:(NSString *)selfId withPeerIds:(NSArray *)peerIds AVDeprecated("2.6.4"); + +/*! + * 增量关注一组 peerIds + * @param peerIds peer id 数组 + */ +- (void)watchPeerIds:(NSArray *)peerIds; +- (void)watchPeerIds:(NSArray *)peerIds callback:(AVBooleanResultBlock)callback; + +- (BOOL)watchPeers:(NSArray *)peerIds AVDeprecated("2.6.4"); + +/*! + * 取消关注一组 peerIds + * @param peerIds peer id 数组 + */ +- (void)unwatchPeerIds:(NSArray *)peerIds; +- (void)unwatchPeerIds:(NSArray *)peerIds callback:(AVBooleanResultBlock)callback; + +- (void)unwatchPeers:(NSArray *)peerIds AVDeprecated("2.6.4"); + +/*! + * 发送消息 + * @param message 消息对象 + */ +- (void)sendMessage:(AVMessage *)message; + +/*! + * 发送消息 + * @param message 消息对象 + * @param transient 设置为 YES, 当且仅当某个 peer 在线才会收到该条消息,且该条消息既不会存为离线消息,也不会通过消息推送系统发出去. + * 如果设置为 NO, 则该条消息会设法通过各种途径发到 peer 客户端,比如即时通信、推送、离线消息等。 + */ +- (void)sendMessage:(AVMessage *)message transient:(BOOL)transient; + +/*! + * 发送消息 + * @param message 消息对象 + * @param requestReceipt 是否需要回执。 + */ +- (void)sendMessage:(AVMessage *)message requestReceipt:(BOOL)requestReceipt; + +- (void)sendMessage:(NSString *)message isTransient:(BOOL)transient toPeerIds:(NSArray *)peerIds AVDeprecated("2.6.4"); + +/*! + * 关闭 session + */ +- (void)close; + +/*! + * 判断 session 是否 open + * @return 如果 open,则返回 YES, 否则返回 NO + */ +- (BOOL)isOpen; + +/*! + * 判断 session 是否 paused + * @discussion 这里的 paused 是指无网络连接、且已经 open 的 session 所处状态。 + * @return 如果 paused,则返回 YES, 否则返回 NO + */ +- (BOOL)isPaused; + +/*! + * 判断某个 peerId 是否 online + * @param peerId 用户的 peer id + * @return 如果 online,则返回 YES, 否则返回 NO + */ +- (BOOL)peerIdIsOnline:(NSString *)peerId; + +- (BOOL)isOnline:(NSString *)peerId AVDeprecated("2.6.4"); + +/*! + * 判断是否 watch 了某个用户 + * @param peerId 用户的 peer id + * @return 如果已经 watch,返回 YES,否则返回 NO + */ +- (BOOL)peerIdIsWatching:(NSString *)peerId; + +- (BOOL)isWatching:(NSString *)peerId AVDeprecated("2.6.4"); + +/*! + * 获取自己的 peer id + * @return 用户的 peer id + */ +- (NSString *)getSelfPeerId AVDeprecated("2.6.4"); + +/*! + * 获取已经 watch 的那部分用户中,当前在线的用户 + * @return 在线peerId列表 + */ +- (NSArray *)onlinePeerIds; + +- (NSArray *)getOnlinePeers AVDeprecated("2.6.4"); + +/*! + * 获取传入的用户数组中,当前在线的用户 + * @param peerIds 用户 peer id 数组 + * @param callback 回调,这个 callback 应该包含如下参数签名:(NSArray *objects, NSError *error) + */ +- (void)queryOnlinePeerIdsInPeerIds:(NSArray *)peerIds callback:(AVArrayResultBlock)callback; + +- (void)getOnlinePeers:(NSArray *)peerIds withBlock:(AVArrayResultBlock)block AVDeprecated("2.6.4"); + +/*! + * 获取已经 watch 的用户列表 + * @return peerId列表 + */ +- (NSArray *)watchedPeerIds; + +- (NSArray *)getAllPeers AVDeprecated("2.6.4"); + +/*! + * 根据groupId构建一个AVGroup对象 + * @return 如果已经存在groupId的group对象,则返回该对象,否则新建一个对象 + */ +- (AVGroup *)getGroup:(NSString *)groupId AVDeprecated("2.6.4"); + +@end + +@protocol AVSessionDelegate +@optional +- (void)sessionOpened:(AVSession *)session; +- (void)sessionPaused:(AVSession *)session; +- (void)sessionResumed:(AVSession *)session; +- (void)sessionFailed:(AVSession *)session error:(NSError *)error; +- (void)session:(AVSession *)session didReceiveMessage:(AVMessage *)message; +- (void)session:(AVSession *)session didReceiveStatus:(AVPeerStatus)status peerIds:(NSArray *)peerIds; +/*! + * 消息发送成功 + * 回调表示消息已经成功发送到服务器 + */ +- (void)session:(AVSession *)session messageSendFinished:(AVMessage *)message; + +/*! + * 消息发送失败 + * 回调表示消息长时间没得到服务器确认或网络故障 + */ +- (void)session:(AVSession *)session messageSendFailed:(AVMessage *)message error:(NSError *)error; + +/*! + * 消息到达接收方,需要消息设置requestReceipt为YES,默认为NO + * 回调表示消息已经发送到接收方 + */ +- (void)session:(AVSession *)session messageArrived:(AVMessage *)message; + + +- (void)onSessionOpen:(AVSession *)session AVDeprecated("2.6.4"); +- (void)onSessionPaused:(AVSession *)session AVDeprecated("2.6.4"); +- (void)onSessionResumed:(AVSession *)seesion AVDeprecated("2.6.4"); +- (void)onSessionMessage:(AVSession *)session message:(NSString *)message peerId:(NSString *)peerId AVDeprecated("2.6.4"); +- (void)onSessionMessageSent:(AVSession *)session message:(NSString *)message toPeerIds:(NSArray *)peerIds AVDeprecated("2.6.4"); +- (void)onSessionMessageFailure:(AVSession *)session message:(NSString *)message toPeerIds:(NSArray *)peerIds AVDeprecated("2.6.4"); +- (void)onSessionStatusOnline:(AVSession *)session peers:(NSArray *)peerIds AVDeprecated("2.6.4"); +- (void)onSessionStatusOffline:(AVSession *)session peers:(NSArray *)peerId AVDeprecated("2.6.4"); +- (void)onSessionError:(AVSession *)session withException:(NSException *)exception AVDeprecated("2.6.4"); + +@end \ No newline at end of file diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVSignature.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVSignature.h new file mode 100644 index 0000000..783dffb --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVSignature.h @@ -0,0 +1,33 @@ +// +// AVSignature.h +// paas +// +// Created by yang chaozhong on 5/15/14. +// Copyright (c) 2014 AVOS. All rights reserved. +// + +#import +#import "AVConstants.h" + +@interface AVSignature : NSObject + +@property (nonatomic, strong) NSString *signature; +@property (nonatomic) int64_t timestamp; +@property (nonatomic, strong) NSString *nonce; +@property (nonatomic, strong) NSString *action AVDeprecated("2.6.4"); +@property (nonatomic, strong) NSArray *signedPeerIds; +@property (nonatomic, strong) NSError *error; + +@end + +@protocol AVSignatureDelegate +@optional +- (AVSignature *)signatureForPeerWithPeerId:(NSString *)peerId watchedPeerIds:(NSArray *)watchedPeerIds action:(NSString *)action; +- (AVSignature *)signatureForGroupWithPeerId:(NSString *)peerId groupId:(NSString *)groupId groupPeerIds:(NSArray *)groupPeerIds action:(NSString *)action; + + +- (AVSignature *)createSignature:(NSString *)peerId watchedPeerIds:(NSArray *)watchedPeerIds AVDeprecated("2.6.4"); +- (AVSignature *)createSessionSignature:(NSString *)peerId watchedPeerIds:(NSArray *)watchedPeerIds action:(NSString *)action AVDeprecated("2.6.4"); +- (AVSignature *)createGroupSignature:(NSString *)peerId groupPeerIds:(NSArray *)groupPeerIds action:(NSString *)action AVDeprecated("2.6.4"); +- (AVSignature *)createGroupSignature:(NSString *)peerId groupId:(NSString *)groupId groupPeerIds:(NSArray *)groupPeerIds action:(NSString *)action AVDeprecated("2.6.4"); +@end \ No newline at end of file diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVStatus.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVStatus.h new file mode 100644 index 0000000..9414f35 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVStatus.h @@ -0,0 +1,287 @@ +// +// AVStatus.h +// paas +// +// Created by Travis on 13-12-23. +// Copyright (c) 2013年 AVOS. All rights reserved. +// + +#import + +#import "AVUser.h" +#import "AVQuery.h" + + +extern NSString * const kAVStatusTypeTimeline; +extern NSString * const kAVStatusTypePrivateMessage; + +typedef NSString AVStatusType; + +@class AVStatus,AVStatusQuery; +typedef void (^AVStatusResultBlock)(AVStatus *status, NSError *error); + + +/** + * 发送和获取状态更新和消息 + */ +@interface AVStatus : NSObject + +/** + * 此状态的ID 具有唯一性 + */ +@property(nonatomic,readonly) NSString *objectId; + +/** + * 此状态在用户某个Type的收件箱中的ID + * @warning 仅用于分片查询,不具有唯一性,同一条状态在不同的inbox里的messageId也是不同的 + */ +@property(nonatomic,readonly) NSUInteger messageId; + +/** + * 状态的创建时间 + */ +@property(nonatomic,readonly) NSDate *createdAt; + +/** + * 状态的内容 + */ +@property(nonatomic,strong) NSDictionary *data; + +/** + * 状态的发出"人",可以是AVUser 也可以是任意的AVObject,也可能是nil + */ +@property(nonatomic,strong) AVObject *source; + +/** + * 状态类型,默认是kAVStatusTypeTimeline, 可以是任意自定义字符串 + */ +@property(nonatomic,strong) AVStatusType *type; + + + +/** @name 针对某条状态的操作 */ + +/** + * 获取某条状态 + * + * @param objectId 状态的objectId + * @param callback 回调结果 + */ ++(void)getStatusWithID:(NSString *)objectId andCallback:(AVStatusResultBlock)callback; + +/** + * 删除当前用户发布的某条状态 + * + * @param objectId 状态的objectId + * @param callback 回调结果 + */ ++(void)deleteStatusWithID:(NSString*)objectId andCallback:(AVBooleanResultBlock)callback; + +/** + * 设置受众群体 + * + * @param query 限定条件 + */ +-(void)setQuery:(AVQuery*)query; + + +/** @name 获取状态 */ + +/** + * 获取当前用户收件箱里的状态 + * + * @param inboxType 收件箱类型 + * @return 用于查询的AVStatusQuery + */ ++(AVStatusQuery*)inboxQuery:(AVStatusType *)inboxType; + +/** + * 获取当前用户发出的状态 + * + * @return 用于查询的AVStatusQuery + */ ++(AVStatusQuery*)statusQuery; + + +/** + * 获取当前用户特定类型未读状态条数 + * @param type 收件箱类型 + * @param callback 回调结果 + */ ++(void)getUnreadStatusesCountWithType:(AVStatusType*)type andCallback:(AVIntegerResultBlock)callback; + +/** + * 获取当前用户接收到的状态 + * @param type 状态类型,默认是kAVStatusTypeTimeline, 可以是任意自定义字符串 + * @param skip 跳过条数 + * @param limit 需要返回的条数 默认`100`,最大`100` + * @param callback 回调结果 + */ ++(void)getStatusesWithType:(AVStatusType*)type skip:(NSUInteger)skip limit:(NSUInteger)limit andCallback:(AVArrayResultBlock)callback AVDeprecated("2.3.2以后不再需要,请使用inboxQuery类方法"); + +/** + * 获取当前用户发布的状态 + * + * @param type 状态类型,默认是kAVStatusTypeTimeline, 可以是任意自定义字符串 + * @param skip 跳过条数 + * @param limit 需要返回的条数 默认`100`,最大`100` + * @param callback 回调结果 + */ ++(void) getStatusesFromCurrentUserWithType:(AVStatusType*)type skip:(NSUInteger)skip limit:(NSUInteger)limit andCallback:(AVArrayResultBlock)callback AVDeprecated("2.3.2以后不再需要,请使用statusQuery类方法"); + +/** + * 通过用户ID获取其发布的公开的状态列表 + * + * @param userId 用户的objectId + * @param skip 跳过条数 + * @param limit 需要返回的条数 默认`100`,最大`100` + * @param callback 回调结果 + */ ++(void) getStatusesFromUser:(NSString*)userId skip:(NSUInteger)skip limit:(NSUInteger)limit andCallback:(AVArrayResultBlock)callback AVDeprecated("2.3.2以后不再需要,请使用statusQuery"); + +/** @name 发送状态 */ + +/** + * 向用户的粉丝发送新状态 + * + * @param status 状态 + * @param callback 回调结果 + */ ++(void)sendStatusToFollowers:(AVStatus*)status andCallback:(AVBooleanResultBlock)callback; + +/** + * 向用户发私信 + * + * @param status 状态 + * @param userId 接受私信的用户objectId + * @param callback 回调结果 + */ ++(void)sendPrivateStatus:(AVStatus*)status toUserWithID:(NSString*)userId andCallback:(AVBooleanResultBlock)callback; + +/** + * 发送 + * + * @param block 回调结果 + */ +-(void)sendInBackgroundWithBlock:(AVBooleanResultBlock)block; +@end + +/** + * 用户好友关系 + */ +@interface AVUser(Friendship) + +/* @name 好友关系 */ + +/** + * 获取用户粉丝AVQuery + * + * @param userObjectId 用户ID + * + * @return 用于查询的AVQuery + */ ++(AVQuery*)followerQuery:(NSString*)userObjectId; + +/** + * 获取本用户粉丝AVQuery + * + * @return 用于查询的AVQuery + */ +-(AVQuery*)followerQuery; + +/** + * 获取用户关注AVQuery + * + * @param userObjectId 用户ID + * + * @return 用于查询的AVQuery + */ ++(AVQuery*)followeeQuery:(NSString*)userObjectId; + +/** + * 获取本用户关注AVQuery + * + * @return 用于查询的AVQuery + */ +-(AVQuery*)followeeQuery; + +/** + * 通过ID来关注其他用户 + * @warning 如果需要被关注者收到消息 需要手动给他发送一条AVStatus. + * @param userId 要关注的用户objectId + * @param callback 回调结果 + */ +-(void)follow:(NSString*)userId andCallback:(AVBooleanResultBlock)callback; + +/** + * 通过ID来关注其他用户 + * @warning 如果需要被关注者收到消息 需要手动给他发送一条AVStatus. + * @param userId 要关注的用户objectId + * @param dictionary 添加的自定义属性 + * @param callback 回调结果 + */ +-(void)follow:(NSString*)userId userDictionary:(NSDictionary *)dictionary andCallback:(AVBooleanResultBlock)callback; + +/** + * 通过ID来取消关注其他用户 + * + * @param userId 要取消关注的用户objectId + * @param callback 回调结果 + * + */ +-(void)unfollow:(NSString*)userId andCallback:(AVBooleanResultBlock)callback; + +/** + * 获取当前用户粉丝的列表 + * + * @param callback 回调结果 + */ +-(void)getFollowers:(AVArrayResultBlock)callback; + +/** + * 获取当前用户所关注的列表 + * + * @param callback 回调结果 + * + */ +-(void)getFollowees:(AVArrayResultBlock)callback; + +/** + * 同时获取当前用户的粉丝和关注列表 + * + * @param callback 回调结果, 列表字典包含`followers`数组和`followees`数组 + */ +-(void)getFollowersAndFollowees:(AVDictionaryResultBlock)callback; + + +@end + +/** + * 查询AVStatus + */ +@interface AVStatusQuery : AVQuery +/** + * 设置起始messageId, 仅用于Inbox中的查询 + */ +@property(nonatomic, assign) NSUInteger sinceId; + +/** + * 设置最大messageId, 仅用于Inbox中的查询 + */ +@property(nonatomic, assign) NSUInteger maxId; + +/** + * 设置查询的Inbox的所有者, 即查询这个"人"的收件箱 + */ +@property(nonatomic, strong) AVObject *owner; + +/** + * 设置查询的Inbox的类型 + */ +@property(nonatomic, copy) AVStatusType *inboxType; + +/** + * 查询结果是否已经到结尾 + */ +@property(nonatomic)BOOL end; +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVSubclassing.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVSubclassing.h new file mode 100644 index 0000000..0db720c --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVSubclassing.h @@ -0,0 +1,58 @@ +// +// AVSubclassing.h +// paas +// +// Created by Summer on 13-4-2. +// Copyright (c) 2013年 AVOS. All rights reserved. +// + +#import + +@class AVQuery; + +/*! + If a subclass of AVObject conforms to AVSubclassing and calls registerSubclass, LeanCloud will be able to use that class as the native class for a LeanCloud object. + + Classes conforming to this protocol should subclass AVObject and include AVObject+Subclass.h in their implementation file. This ensures the methods in the Subclass category of AVObject are exposed in its subclasses only. + */ +@protocol AVSubclassing + +@optional + +/*! The name of the class as seen in the REST API. */ ++ (NSString *)parseClassName; + +/*! + Constructs an object of the most specific class known to implement parseClassName. + This method takes care to help AVObject subclasses be subclassed themselves. + For example, [AVUser object] returns a AVUser by default but will return an + object of a registered subclass instead if one is known. + A default implementation is provided by AVObject which should always be sufficient. + @return the object that is instantiated. + */ ++ (instancetype)object; + +/*! + Creates a reference to an existing AVObject for use in creating associations between AVObjects. Calling isDataAvailable on this + object will return NO until fetchIfNeeded or refresh has been called. No network request will be made. + A default implementation is provided by AVObject which should always be sufficient. + @param objectId The object id for the referenced object. + @return A AVObject without data. + */ ++ (instancetype)objectWithoutDataWithObjectId:(NSString *)objectId; + + + +/*! + Create a query which returns objects of this type. + A default implementation is provided by AVObject which should always be sufficient. + */ ++ (AVQuery *)query; + +/*! + Lets LeanCloud know this class should be used to instantiate all objects with class type parseClassName. + This method must be called before [AVOSCloud setApplicationId:clientKey:] + */ ++ (void)registerSubclass; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVUser.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVUser.h new file mode 100644 index 0000000..be27cd2 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Headers/AVUser.h @@ -0,0 +1,417 @@ +// AVUser.h +// Copyright 2013 AVOS, Inc. All rights reserved. + +#import +#import "AVConstants.h" +#import "AVObject.h" +#import "AVSubclassing.h" + +@class AVQuery; + +/*! +A LeanCloud Framework User Object that is a local representation of a user persisted to the LeanCloud. This class + is a subclass of a AVObject, and retains the same functionality of a AVObject, but also extends it with various + user specific methods, like authentication, signing up, and validation uniqueness. + + Many APIs responsible for linking a AVUser with Facebook or Twitter have been deprecated in favor of dedicated + utilities for each social network. See AVFacebookUtils and AVTwitterUtils for more information. + */ + + +@interface AVUser : AVObject + +/** @name Accessing the Current User */ + +/*! + Gets the currently logged in user from disk and returns an instance of it. + @return a AVUser that is the currently logged in user. If there is none, returns nil. + */ ++ (instancetype)currentUser; + +/*! + * change the current login user manually. + * @param newUser 新的 AVUser 实例 + * @param save 是否需要把 newUser 保存到本地缓存。如果 newUser==nil && save==YES,则会清除本地缓存 + * Note: 请注意不要随意调用这个函数! + */ ++(void)changeCurrentUser:(AVUser *)newUser + save:(BOOL)save; + +/// The session token for the AVUser. This is set by the server upon successful authentication. +@property (nonatomic, retain) NSString *sessionToken; + +/// Whether the AVUser was just created from a request. This is only set after a Facebook or Twitter login. +@property (readonly, assign) BOOL isNew; + +/*! + Whether the user is an authenticated object for the device. An authenticated AVUser is one that is obtained via + a signUp or logIn method. An authenticated object is required in order to save (with altered values) or delete it. + @return whether the user is authenticated. + */ +- (BOOL)isAuthenticated; + +/** @name Creating a New User */ + +/*! + Creates a new AVUser object. + @return a new AVUser object. + */ ++ (instancetype)user; + +/*! + Enables automatic creation of anonymous users. After calling this method, [AVUser currentUser] will always have a value. + The user will only be created on the server once the user has been saved, or once an object with a relation to that user or + an ACL that refers to the user has been saved. + + Note: saveEventually will not work if an item being saved has a relation to an automatic user that has never been saved. + */ ++ (void)enableAutomaticUser; + +/// The username for the AVUser. +@property (nonatomic, retain) NSString *username; + +/** + The password for the AVUser. This will not be filled in from the server with + the password. It is only meant to be set. + */ +@property (nonatomic, retain) NSString *password; + +/// The email for the AVUser. +@property (nonatomic, retain) NSString *email; + +@property (nonatomic, strong) NSString *mobilePhoneNumber; + +@property (nonatomic, readonly) BOOL mobilePhoneVerified; + +/** + * 请求重发验证邮件 + * 如果用户邮箱没有得到验证或者用户修改了邮箱, 通过本方法重新发送验证邮件. + * + * @warning 为防止滥用,同一个邮件地址,1分钟内只能发1次! + * + * @param email 邮件地址 + * @param block 回调结果 + */ ++(void)requestEmailVerify:(NSString*)email withBlock:(AVBooleanResultBlock)block; + +/*! + * 请求手机号码验证 + * 发送短信到指定的手机上,内容有6位数字验证码。验证码10分钟内有效。 + * @param phoneNumber 11位电话号码 + * @param block 回调结果 + */ ++(void)requestMobilePhoneVerify:(NSString *)phoneNumber withBlock:(AVBooleanResultBlock)block; + +/*! + * 验证手机验证码 + * 发送验证码给服务器进行验证。 + * @param code 6位手机验证码 + * @param block 回调结果 + */ ++(void)verifyMobilePhone:(NSString *)code withBlock:(AVBooleanResultBlock)block; + +/*! + Signs up the user. Make sure that password and username are set. This will also enforce that the username isn't already taken. + @param error Error object to set on error. + @return whether the sign up was successful. + */ +- (BOOL)signUp:(NSError **)error; + +/*! + Signs up the user asynchronously. Make sure that password and username are set. This will also enforce that the username isn't already taken. + @param block The block to execute. The block should have the following argument signature: (BOOL succeeded, NSError *error) + */ +- (void)signUpInBackgroundWithBlock:(AVBooleanResultBlock)block; + +/*! + update user's password + @param oldPassword old password + @param newPassword new password + @param block The block to execute. The block should have the following argument signature: (id object, NSError *error) + @warning the user must have logged in, and provide both oldPassword and newPassword, otherwise can't update password successfully. + */ +- (void)updatePassword:(NSString *)oldPassword newPassword:(NSString *)newPassword block:(AVIdResultBlock)block; + +/*! + Makes a request to login a user with specified credentials. Returns an + instance of the successfully logged in AVUser. This will also cache the user + locally so that calls to userFromCurrentUser will use the latest logged in user. + @param username The username of the user. + @param password The password of the user. + @param error The error object to set on error. + @return an instance of the AVUser on success. If login failed for either wrong password or wrong username, returns nil. + */ ++ (instancetype)logInWithUsername:(NSString *)username + password:(NSString *)password + error:(NSError **)error; + +/*! + Makes an asynchronous request to log in a user with specified credentials. + Returns an instance of the successfully logged in AVUser. This will also cache + the user locally so that calls to userFromCurrentUser will use the latest logged in user. + @param username The username of the user. + @param password The password of the user. + @param block The block to execute. The block should have the following argument signature: (AVUser *user, NSError *error) + */ ++ (void)logInWithUsernameInBackground:(NSString *)username + password:(NSString *)password + block:(AVUserResultBlock)block; + +//phoneNumber + password +/*! + * 使用手机号码和密码登录 + * @param phoneNumber 11位电话号码 + * @param password 密码 + * @param error 发生错误通过此参数返回 + */ ++ (instancetype)logInWithMobilePhoneNumber:(NSString *)phoneNumber + password:(NSString *)password + error:(NSError **)error; +/*! + * 使用手机号码和密码登录 + * @param phoneNumber 11位电话号码 + * @param password 密码 + * @param block 回调结果 + */ ++ (void)logInWithMobilePhoneNumberInBackground:(NSString *)phoneNumber + password:(NSString *)password + block:(AVUserResultBlock)block; +//phoneNumber + smsCode + +/*! + * 请求登录码验证 + * 发送短信到指定的手机上,内容有6位数字验证码。验证码10分钟内有效。 + * @param phoneNumber 11位电话号码 + * @param block 回调结果 + */ ++(void)requestLoginSmsCode:(NSString *)phoneNumber withBlock:(AVBooleanResultBlock)block; + +/*! + * 使用手机号码和验证码登录 + * @param phoneNumber 11位电话号码 + * @param code 6位验证码 + * @param error 发生错误通过此参数返回 + */ ++ (instancetype)logInWithMobilePhoneNumber:(NSString *)phoneNumber + smsCode:(NSString *)code + error:(NSError **)error; + +/*! + * 使用手机号码和验证码登录 + * @param phoneNumber 11位电话号码 + * @param code 6位验证码 + * @param block 回调结果 + */ ++ (void)logInWithMobilePhoneNumberInBackground:(NSString *)phoneNumber + smsCode:(NSString *)code + block:(AVUserResultBlock)block; + + +/*! + * 使用手机号码和验证码注册或登录 + * 用于手机号直接注册用户,需要使用 [AVOSCloud requestSmsCodeWithPhoneNumber:callback:] 获取验证码 + * @param phoneNumber 11位电话号码 + * @param code 6位验证码 + * @param error 发生错误通过此参数返回 + */ ++ (instancetype)signUpOrLoginWithMobilePhoneNumber:(NSString *)phoneNumber + smsCode:(NSString *)code + error:(NSError **)error; + +/*! + * 使用手机号码和验证码注册或登录 + * 用于手机号直接注册用户,需要使用 [AVOSCloud requestSmsCodeWithPhoneNumber:callback:] 获取验证码 + * @param phoneNumber 11位电话号码 + * @param code 6位验证码 + * @param block 回调结果 + */ ++ (void)signUpOrLoginWithMobilePhoneNumberInBackground:(NSString *)phoneNumber + smsCode:(NSString *)code + block:(AVUserResultBlock)block; + + +/** @name Logging Out */ + +/*! + Logs out the currently logged in user on disk. + */ ++ (void)logOut; + +/** @name Requesting a Password Reset */ + + +/*! + Send a password reset request for a specified email and sets an error object. If a user + account exists with that email, an email will be sent to that address with instructions + on how to reset their password. + @param email Email of the account to send a reset password request. + @param error Error object to set on error. + @return true if the reset email request is successful. False if no account was found for the email address. + */ ++ (BOOL)requestPasswordResetForEmail:(NSString *)email + error:(NSError **)error; + +/*! + Send a password reset request asynchronously for a specified email. + If a user account exists with that email, an email will be sent to that address with instructions + on how to reset their password. + @param email Email of the account to send a reset password request. + @param block The block to execute. The block should have the following argument signature: (BOOL succeeded, NSError *error) + */ ++ (void)requestPasswordResetForEmailInBackground:(NSString *)email + block:(AVBooleanResultBlock)block; + +/*! + * 使用手机号请求密码重置,需要用户绑定手机号码 + * 发送短信到指定的手机上,内容有6位数字验证码。验证码10分钟内有效。 + * @param phoneNumber 11位电话号码 + * @param block 回调结果 + */ ++(void)requestPasswordResetWithPhoneNumber:(NSString *)phoneNumber + block:(AVBooleanResultBlock)block; + +/*! + * 使用验证码重置密码 + * @param code 6位验证码 + * @param password 新密码 + * @param block 回调结果 + */ ++(void)resetPasswordWithSmsCode:(NSString *)code + newPassword:(NSString *)password + block:(AVBooleanResultBlock)block; + +/*! + * 用 sessionToken 来登录用户 + * @param sessionToken sessionToken + * @param block 回调结果 + */ ++ (void)becomeWithSessionTokenInBackground:(NSString *)sessionToken block:(AVUserResultBlock)block; +/*! + * 用 sessionToken 来登录用户 + * @param sessionToken sessionToken + * @param error 回调错误 + * @return 登录的用户对象 + */ ++ (instancetype)becomeWithSessionToken:(NSString *)sessionToken error:(NSError **)error; + +/** @name Querying for Users */ + +/*! + Creates a query for AVUser objects. + */ ++ (AVQuery *)query; +@end + +@interface AVUser (Deprecated) + +/*! + Signs up the user. Make sure that password and username are set. This will also enforce that the username isn't already taken. + @return true if the sign up was successful. + */ +- (BOOL)signUp AVDeprecated("2.6.10"); + +/*! + Signs up the user asynchronously. Make sure that password and username are set. This will also enforce that the username isn't already taken. + */ +- (void)signUpInBackground AVDeprecated("2.6.10"); + +/*! + Signs up the user asynchronously. Make sure that password and username are set. This will also enforce that the username isn't already taken. + @param target Target object for the selector. + @param selector The selector that will be called when the asynchrounous request is complete. It should have the following signature: `(void)callbackWithResult:(NSNumber *)result error:(NSError **)error`. error will be nil on success and set if there was an error. `[result boolValue]` will tell you whether the call succeeded or not. + */ +- (void)signUpInBackgroundWithTarget:(id)target selector:(SEL)selector AVDeprecated("2.6.10"); + +/*! + update user's password + @param oldPassword old password + @param newPassword new password + @param target Target object for the selector. + @param selector The selector that will be called when the asynchrounous request is complete. It should have the following signature: `(void)callbackWithResult:(id)object error:(NSError *)error`. error will be nil on success and set if there was an error. + @warning the user must have logged in, and provide both oldPassword and newPassword, otherwise can't update password successfully. + */ +- (void)updatePassword:(NSString *)oldPassword newPassword:(NSString *)newPassword withTarget:(id)target selector:(SEL)selector AVDeprecated("2.6.10"); + +/*! + Makes a request to login a user with specified credentials. Returns an instance + of the successfully logged in AVUser. This will also cache the user locally so + that calls to userFromCurrentUser will use the latest logged in user. + @param username The username of the user. + @param password The password of the user. + @return an instance of the AVUser on success. If login failed for either wrong password or wrong username, returns nil. + */ ++ (instancetype)logInWithUsername:(NSString *)username + password:(NSString *)password AVDeprecated("2.6.10"); + +/*! + Makes an asynchronous request to login a user with specified credentials. + Returns an instance of the successfully logged in AVUser. This will also cache + the user locally so that calls to userFromCurrentUser will use the latest logged in user. + @param username The username of the user. + @param password The password of the user. + */ ++ (void)logInWithUsernameInBackground:(NSString *)username + password:(NSString *)password AVDeprecated("2.6.10"); + +/*! + Makes an asynchronous request to login a user with specified credentials. + Returns an instance of the successfully logged in AVUser. This will also cache + the user locally so that calls to userFromCurrentUser will use the latest logged in user. + The selector for the callback should look like: myCallback:(AVUser *)user error:(NSError **)error + @param username The username of the user. + @param password The password of the user. + @param target Target object for the selector. + @param selector The selector that will be called when the asynchrounous request is complete. + */ ++ (void)logInWithUsernameInBackground:(NSString *)username + password:(NSString *)password + target:(id)target + selector:(SEL)selector AVDeprecated("2.6.10"); + ++ (instancetype)logInWithMobilePhoneNumber:(NSString *)phoneNumber + password:(NSString *)password AVDeprecated("2.6.10"); ++ (void)logInWithMobilePhoneNumberInBackground:(NSString *)phoneNumber + password:(NSString *)password AVDeprecated("2.6.10"); ++ (void)logInWithMobilePhoneNumberInBackground:(NSString *)phoneNumber + password:(NSString *)password + target:(id)target + selector:(SEL)selector AVDeprecated("2.6.10"); + ++ (instancetype)logInWithMobilePhoneNumber:(NSString *)phoneNumber + smsCode:(NSString *)code AVDeprecated("2.6.10"); ++ (void)logInWithMobilePhoneNumberInBackground:(NSString *)phoneNumber + smsCode:(NSString *)code AVDeprecated("2.6.10"); ++ (void)logInWithMobilePhoneNumberInBackground:(NSString *)phoneNumber + smsCode:(NSString *)code + target:(id)target + selector:(SEL)selector AVDeprecated("2.6.10"); + +/*! + Send a password reset request for a specified email. If a user account exists with that email, + an email will be sent to that address with instructions on how to reset their password. + @param email Email of the account to send a reset password request. + @return true if the reset email request is successful. False if no account was found for the email address. + */ ++ (BOOL)requestPasswordResetForEmail:(NSString *)email AVDeprecated("2.6.10"); + +/*! + Send a password reset request asynchronously for a specified email and sets an + error object. If a user account exists with that email, an email will be sent to + that address with instructions on how to reset their password. + @param email Email of the account to send a reset password request. + */ ++ (void)requestPasswordResetForEmailInBackground:(NSString *)email AVDeprecated("2.6.10"); + +/*! + Send a password reset request asynchronously for a specified email and sets an error object. + If a user account exists with that email, an email will be sent to that address with instructions + on how to reset their password. + @param email Email of the account to send a reset password request. + @param target Target object for the selector. + @param selector The selector that will be called when the asynchronous request is complete. It should have the following signature: (void)callbackWithResult:(NSNumber *)result error:(NSError **)error. error will be nil on success and set if there was an error. [result boolValue] will tell you whether the call succeeded or not. + */ ++ (void)requestPasswordResetForEmailInBackground:(NSString *)email + target:(id)target + selector:(SEL)selector AVDeprecated("2.6.10"); + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Info.plist b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Info.plist new file mode 100644 index 0000000..332fc3d Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Info.plist differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Modules/module.modulemap b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Modules/module.modulemap new file mode 100644 index 0000000..da9941d --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module AVOSCloud { + umbrella header "AVOSCloud.h" + + export * + module * { export * } +} diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/_CodeSignature/CodeResources b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/_CodeSignature/CodeResources new file mode 100644 index 0000000..452137e --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloud.framework/_CodeSignature/CodeResources @@ -0,0 +1,343 @@ + + + + + files + + Headers/AVACL.h + + Z8YkLbZXif6qY9itHKYY0jp0OFU= + + Headers/AVAnalytics.h + + 9518gwrn1dcJ+hwhu97wOy8rxuc= + + Headers/AVAnonymousUtils.h + + /RuSb2XE/NwU1QJkj4IINW5GeTo= + + Headers/AVCloud.h + + qGSc0h8pymQPlim6xJd+fLppflk= + + Headers/AVCloudQueryResult.h + + u2jFl+EhYjfuJPEq38+DbtDxnPg= + + Headers/AVConstants.h + + 00we76O5BSVJIL8RoCwZ6gGcb48= + + Headers/AVFile.h + + woA7P1wTMmYj5Nag5ABosiyGdNo= + + Headers/AVGeoPoint.h + + tyey0vp+lYKNQ2k23e8ns3WQhGU= + + Headers/AVGroup.h + + WjxV1z/pSNKMptuOrrHRNeRLhl8= + + Headers/AVHistoryMessage.h + + KM08k2LUaBCWPMlkitni9hKNzws= + + Headers/AVHistoryMessageQuery.h + + fYWlgdK8V2D5SFv/n/WqH42o1Fc= + + Headers/AVInstallation.h + + h/jQ9Blctrlc3b/D0ePWdHU+a84= + + Headers/AVLogger.h + + zQWRvCrfb9Dj5rNMi24kCBS4p6o= + + Headers/AVMessage.h + + II+gouj6j1rB3Nd/+Bra/X5olUk= + + Headers/AVOSCloud.h + + gp2BYF1HJmUbMB/E7clIuwMKc6A= + + Headers/AVObject+Subclass.h + + 4+jWKVyU1b+mNjN0bY4NTkExWg0= + + Headers/AVObject.h + + eH6U5MjGxz0rL+xp2CkE5zmjn5E= + + Headers/AVPush.h + + LXD4Dy5XAz0f7a0FmC8DGG9SwOo= + + Headers/AVQuery.h + + 4tyfDwLhjjmwbEfKg2KrNkKLApQ= + + Headers/AVRelation.h + + q8gddRJIWzSc9PEiJKuJlncQznc= + + Headers/AVRole.h + + LZQun08Ey+PvRNznz52V6bO8FUo= + + Headers/AVSearchQuery.h + + arw3hE2H/yTSZoOPtwhyVvE/2sU= + + Headers/AVSearchSortBuilder.h + + MEii+83uBkVBvXbOOkHToa29WH4= + + Headers/AVSession.h + + sNKcwRkyQX8eqOqZvYAaJ3pja28= + + Headers/AVSignature.h + + PEwNUPW9Ru4RpJm/er7/vPWI3Nc= + + Headers/AVStatus.h + + 6TzJreEA4MSyrkaFFeJH+joK/oM= + + Headers/AVSubclassing.h + + VeyNZPH7J+OzoEozHlb6/h0WNOA= + + Headers/AVUser.h + + VtVsJagh3wKxyn/wig6xOudh2LU= + + Info.plist + + 2+9XAbZAPQk75dhz5dLWKYFD5NA= + + Modules/module.modulemap + + yVkok3sakWK5zr8MfKAL9j4TPAw= + + + files2 + + Headers/AVACL.h + + Z8YkLbZXif6qY9itHKYY0jp0OFU= + + Headers/AVAnalytics.h + + 9518gwrn1dcJ+hwhu97wOy8rxuc= + + Headers/AVAnonymousUtils.h + + /RuSb2XE/NwU1QJkj4IINW5GeTo= + + Headers/AVCloud.h + + qGSc0h8pymQPlim6xJd+fLppflk= + + Headers/AVCloudQueryResult.h + + u2jFl+EhYjfuJPEq38+DbtDxnPg= + + Headers/AVConstants.h + + 00we76O5BSVJIL8RoCwZ6gGcb48= + + Headers/AVFile.h + + woA7P1wTMmYj5Nag5ABosiyGdNo= + + Headers/AVGeoPoint.h + + tyey0vp+lYKNQ2k23e8ns3WQhGU= + + Headers/AVGroup.h + + WjxV1z/pSNKMptuOrrHRNeRLhl8= + + Headers/AVHistoryMessage.h + + KM08k2LUaBCWPMlkitni9hKNzws= + + Headers/AVHistoryMessageQuery.h + + fYWlgdK8V2D5SFv/n/WqH42o1Fc= + + Headers/AVInstallation.h + + h/jQ9Blctrlc3b/D0ePWdHU+a84= + + Headers/AVLogger.h + + zQWRvCrfb9Dj5rNMi24kCBS4p6o= + + Headers/AVMessage.h + + II+gouj6j1rB3Nd/+Bra/X5olUk= + + Headers/AVOSCloud.h + + gp2BYF1HJmUbMB/E7clIuwMKc6A= + + Headers/AVObject+Subclass.h + + 4+jWKVyU1b+mNjN0bY4NTkExWg0= + + Headers/AVObject.h + + eH6U5MjGxz0rL+xp2CkE5zmjn5E= + + Headers/AVPush.h + + LXD4Dy5XAz0f7a0FmC8DGG9SwOo= + + Headers/AVQuery.h + + 4tyfDwLhjjmwbEfKg2KrNkKLApQ= + + Headers/AVRelation.h + + q8gddRJIWzSc9PEiJKuJlncQznc= + + Headers/AVRole.h + + LZQun08Ey+PvRNznz52V6bO8FUo= + + Headers/AVSearchQuery.h + + arw3hE2H/yTSZoOPtwhyVvE/2sU= + + Headers/AVSearchSortBuilder.h + + MEii+83uBkVBvXbOOkHToa29WH4= + + Headers/AVSession.h + + sNKcwRkyQX8eqOqZvYAaJ3pja28= + + Headers/AVSignature.h + + PEwNUPW9Ru4RpJm/er7/vPWI3Nc= + + Headers/AVStatus.h + + 6TzJreEA4MSyrkaFFeJH+joK/oM= + + Headers/AVSubclassing.h + + VeyNZPH7J+OzoEozHlb6/h0WNOA= + + Headers/AVUser.h + + VtVsJagh3wKxyn/wig6xOudh2LU= + + Modules/module.modulemap + + yVkok3sakWK5zr8MfKAL9j4TPAw= + + + rules + + ^ + + ^.*\.lproj/ + + optional + + weight + 1000 + + ^.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^version.plist$ + + + rules2 + + .*\.dSYM($|/) + + weight + 11 + + ^ + + weight + 20 + + ^(.*/)?\.DS_Store$ + + omit + + weight + 2000 + + ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ + + nested + + weight + 10 + + ^.* + + ^.*\.lproj/ + + optional + + weight + 1000 + + ^.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Info\.plist$ + + omit + + weight + 20 + + ^PkgInfo$ + + omit + + weight + 20 + + ^[^/]+$ + + nested + + weight + 10 + + ^embedded\.provisionprofile$ + + weight + 20 + + ^version\.plist$ + + weight + 20 + + + + diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/AVOSCloudIM b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/AVOSCloudIM new file mode 100755 index 0000000..4a7346c Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/AVOSCloudIM differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMAudioMessage.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMAudioMessage.h new file mode 100644 index 0000000..42fa806 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMAudioMessage.h @@ -0,0 +1,16 @@ +// +// AVIMAudioMessage.h +// AVOSCloudIM +// +// Created by Qihe Bian on 1/12/15. +// Copyright (c) 2015 LeanCloud Inc. All rights reserved. +// + +#import "AVIMTypedMessage.h" + +@interface AVIMAudioMessage : AVIMTypedMessage +@property(nonatomic, readonly)uint64_t size; //文件大小,单位:字节 +@property(nonatomic, readonly)float duration; //时长,单位:秒 +@property(nonatomic, strong, readonly)NSString *format; //格式,如:mp3,aac等 + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMClient.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMClient.h new file mode 100644 index 0000000..0e9c67e --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMClient.h @@ -0,0 +1,222 @@ +// +// AVIM.h +// AVOSCloudIM +// +// Created by Qihe Bian on 12/4/14. +// Copyright (c) 2014 LeanCloud Inc. All rights reserved. +// + +#import "AVIMCommon.h" +#import "AVIMSignature.h" + +@class AVIMConversation; +@class AVIMKeyedConversation; +@class AVIMMessage; +@class AVIMTypedMessage; +@class AVIMConversationQuery; +@protocol AVIMClientDelegate; + +typedef NS_ENUM(NSUInteger, AVIMClientStatus) { + AVIMClientStatusNone, + AVIMClientStatusOpening, + AVIMClientStatusOpened, + AVIMClientStatusPaused, + AVIMClientStatusResuming, + AVIMClientStatusClosing, + AVIMClientStatusClosed +}; + +typedef NS_OPTIONS(uint64_t, AVIMConversationOption) { + AVIMConversationOptionNone = 0, + AVIMConversationOptionTransient = 1 << 0, + AVIMConversationOptionUnique = 1 << 1, +}; + +@interface AVIMClient : NSObject + +@property (nonatomic, weak) id delegate; +@property (nonatomic, weak) id signatureDataSource; +@property (nonatomic, readonly, copy) NSString *clientId; +@property (nonatomic, readonly, assign) AVIMClientStatus status; + +/*! + 默认 AVIMClient 实例 + @return AVIMClient 实例 + */ ++ (instancetype)defaultClient; + +/*! + * 设置用户选项。 + * 该接口用于控制 AVIMClient 的一些细节行为。 + * @param userOptions 用户选项。 + */ ++ (void)setUserOptions:(NSDictionary *)userOptions; + +/*! + * 设置实时通信的超时时间,默认 15 秒。 + * @param seconds 超时时间,单位是秒。 + */ ++ (void)setTimeoutIntervalInSeconds:(NSTimeInterval)seconds; + +/*! + 重置默认 AVIMClient 实例 + 置后再调用 +defaultClient 将返回新的实例 + */ ++ (void)resetDefaultClient; + +/*! + 开启某个账户的聊天 + @param clientId - 操作发起人的 id,以后使用该账户的所有聊天行为,都由此人发起。 + @param callback - 聊天开启之后的回调 + @return None. + */ +- (void)openWithClientId:(NSString *)clientId + callback:(AVIMBooleanResultBlock)callback; + +/*! + 结束某个账户的聊天 + @param callback - 聊天关闭之后的回调 + @return None. + */ +- (void)closeWithCallback:(AVIMBooleanResultBlock)callback; + +/*! + 创建一个新的用户对话。 + 在单聊的场合,传入对方一个 clientId 即可;群聊的时候,支持同时传入多个 clientId 列表 + @param name - 会话名称。 + @param clientIds - 聊天参与者(发起人除外)的 clientId 列表。 + @param callback - 对话建立之后的回调 + @return None. + */ +- (void)createConversationWithName:(NSString *)name + clientIds:(NSArray *)clientIds + callback:(AVIMConversationResultBlock)callback; + +/*! + 创建一个新的用户对话。 + 在单聊的场合,传入对方一个 clientId 即可;群聊的时候,支持同时传入多个 clientId 列表 + @param name - 会话名称。 + @param clientIds - 聊天参与者(发起人除外)的 clientId 列表。 + @param attributes - 会话的自定义属性。 + @param options - 可选参数,可以使用或 “|” 操作表示多个选项 + @param callback - 对话建立之后的回调 + @return None. + */ +- (void)createConversationWithName:(NSString *)name + clientIds:(NSArray *)clientIds + attributes:(NSDictionary *)attributes + options:(AVIMConversationOption)options + callback:(AVIMConversationResultBlock)callback; + +/*! + 通过 conversationId 查找已激活会话。 + 已激活会话是指通过查询、创建、或通过 KeyedConversation 所得到的会话。 + @param conversationId Conversation 的 id。 + @return 与 conversationId 匹配的会话,若找不到,返回 nil。 + */ +- (AVIMConversation *)conversationForId:(NSString *)conversationId; + +/*! + 创建一个绑定到当前 client 的会话。 + @param keyedConversation AVIMKeyedConversation 对象。 + @return 已绑定到当前 client 的会话。 + */ +- (AVIMConversation *)conversationWithKeyedConversation:(AVIMKeyedConversation *)keyedConversation; + +/*! + 构造一个对话查询对象 + @return 对话查询对象. + */ +- (AVIMConversationQuery *)conversationQuery; + +@end + +@protocol AVIMClientDelegate +@optional + +/*! + 当前聊天状态被暂停,常见于网络断开时触发。 + */ +- (void)imClientPaused:(AVIMClient *)imClient; + +/*! + 当前聊天状态被暂停,常见于网络断开时触发,error 包含暂停的错误信息。 + 注意:该回调会覆盖 imClientPaused: 方法。 + */ +- (void)imClientPaused:(AVIMClient *)imClient error:(NSError *)error; + +/*! + 当前聊天状态开始恢复,常见于网络断开后开始重新连接。 + */ +- (void)imClientResuming:(AVIMClient *)imClient; + +/*! + 当前聊天状态已经恢复,常见于网络断开后重新连接上。 + */ +- (void)imClientResumed:(AVIMClient *)imClient; + +/*! + 接收到新的普通消息。 + @param conversation - 所属对话 + @param message - 具体的消息 + @return None. + */ +- (void)conversation:(AVIMConversation *)conversation didReceiveCommonMessage:(AVIMMessage *)message; + +/*! + 接收到新的富媒体消息。 + @param conversation - 所属对话 + @param message - 具体的消息 + @return None. + */ +- (void)conversation:(AVIMConversation *)conversation didReceiveTypedMessage:(AVIMTypedMessage *)message; + +/*! + 消息已投递给对方。 + @param conversation - 所属对话 + @param message - 具体的消息 + @return None. + */ +- (void)conversation:(AVIMConversation *)conversation messageDelivered:(AVIMMessage *)message; + +/*! + 对话中有新成员加入的通知。 + @param conversation - 所属对话 + @param clientIds - 加入的新成员列表 + @param clientId - 邀请者的 id + @return None. + */ +- (void)conversation:(AVIMConversation *)conversation membersAdded:(NSArray *)clientIds byClientId:(NSString *)clientId; +/*! + 对话中有成员离开的通知。 + @param conversation - 所属对话 + @param clientIds - 离开的成员列表 + @param clientId - 操作者的 id + @return None. + */ +- (void)conversation:(AVIMConversation *)conversation membersRemoved:(NSArray *)clientIds byClientId:(NSString *)clientId; + +/*! + 被邀请加入对话的通知。 + @param conversation - 所属对话 + @param clientId - 邀请者的 id + @return None. + */ +- (void)conversation:(AVIMConversation *)conversation invitedByClientId:(NSString *)clientId; + +/*! + 从对话中被移除的通知。 + @param conversation - 所属对话 + @param clientId - 操作者的 id + @return None. + */ +- (void)conversation:(AVIMConversation *)conversation kickedByClientId:(NSString *)clientId; + +/* + 收到未读通知。 + @param conversation 所属会话。 + @param unread 未读消息数量。 + */ +- (void)conversation:(AVIMConversation *)conversation didReceiveUnread:(NSInteger)unread; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMCommon.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMCommon.h new file mode 100644 index 0000000..c740328 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMCommon.h @@ -0,0 +1,37 @@ +// +// AVIMCommon.h +// AVOSCloudIM +// +// Created by Qihe Bian on 12/4/14. +// Copyright (c) 2014 LeanCloud Inc. All rights reserved. +// + +#import +#import +#import +#import + +@class AVIMConversation; + +extern NSString *AVOSCloudIMErrorDomain; + +extern NSInteger const kAVIMErrorInvalidCommand; //非法的请求命令 +extern NSInteger const kAVIMErrorInvalidArguments; //非法参数 +extern NSInteger const kAVIMErrorConversationNotFound; //会话未找到 +extern NSInteger const kAVIMErrorTimeout; //请求超时 +extern NSInteger const kAVIMErrorConnectionLost; //连接断开 +extern NSInteger const kAVIMErrorInvalidData; //非法数据 +extern NSInteger const kAVIMErrorMessageTooLong; //消息内容太长 +extern NSInteger const kAVIMErrorClientNotOpen; //client 没有打开 + +/* AVOSCloud IM code key */ +FOUNDATION_EXPORT NSString *const kAVIMCodeKey; +/* AVOSCloud IM app code key */ +FOUNDATION_EXPORT NSString *const kAVIMAppCodeKey; +/* AVOSCloud IM reason key */ +FOUNDATION_EXPORT NSString *const kAVIMReasonKey; + +typedef void (^AVIMBooleanResultBlock)(BOOL succeeded, NSError *error); +typedef void (^AVIMIntegerResultBlock)(NSInteger number, NSError *error); +typedef void (^AVIMArrayResultBlock)(NSArray *objects, NSError *error); +typedef void (^AVIMConversationResultBlock)(AVIMConversation *conversation, NSError *error); diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMConversation.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMConversation.h new file mode 100644 index 0000000..0fff788 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMConversation.h @@ -0,0 +1,207 @@ +// +// AVIMConversation.h +// AVOSCloudIM +// +// Created by Qihe Bian on 12/4/14. +// Copyright (c) 2014 LeanCloud Inc. All rights reserved. +// + +#import "AVIMCommon.h" +#import "AVIMMessage.h" +#import "AVIMTypedMessage.h" +#import "AVIMConversationUpdateBuilder.h" +#import "AVIMKeyedConversation.h" + +@class AVIMClient; + +typedef uint64_t AVIMMessageSendOption; +enum : AVIMMessageSendOption { + AVIMMessageSendOptionNone = 0, + AVIMMessageSendOptionTransient = 1 << 0, + AVIMMessageSendOptionRequestReceipt = 1 << 1, +}; + +@interface AVIMConversation : NSObject + +@property (nonatomic, strong, readonly) NSString *conversationId; // 对话 id +@property (nonatomic, strong, readonly) NSString *creator; // 创建者 id +@property (nonatomic, strong, readonly) NSDate *createAt; // 创建时间 +@property (nonatomic, strong, readonly) NSDate *updateAt; // 最后更新时间 +@property (nonatomic, strong, readonly) NSDate *lastMessageAt; // 对话中最后一条消息的发送时间 +@property (nonatomic, strong, readonly) NSString *name; // 对话名字 +@property (nonatomic, strong, readonly) NSArray *members; // 对话参与者列表 +@property (nonatomic, strong, readonly) NSDictionary *attributes; // 自定义属性 +@property (nonatomic, assign, readonly) BOOL transient; // 是否为临时会话(开放群组) +@property (nonatomic, assign, readonly) BOOL muted; // 静音状态 +@property (nonatomic, weak, readonly) AVIMClient *imClient; // 所属的 client + +/*! + 生成一个新的 AVIMConversationUpdateBuilder 实例。 + @return 新的 AVIMConversationUpdateBuilder 实例. + */ +- (AVIMConversationUpdateBuilder *)newUpdateBuilder; + +/*! + 创建一个 AVIMKeyedConversation 对象。 + @return AVIMKeyedConversation 对象。 + */ +- (AVIMKeyedConversation *)keyedConversation; + +/*! + 拉取服务器最新数据。 + @param callback - 结果回调 + @return None. + */ +- (void)fetchWithCallback:(AVIMBooleanResultBlock)callback; + +/*! + 发送更新。 + @param updateDict - 需要更新的数据,可通过 AVIMConversationUpdateBuilder 生成 + @param callback - 结果回调 + @return None. + */ +- (void)update:(NSDictionary *)updateDict + callback:(AVIMBooleanResultBlock)callback; + +/*! + 加入对话。 + @param callback - 结果回调 + @return None. + */ +- (void)joinWithCallback:(AVIMBooleanResultBlock)callback; + +/*! + 离开对话。 + @param callback - 结果回调 + @return None. + */ +- (void)quitWithCallback:(AVIMBooleanResultBlock)callback; + +/*! + 静音,不再接收此对话的离线推送。 + @param callback - 结果回调 + @return None. + */ +- (void)muteWithCallback:(AVIMBooleanResultBlock)callback; + +/*! + 取消静音,开始接收此对话的离线推送。 + @param callback - 结果回调 + @return None. + */ +- (void)unmuteWithCallback:(AVIMBooleanResultBlock)callback; + +/*! + 标记该会话已读。 + 将服务端该会话的未读消息数置零。 + */ +- (void)markAsReadInBackground; + +/*! + 邀请新成员加入对话。 + @param clientIds - 成员列表 + @param callback - 结果回调 + @return None. + */ +- (void)addMembersWithClientIds:(NSArray *)clientIds + callback:(AVIMBooleanResultBlock)callback; + +/*! + 从对话踢出部分成员。 + @param clientIds - 成员列表 + @param callback - 结果回调 + @return None. + */ +- (void)removeMembersWithClientIds:(NSArray *)clientIds + callback:(AVIMBooleanResultBlock)callback; + +/*! + 查询成员人数(开放群组即为在线人数)。 + @param callback - 结果回调 + @return None. + */ +- (void)countMembersWithCallback:(AVIMIntegerResultBlock)callback; + +/*! + 往对话中发送消息。 + @param message - 消息对象 + @param callback - 结果回调 + @return None. + */ +- (void)sendMessage:(AVIMMessage *)message + callback:(AVIMBooleanResultBlock)callback; + +/*! + 往对话中发送消息。 + @param message - 消息对象 + @param progressBlock - 发送进度回调。仅对文件上传有效,发送文本消息时不进行回调。 + @param callback - 结果回调 + @return None. + */ +- (void)sendMessage:(AVIMMessage *)message + progressBlock:(AVProgressBlock)progressBlock + callback:(AVIMBooleanResultBlock)callback; + +/*! + 往对话中发送消息。 + @param message - 消息对象 + @param options - 可选参数,可以使用或 “|” 操作表示多个选项 + @param callback - 结果回调 + @return None. + */ +- (void)sendMessage:(AVIMMessage *)message + options:(AVIMMessageSendOption)options + callback:(AVIMBooleanResultBlock)callback; + +/*! + 往对话中发送消息。 + @param message - 消息对象 + @param options - 可选参数,可以使用或 “|” 操作表示多个选项 + @param progressBlock - 发送进度回调。仅对文件上传有效,发送文本消息时不进行回调。 + @param callback - 结果回调 + @return None. + */ +- (void)sendMessage:(AVIMMessage *)message + options:(AVIMMessageSendOption)options + progressBlock:(AVProgressBlock)progressBlock + callback:(AVIMBooleanResultBlock)callback; + +/*! + 从服务端拉取该会话的最近 limit 条消息。 + @param limit 返回结果的数量,默认 20 条,最多 1000 条。 + @param callback 查询结果回调。 + @return None。 + */ +- (void)queryMessagesFromServerWithLimit:(NSUInteger)limit + callback:(AVIMArrayResultBlock)callback; + +/*! + 从缓存中查询该会话的最近 limit 条消息。 + @param limit 返回结果的数量,默认 20 条,最多 1000 条。 + @return 消息数组。 + */ +- (NSArray *)queryMessagesFromCacheWithLimit:(NSUInteger)limit; + +/*! + 获取该会话的最近 limit 条消息。 + @param limit 返回结果的数量,默认 20 条,最多 1000 条。 + @param callback 查询结果回调。 + @return None。 + */ +- (void)queryMessagesWithLimit:(NSUInteger)limit + callback:(AVIMArrayResultBlock)callback; + +/*! + 查询历史消息,获取某条消息或指定时间戳之前的 limit 条消息。 + @param messageId 此消息以前的消息。 + @param timestamp 此时间以前的消息。 + @param limit 返回结果的数量,默认 20 条,最多 1000 条。 + @param callback 查询结果回调。 + @return None。 + */ +- (void)queryMessagesBeforeId:(NSString *)messageId + timestamp:(int64_t)timestamp + limit:(NSUInteger)limit + callback:(AVIMArrayResultBlock)callback; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMConversationQuery.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMConversationQuery.h new file mode 100644 index 0000000..8536d17 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMConversationQuery.h @@ -0,0 +1,238 @@ +// +// AVIMConversationQuery.h +// AVOSCloudIM +// +// Created by Qihe Bian on 2/3/15. +// Copyright (c) 2015 LeanCloud Inc. All rights reserved. +// + +#import +#import "AVIMCommon.h" + +#define AVIMAttr(attr) ([NSString stringWithFormat:@"attr.%@", attr]) + +extern NSString *const kAVIMKeyName; +extern NSString *const kAVIMKeyMember; +extern NSString *const kAVIMKeyCreator; +extern NSString *const kAVIMKeyConversationId; + +@interface AVIMConversationQuery : NSObject + +/*! + 限制结果数量 + */ +@property (nonatomic) NSInteger limit; + +/*! + 返回此位置开始的结果 + */ +@property (nonatomic) NSInteger skip; + +/*! + 设置缓存策略,默认是 kAVCachePolicyCacheElseNetwork + */ +@property (nonatomic) AVCachePolicy cachePolicy; + +/*! + 设置缓存的过期时间,默认是 1 小时(1 * 60 * 60) + */ +@property (nonatomic) NSTimeInterval cacheMaxAge; + +/*! + 添加等于条件 + @param key 添加条件的 key + @param object 需要等于的 object + */ +- (void)whereKey:(NSString *)key equalTo:(id)object; + +/*! + 添加小于条件 + @param key 添加条件的 key + @param object 需要小于的 object + */ +- (void)whereKey:(NSString *)key lessThan:(id)object; + +/*! + 添加小于或等于条件 + @param key 添加条件的 key + @param object 需要小于或等于的 object + */ +- (void)whereKey:(NSString *)key lessThanOrEqualTo:(id)object; + +/*! + 添加大于条件 + @param key 添加条件的 key + @param object 需要大于的 object + */ +- (void)whereKey:(NSString *)key greaterThan:(id)object; + +/*! + 添加大于或等于条件 + @param key 添加条件的 key + @param object 需要大于或等于的 object + */ +- (void)whereKey:(NSString *)key greaterThanOrEqualTo:(id)object; + +/*! + 添加不等于条件 + @param key 添加条件的 key + @param object 需要不等于的 object + */ +- (void)whereKey:(NSString *)key notEqualTo:(id)object; + +/*! + 添加被包含条件 + @param key 添加条件的 key + @param array key 对应的值被 array 包含 + */ +- (void)whereKey:(NSString *)key containedIn:(NSArray *)array; + +/*! + 添加不被包含条件 + @param key 添加条件的 key + @param array key 对应的值不被 array 包含 + */ +- (void)whereKey:(NSString *)key notContainedIn:(NSArray *)array; + +/*! + 添加包含条件 + @param key 添加条件的 key + @param array key 对应的值包含 array 里所有对象 + */ +- (void)whereKey:(NSString *)key containsAllObjectsInArray:(NSArray *)array; + +/*! + 添加位置条件,结果将按与参考点位置的距离由近到远排序 + @param key 添加条件的 key + @param geopoint 参考点位置 + */ +- (void)whereKey:(NSString *)key nearGeoPoint:(AVGeoPoint *)geopoint; + +/*! + 添加位置条件,结果将按与参考点位置的距离由近到远排序 + @param key 添加条件的 key + @param geopoint 参考点位置 + @param maxDistance 最大距离,单位英里 + */ +- (void)whereKey:(NSString *)key nearGeoPoint:(AVGeoPoint *)geopoint withinMiles:(double)maxDistance; + +/*! + 添加位置条件,结果将按与参考点位置的距离由近到远排序 + @param key 添加条件的 key + @param geopoint 参考点位置 + @param maxDistance 最大距离,单位千米 + */ +- (void)whereKey:(NSString *)key nearGeoPoint:(AVGeoPoint *)geopoint withinKilometers:(double)maxDistance; + +/*! + 添加位置条件,结果将按与参考点位置的距离由近到远排序 + @param key 添加条件的 key + @param geopoint 参考点位置 + @param maxDistance 最大距离,单位弧度 + */ +- (void)whereKey:(NSString *)key nearGeoPoint:(AVGeoPoint *)geopoint withinRadians:(double)maxDistance; + +/*! + 添加位置条件,获取位置在 southwest 和 northeast 构成的方形区域的所有记录 + @param key 添加条件的 key + @param southwest 区域的左下角位置 + @param northeast 区域的右上角位置 + */ +- (void)whereKey:(NSString *)key withinGeoBoxFromSouthwest:(AVGeoPoint *)southwest toNortheast:(AVGeoPoint *)northeast; + +/*! + 添加正则条件,此条件可能影响性能 + @param key 添加条件的 key + @param regex 需要匹配的正则 + */ +- (void)whereKey:(NSString *)key matchesRegex:(NSString *)regex; + +/*! + 添加正则条件,此条件可能影响性能 + @param key 添加条件的 key + @param regex 需要匹配的正则 + @param modifiers 支持 PCRE 修饰:
i - 忽略大小写
m - 跨行匹配 + */ +- (void)whereKey:(NSString *)key matchesRegex:(NSString *)regex modifiers:(NSString *)modifiers; + +/*! + 添加字符串包含条件 + @param key 添加条件的 key + @param substring 需要包含的字符串 + */ +- (void)whereKey:(NSString *)key containsString:(NSString *)substring; + +/*! + 添加字符串前缀匹配条件 + @param key 添加条件的 key + @param prefix 需要匹配的前缀 + */ +- (void)whereKey:(NSString *)key hasPrefix:(NSString *)prefix; + +/*! + 添加字符串后缀匹配条件 + @param key 添加条件的 key + @param suffix 需要匹配的后缀 + */ +- (void)whereKey:(NSString *)key hasSuffix:(NSString *)suffix; + +/*! + 添加数组元素数量匹配条件 + @param key 添加条件的 key + @param count 需要匹配的数组元素数量 + */ +- (void)whereKey:(NSString *)key sizeEqualTo:(NSUInteger)count; + + +/*! + 升序排序 + @param key 升序的 key + */ +- (void)orderByAscending:(NSString *)key; + +/*! + 添加升序排序 + @param key 升序的 key + */ +- (void)addAscendingOrder:(NSString *)key; + +/*! + 降序排序 + @param key 降序的 key + */ +- (void)orderByDescending:(NSString *)key; + +/*! + 添加降序排序 + @param key 降序的 key + */ +- (void)addDescendingOrder:(NSString *)key; + +/*! + 使用 sortDescriptor 排序 + @param sortDescriptor NSSortDescriptor 对象 + */ +- (void)orderBySortDescriptor:(NSSortDescriptor *)sortDescriptor; + +/*! + 使用 sortDescriptors 排序 + @param sortDescriptors NSSortDescriptor 对象数组 + */ +- (void)orderBySortDescriptors:(NSArray *)sortDescriptors; + +/*! + 通过 conversationId 查询服务器,获取一个 AVIMConversation 对象 + @param conversationId 查询使用的对话 id + @param callback 查询结果回调 + */ +- (void)getConversationById:(NSString *)conversationId + callback:(AVIMConversationResultBlock)callback; + +/*! + 查询服务器获取一个 AVIMConversation 对象数组 + 如果未设置 limit,或 limit 非法,默认返回 10 个结果 + @param callback 查询结果回调 + */ +- (void)findConversationsWithCallback:(AVIMArrayResultBlock)callback; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMConversationUpdateBuilder.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMConversationUpdateBuilder.h new file mode 100644 index 0000000..b842daf --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMConversationUpdateBuilder.h @@ -0,0 +1,48 @@ +// +// AVIMConversationUpdateBuilder.h +// AVOSCloudIM +// +// Created by Qihe Bian on 1/8/15. +// Copyright (c) 2015 LeanCloud Inc. All rights reserved. +// + +#import "AVIMCommon.h" + +@interface AVIMConversationUpdateBuilder : NSObject +/*! + 名称 + */ +@property(nonatomic, strong)NSString *name; + +/*! + 属性合集,修改此属性会覆盖 setObject:forKey: 和 removeObjectForKey: 所做的修改 + */ +@property(nonatomic, strong)NSDictionary *attributes; + +/*! + 生成更新字典 + @return 更新用的字典 + */ +- (NSDictionary *)dictionary; + +/*! + 获取 attributes 中 key 对应的值 + @param key 获取数据的 key 值 + @return key 对应的值 + */ +- (id)objectForKey:(NSString *)key; + +/*! + 设置 attributes 中 key 对应的值为 object + @param object 设置的对象,传 [NSNull null] 将在服务器端删除对应的 key + @param key 设置的 key 值 + */ +- (void)setObject:(id)object forKey:(NSString *)key; + +/*! + 移除 attributes 中的 key + @param key 移除的 key 值 + */ +- (void)removeObjectForKey:(NSString *)key; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMFileMessage.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMFileMessage.h new file mode 100644 index 0000000..9046793 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMFileMessage.h @@ -0,0 +1,13 @@ +// +// AVIMFileMessage.h +// AVOS +// +// Created by Tang Tianyong on 7/30/15. +// Copyright (c) 2015 LeanCloud Inc. All rights reserved. +// + +#import + +@interface AVIMFileMessage : AVIMTypedMessage + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMImageMessage.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMImageMessage.h new file mode 100644 index 0000000..7200ec1 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMImageMessage.h @@ -0,0 +1,17 @@ +// +// AVIMImageMessage.h +// AVOSCloudIM +// +// Created by Qihe Bian on 1/12/15. +// Copyright (c) 2015 LeanCloud Inc. All rights reserved. +// + +#import "AVIMTypedMessage.h" + +@interface AVIMImageMessage : AVIMTypedMessage +@property(nonatomic, readonly)uint width; //宽度,单位:像素 +@property(nonatomic, readonly)uint height; //高度,单位:像素 +@property(nonatomic, readonly)uint64_t size; //文件大小,单位:字节 +@property(nonatomic, strong, readonly)NSString *format; //格式,如:png,jpg等 + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMKeyedConversation.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMKeyedConversation.h new file mode 100644 index 0000000..710d27a --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMKeyedConversation.h @@ -0,0 +1,27 @@ +// +// AVIMKeyedConversation.h +// AVOS +// +// Created by Tang Tianyong on 6/12/15. +// Copyright (c) 2015 LeanCloud Inc. All rights reserved. +// + +#import + +@class AVIMClient; +@class AVIMConversation; + +@interface AVIMKeyedConversation : NSObject + +@property (nonatomic, copy, readonly) NSString *conversationId; // 对话 id +@property (nonatomic, copy, readonly) NSString *creator; // 创建者 id +@property (nonatomic, strong, readonly) NSDate *createAt; // 创建时间 +@property (nonatomic, strong, readonly) NSDate *updateAt; // 最后更新时间 +@property (nonatomic, strong, readonly) NSDate *lastMessageAt; // 对话中最后一条消息的发送时间 +@property (nonatomic, copy, readonly) NSString *name; // 对话名字 +@property (nonatomic, strong, readonly) NSArray *members; // 对话参与者列表 +@property (nonatomic, strong, readonly) NSDictionary *attributes; // 自定义属性 +@property (nonatomic, assign, readonly) BOOL transient; // 是否为临时会话(开放群组) +@property (nonatomic, assign, readonly) BOOL muted; // 静音状态 + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMLocationMessage.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMLocationMessage.h new file mode 100644 index 0000000..a178969 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMLocationMessage.h @@ -0,0 +1,26 @@ +// +// AVIMLocationMessage.h +// AVOSCloudIM +// +// Created by Qihe Bian on 1/12/15. +// Copyright (c) 2015 LeanCloud Inc. All rights reserved. +// + +#import "AVIMTypedMessage.h" + +@interface AVIMLocationMessage : AVIMTypedMessage +@property(nonatomic, readonly)float latitude; //纬度 +@property(nonatomic, readonly)float longitude; //经度 + +/*! + 创建位置消息。 + @param text - 消息文本. + @param latitude - 纬度 + @param longitude - 经度 + @param attributes - 用户附加属性 + */ ++ (instancetype)messageWithText:(NSString *)text + latitude:(float)latitude + longitude:(float)longitude + attributes:(NSDictionary *)attributes; +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMMessage.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMMessage.h new file mode 100644 index 0000000..d2fb8de --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMMessage.h @@ -0,0 +1,42 @@ +// +// AVIMMessage.h +// AVOSCloudIM +// +// Created by Qihe Bian on 12/4/14. +// Copyright (c) 2014 LeanCloud Inc. All rights reserved. +// + +#import "AVIMCommon.h" + +typedef enum : int8_t { + AVIMMessageIOTypeIn = 1, + AVIMMessageIOTypeOut, +} AVIMMessageIOType; + +typedef enum : int8_t { + AVIMMessageStatusNone = 0, + AVIMMessageStatusSending = 1, + AVIMMessageStatusSent, + AVIMMessageStatusDelivered, + AVIMMessageStatusFailed, +} AVIMMessageStatus; + +@interface AVIMMessage : NSObject + +@property (nonatomic, readonly) AVIMMessageIOType ioType; // 表示接收和发出的消息 +@property (nonatomic, assign) AVIMMessageStatus status; // 表示消息状态 +@property (nonatomic, strong) NSString *messageId; // 消息 id +@property (nonatomic, strong) NSString *clientId; // 消息发送/接收方 id +@property (nonatomic, strong) NSString *conversationId; // 消息所属对话的 id +@property (nonatomic, strong) NSString *content; // 消息文本 +@property (nonatomic, assign) int64_t sendTimestamp; // 发送时间(精确到毫秒) +@property (nonatomic, assign) int64_t deliveredTimestamp; // 接收时间(精确到毫秒) +@property (nonatomic, readonly) BOOL transient; // 是否是暂态消息 + +/*! + 创建文本消息。 + @param content - 消息文本. + */ ++ (instancetype)messageWithContent:(NSString *)content; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMSignature.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMSignature.h new file mode 100644 index 0000000..7671a7c --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMSignature.h @@ -0,0 +1,38 @@ +// +// AVIMSignature.h +// AVOSCloudIM +// +// Created by Qihe Bian on 12/4/14. +// Copyright (c) 2014 LeanCloud Inc. All rights reserved. +// + +#import "AVIMCommon.h" + +@interface AVIMSignature : NSObject + +@property (nonatomic, strong) NSString *signature; +@property (nonatomic) int64_t timestamp; +@property (nonatomic, strong) NSString *nonce; +@property (nonatomic, strong) NSError *error; + +@end + +@protocol AVIMSignatureDataSource +@optional + +/*! + 对一个操作进行签名. 注意:本调用会在后台线程被执行 + @param clientId - 操作发起人的 id + @param conversationId - 操作所属对话的 id + @param action - 操作的种类,主要有: + "join": 表示操作发起人要加入对话 + "invite": 表示邀请其他人加入对话 + "kick": 表示从对话中踢出部分人 + @param clientIds - 操作目标的 id 列表 + @return 一个 AVIMSignature 签名对象. + */ +- (AVIMSignature *)signatureWithClientId:(NSString *)clientId + conversationId:(NSString *)conversationId + action:(NSString *)action + actionOnClientIds:(NSArray *)clientIds; +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMTextMessage.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMTextMessage.h new file mode 100644 index 0000000..57d95fe --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMTextMessage.h @@ -0,0 +1,20 @@ +// +// AVIMTextMessage.h +// AVOSCloudIM +// +// Created by Qihe Bian on 1/12/15. +// Copyright (c) 2015 LeanCloud Inc. All rights reserved. +// + +#import "AVIMTypedMessage.h" + +@interface AVIMTextMessage : AVIMTypedMessage + +/*! + 创建文本消息。 + @param text - 消息文本. + @param attributes - 用户附加属性 + */ ++ (instancetype)messageWithText:(NSString *)text + attributes:(NSDictionary *)attributes; +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMTypedMessage.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMTypedMessage.h new file mode 100644 index 0000000..871197f --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMTypedMessage.h @@ -0,0 +1,64 @@ +// +// AVIMTypedMessage.h +// AVOSCloudIM +// +// Created by Qihe Bian on 1/8/15. +// Copyright (c) 2014 LeanCloud Inc. All rights reserved. +// + +#import "AVIMMessage.h" + +typedef int8_t AVIMMessageMediaType; + +//SDK定义的消息类型,自定义类型使用大于0的值 +enum : AVIMMessageMediaType { + kAVIMMessageMediaTypeNone = 0, + kAVIMMessageMediaTypeText = -1, + kAVIMMessageMediaTypeImage = -2, + kAVIMMessageMediaTypeAudio = -3, + kAVIMMessageMediaTypeVideo = -4, + kAVIMMessageMediaTypeLocation = -5, + kAVIMMessageMediaTypeFile = -6 +}; +@protocol AVIMTypedMessageSubclassing +@required +/*! + 子类实现此方法用于返回该类对应的消息类型 + @return 消息类型 + */ ++ (AVIMMessageMediaType)classMediaType; +@end + +@interface AVIMTypedMessage : AVIMMessage +@property(nonatomic)AVIMMessageMediaType mediaType; //消息类型,可自定义 +@property(nonatomic, strong)NSString *text; // 消息文本 +@property(nonatomic, strong)NSDictionary *attributes; // 自定义属性 +@property(nonatomic, strong, readonly)AVFile *file; // 附件 +@property(nonatomic, strong, readonly)AVGeoPoint *location; // 位置 + +/* + 子类调用此方法进行注册,一般可在子类的 [+(void)load] 方法里面调用 + */ ++ (void)registerSubclass; + +/*! + 使用本地文件,创建消息。 + @param text - 消息文本。 + @param attachedFilePath - 本地文件路径。 + @param attributes - 用户附加属性。 + */ ++ (instancetype)messageWithText:(NSString *)text + attachedFilePath:(NSString *)attachedFilePath + attributes:(NSDictionary *)attributes; + +/*! + 使用 AVFile,创建消息。 + @param text - 消息文本。 + @param file - AVFile 对象。 + @param attributes - 用户附加属性。 + */ ++ (instancetype)messageWithText:(NSString *)text + file:(AVFile *)file + attributes:(NSDictionary *)attributes; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMUserOptions.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMUserOptions.h new file mode 100644 index 0000000..706dcd7 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMUserOptions.h @@ -0,0 +1,19 @@ +// +// AVIMUserOptions.h +// AVOS +// +// Created by Tang Tianyong on 8/18/15. +// Copyright (c) 2015 LeanCloud Inc. All rights reserved. +// + +#import + +/* + * 开启未读通知,关闭离线消息推送。 + */ +FOUNDATION_EXPORT NSString *const AVIMUserOptionUseUnread; + +/* + * 自定义消息传输协议。如果没有特殊目的,不应该使用这个选项。 + */ +FOUNDATION_EXPORT NSString *const AVIMUserOptionCustomProtocols; diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMVideoMessage.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMVideoMessage.h new file mode 100644 index 0000000..d187b07 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVIMVideoMessage.h @@ -0,0 +1,16 @@ +// +// AVIMVideoMessage.h +// AVOSCloudIM +// +// Created by Qihe Bian on 1/12/15. +// Copyright (c) 2015 LeanCloud Inc. All rights reserved. +// + +#import "AVIMTypedMessage.h" + +@interface AVIMVideoMessage : AVIMTypedMessage +@property(nonatomic, readonly)uint64_t size; //文件大小,单位:字节 +@property(nonatomic, readonly)float duration; //时长,单位:秒 +@property(nonatomic, strong, readonly)NSString *format; //格式,如:mp4,m4v等 + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVOSCloudIM.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVOSCloudIM.h new file mode 100644 index 0000000..fddc596 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Headers/AVOSCloudIM.h @@ -0,0 +1,28 @@ +// +// AVOSCloudIM.h +// AVOSCloudIM +// +// Created by Qihe Bian on 12/4/14. +// Copyright (c) 2014 LeanCloud Inc. All rights reserved. +// + +#import + +// In this header, you should import all the public headers of your framework using statements like #import + +#import "AVIMCommon.h" +#import "AVIMClient.h" +#import "AVIMConversation.h" +#import "AVIMKeyedConversation.h" +#import "AVIMConversationQuery.h" +#import "AVIMConversationUpdateBuilder.h" +#import "AVIMMessage.h" +#import "AVIMTypedMessage.h" +#import "AVIMTextMessage.h" +#import "AVIMImageMessage.h" +#import "AVIMAudioMessage.h" +#import "AVIMVideoMessage.h" +#import "AVIMLocationMessage.h" +#import "AVIMFileMessage.h" +#import "AVIMSignature.h" +#import "AVIMUserOptions.h" diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Info.plist b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Info.plist new file mode 100644 index 0000000..6c7b00d Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Info.plist differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Modules/module.modulemap b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Modules/module.modulemap new file mode 100644 index 0000000..45ad496 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/Modules/module.modulemap @@ -0,0 +1,6 @@ +framework module AVOSCloudIM { + umbrella header "AVOSCloudIM.h" + + export * + module * { export * } +} diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/_CodeSignature/CodeResources b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/_CodeSignature/CodeResources new file mode 100644 index 0000000..44734e3 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/LeanCloud/AVOSCloudIM.framework/_CodeSignature/CodeResources @@ -0,0 +1,255 @@ + + + + + files + + Headers/AVIMAudioMessage.h + + eb9XiqqnJmiMlmGvRvALiOm3xmU= + + Headers/AVIMClient.h + + FgejVP5LZfWs0uunPnRf7c2Rpt4= + + Headers/AVIMCommon.h + + QAWRFjLC2taDLa7eosbdeqrTiyY= + + Headers/AVIMConversation.h + + 59KO62oMQp6tp8uUtkGg+9GYYKE= + + Headers/AVIMConversationQuery.h + + RD1UZjaGwxd3i54h8nAt3FC5800= + + Headers/AVIMConversationUpdateBuilder.h + + Orqrkom7ENzNJMhs0kiFFK4O5Ds= + + Headers/AVIMFileMessage.h + + KaQcbxHCrrRQARntVsOY8kH9Tww= + + Headers/AVIMImageMessage.h + + KVoQvLWX1kAM4v5w+Oc4l3CgeTQ= + + Headers/AVIMKeyedConversation.h + + z4zDuR550PDWLkbEv5EokQHDA7w= + + Headers/AVIMLocationMessage.h + + 7Dnlv8++ZJZoSHHklCTPcJTisgA= + + Headers/AVIMMessage.h + + lAKG6TsTFNqLylpi55CL0U/7h70= + + Headers/AVIMSignature.h + + i9rzWQ3bzzl5cxFFZ4+djcwTYsI= + + Headers/AVIMTextMessage.h + + 24snD7A03WBeWNjMp4AdDXqSF84= + + Headers/AVIMTypedMessage.h + + tiPQ7VawfkMgFMoUM2h6j5ei+xs= + + Headers/AVIMUserOptions.h + + W//pE8VrASwMVMf+gSLCJ9dwg2o= + + Headers/AVIMVideoMessage.h + + vJBPJCbR4EGM41ZsmfmjkI098fo= + + Headers/AVOSCloudIM.h + + kv9eIzARnKWctlrNf36gh8YvsjI= + + Info.plist + + nukMjTX/paK0pMFhX1OzRcVjpbk= + + Modules/module.modulemap + + Z+NGYmnnZgNOkII1rg6WVLFh9tA= + + + files2 + + Headers/AVIMAudioMessage.h + + eb9XiqqnJmiMlmGvRvALiOm3xmU= + + Headers/AVIMClient.h + + FgejVP5LZfWs0uunPnRf7c2Rpt4= + + Headers/AVIMCommon.h + + QAWRFjLC2taDLa7eosbdeqrTiyY= + + Headers/AVIMConversation.h + + 59KO62oMQp6tp8uUtkGg+9GYYKE= + + Headers/AVIMConversationQuery.h + + RD1UZjaGwxd3i54h8nAt3FC5800= + + Headers/AVIMConversationUpdateBuilder.h + + Orqrkom7ENzNJMhs0kiFFK4O5Ds= + + Headers/AVIMFileMessage.h + + KaQcbxHCrrRQARntVsOY8kH9Tww= + + Headers/AVIMImageMessage.h + + KVoQvLWX1kAM4v5w+Oc4l3CgeTQ= + + Headers/AVIMKeyedConversation.h + + z4zDuR550PDWLkbEv5EokQHDA7w= + + Headers/AVIMLocationMessage.h + + 7Dnlv8++ZJZoSHHklCTPcJTisgA= + + Headers/AVIMMessage.h + + lAKG6TsTFNqLylpi55CL0U/7h70= + + Headers/AVIMSignature.h + + i9rzWQ3bzzl5cxFFZ4+djcwTYsI= + + Headers/AVIMTextMessage.h + + 24snD7A03WBeWNjMp4AdDXqSF84= + + Headers/AVIMTypedMessage.h + + tiPQ7VawfkMgFMoUM2h6j5ei+xs= + + Headers/AVIMUserOptions.h + + W//pE8VrASwMVMf+gSLCJ9dwg2o= + + Headers/AVIMVideoMessage.h + + vJBPJCbR4EGM41ZsmfmjkI098fo= + + Headers/AVOSCloudIM.h + + kv9eIzARnKWctlrNf36gh8YvsjI= + + Modules/module.modulemap + + Z+NGYmnnZgNOkII1rg6WVLFh9tA= + + + rules + + ^ + + ^.*\.lproj/ + + optional + + weight + 1000 + + ^.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^version.plist$ + + + rules2 + + .*\.dSYM($|/) + + weight + 11 + + ^ + + weight + 20 + + ^(.*/)?\.DS_Store$ + + omit + + weight + 2000 + + ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ + + nested + + weight + 10 + + ^.* + + ^.*\.lproj/ + + optional + + weight + 1000 + + ^.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Info\.plist$ + + omit + + weight + 20 + + ^PkgInfo$ + + omit + + weight + 20 + + ^[^/]+$ + + nested + + weight + 10 + + ^embedded\.provisionprofile$ + + weight + 20 + + ^version\.plist$ + + weight + 20 + + + + diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Fav_Cell_Loc@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Fav_Cell_Loc@2x.png new file mode 100644 index 0000000..5b509e9 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Fav_Cell_Loc@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/FLAnimatedImage.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/FLAnimatedImage.h new file mode 100755 index 0000000..6425f3c --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/FLAnimatedImage.h @@ -0,0 +1,72 @@ +// +// FLAnimatedImage.h +// Flipboard +// +// Created by Raphael Schaad on 7/8/13. +// Copyright (c) 2013-2014 Flipboard. All rights reserved. +// + + +#import + +@protocol FLAnimatedImageDebugDelegate; + + +// +// An `FLAnimatedImage`'s job is to deliver frames in a highly performant way and works in conjunction with `FLAnimatedImageView`. +// It subclasses `NSObject` and not `UIImage` because it's only an "image" in the sense that a sea lion is a lion. +// It tries to intelligently choose the frame cache size depending on the image and memory situation with the goal to lower CPU usage for smaller ones, lower memory usage for larger ones and always deliver frames for high performant play-back. +// Note: `posterImage`, `size`, `loopCount`, `delayTimes` and `frameCount` don't change after successful initialization. +// +@interface FLAnimatedImage : NSObject + +@property (nonatomic, strong, readonly) UIImage *posterImage; // Guaranteed to be loaded; usually equivalent to `-imageLazilyCachedAtIndex:0` +@property (nonatomic, assign, readonly) CGSize size; // The `.posterImage`'s `.size` + +@property (nonatomic, assign, readonly) NSUInteger loopCount; // 0 means repeating the animation indefinitely +@property (nonatomic, strong, readonly) NSArray *delayTimes; // Of type `NSTimeInterval` boxed in `NSNumber`s +@property (nonatomic, assign, readonly) NSUInteger frameCount; // Number of valid frames; equal to `[.delayTimes count]` + +@property (nonatomic, assign, readonly) NSUInteger frameCacheSizeCurrent; // Current size of intelligently chosen buffer window; can range in the interval [1..frameCount] +@property (nonatomic, assign) NSUInteger frameCacheSizeMax; // Allow to cap the cache size; 0 means no specific limit (default) + +// Intended to be called from main thread synchronously; will return immediately. +// If the result isn't cached, will return `nil`; the caller should then pause playback, not increment frame counter and keep polling. +// After an initial loading time, depending on `frameCacheSize`, frames should be available immediately from the cache. +- (UIImage *)imageLazilyCachedAtIndex:(NSUInteger)index; + +// Pass either a `UIImage` or an `FLAnimatedImage` and get back its size ++ (CGSize)sizeForImage:(id)image; + +// Designated initializer +// On success, returns a new `FLAnimatedImage` with all fields populated, on failure returns `nil` and an error will be logged. +- (instancetype)initWithAnimatedGIFData:(NSData *)data; + +@property (nonatomic, strong, readonly) NSData *data; // The data the receiver was initialized with; read-only + +#if DEBUG +// Only intended to report internal state for debugging +@property (nonatomic, weak) id debug_delegate; +#endif + +@end + + +@interface FLWeakProxy : NSProxy + ++ (instancetype)weakProxyForObject:(id)targetObject; + +@end + + +#if DEBUG +@protocol FLAnimatedImageDebugDelegate + +@optional + +- (void)debug_animatedImage:(FLAnimatedImage *)animatedImage didUpdateCachedFrames:(NSIndexSet *)indexesOfFramesInCache; +- (void)debug_animatedImage:(FLAnimatedImage *)animatedImage didRequestCachedFrame:(NSUInteger)index; +- (CGFloat)debug_animatedImagePredrawingSlowdownFactor:(FLAnimatedImage *)animatedImage; + +@end +#endif diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/FLAnimatedImageView.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/FLAnimatedImageView.h new file mode 100755 index 0000000..fbb4103 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/FLAnimatedImageView.h @@ -0,0 +1,47 @@ +// +// FLAnimatedImageView.h +// Flipboard +// +// Created by Raphael Schaad on 7/8/13. +// Copyright (c) 2013-2014 Flipboard. All rights reserved. +// + + +#import + +@class FLAnimatedImage; +@protocol FLAnimatedImageViewDebugDelegate; + + +// +// An `FLAnimatedImageView` can take an `FLAnimatedImage` and plays it automatically when in view hierarchy and stops when removed. +// The animation can also be controlled with the `UIImageView` methods `-start/stop/isAnimating`. +// It is a fully compatible `UIImageView` subclass and can be used as a drop-in component to work with existing code paths expecting to display a `UIImage`. +// Under the hood it uses a `CADisplayLink` for playback, which can be inspected with `currentFrame` & `currentFrameIndex`. +// +@interface FLAnimatedImageView : UIImageView + +// Setting `[UIImageView.image]` to a non-`nil` value clears out existing `animatedImage`. +// And vice versa, setting `animatedImage` will initially populate the `[UIImageView.image]` to its `posterImage` and then start animating and hold `currentFrame`. +@property (nonatomic, strong) FLAnimatedImage *animatedImage; + +@property (nonatomic, strong, readonly) UIImage *currentFrame; +@property (nonatomic, assign, readonly) NSUInteger currentFrameIndex; + +#if DEBUG +// Only intended to report internal state for debugging +@property (nonatomic, weak) id debug_delegate; +#endif + +@end + + +#if DEBUG +@protocol FLAnimatedImageViewDebugDelegate + +@optional + +- (void)debug_animatedImageView:(FLAnimatedImageView *)animatedImageView waitingForFrame:(NSUInteger)index duration:(NSTimeInterval)duration; + +@end +#endif diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/LKBadgeView.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/LKBadgeView.h new file mode 100755 index 0000000..97f3714 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/LKBadgeView.h @@ -0,0 +1,75 @@ +// +// Copyright (c) 2011 Hiroshi Hashiguchi +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// + +#import + +// Enums +typedef enum { + LKBadgeViewHorizontalAlignmentLeft = 0, + LKBadgeViewHorizontalAlignmentCenter, + LKBadgeViewHorizontalAlignmentRight + +} LKBadgeViewHorizontalAlignment; + +typedef enum { + LKBadgeViewWidthModeStandard = 0, // 30x20 + LKBadgeViewWidthModeSmall // 22x20 +} LKBadgeViewWidthMode; + +typedef enum { + LKBadgeViewHeightModeStandard = 0, // 20 + LKBadgeViewHeightModeLarge // 30 +} LKBadgeViewHeightMode; + + +// Constants +#define LK_BADGE_VIEW_STANDARD_HEIGHT 20.0 +#define LK_BADGE_VIEW_LARGE_HEIGHT 30.0 +#define LK_BADGE_VIEw_STANDARD_WIDTH 30.0 +#define LK_BADGE_VIEw_MINIMUM_WIDTH 22.0 +#define LK_BADGE_VIEW_FONT_SIZE 16.0 + + +@interface LKBadgeView : UIView + +@property (nonatomic, copy) NSString* text; +@property (nonatomic, strong) UIColor* textColor; +@property (nonatomic, strong) UIFont* font; +@property (nonatomic, strong) UIColor* badgeColor; +@property (nonatomic, strong) UIColor* outlineColor; +@property (nonatomic, assign) CGFloat outlineWidth; +@property (nonatomic, assign) BOOL outline; +@property (nonatomic, assign) LKBadgeViewHorizontalAlignment horizontalAlignment; +@property (nonatomic, assign) LKBadgeViewWidthMode widthMode; +@property (nonatomic, assign) LKBadgeViewHeightMode heightMode; +@property (nonatomic, assign) BOOL shadow; +@property (nonatomic, assign) CGSize shadowOffset; +@property (nonatomic, assign) CGFloat shadowBlur; +@property (nonatomic, strong) UIColor* shadowColor; +@property (nonatomic, assign) BOOL shadowOfOutline; +@property (nonatomic, assign) BOOL shadowOfText; +@property (nonatomic, assign) CGSize textOffset; + ++ (CGFloat)badgeHeight; // @depricated +- (CGFloat)badgeHeight; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/MessageDisplayKit-Prefix.pch b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/MessageDisplayKit-Prefix.pch new file mode 100644 index 0000000..d3ab371 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/MessageDisplayKit-Prefix.pch @@ -0,0 +1,19 @@ +// +// MessageDisplayKit-Prefix.pch +// MessageDisplayKit +// +// Created by HUAJIE on 14/12/25. +// Copyright (c) 2014年 iOS软件开发工程师 曾宪华 热衷于简洁的UI QQ:543413507 http://www.pailixiu.com/blog http://www.pailixiu.com/Jack/personal. All rights reserved. +// + +#import + +#ifndef __IPHONE_6_0 +#warning "This project uses features only available in iOS SDK 6.0 and later." +#endif + +#ifdef __OBJC__ + #import + #import + +#endif diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/NSString+MessageInputView.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/NSString+MessageInputView.h new file mode 100644 index 0000000..7e5b2f9 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/NSString+MessageInputView.h @@ -0,0 +1,19 @@ +// +// NSString+MessageInputView.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +@interface NSString (MessageInputView) + +- (NSString *)stringByTrimingWhitespace; + + +- (NSUInteger)numberOfLines; + + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/NSString+XHMD5.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/NSString+XHMD5.h new file mode 100644 index 0000000..f041db2 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/NSString+XHMD5.h @@ -0,0 +1,15 @@ +// +// NSString+XHMD5.h +// XHImageViewer +// +// Created by 曾 宪华 on 14-2-18. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +@interface NSString (XHMD5) + +- (NSString *)MD5Hash; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SECompatibility.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SECompatibility.h new file mode 100755 index 0000000..21187dc --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SECompatibility.h @@ -0,0 +1,57 @@ +// +// SECompatibility.h +// SECoreTextView +// +// Created by kishikawa katsumi on 2013/04/21. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import + +#if TARGET_OS_IPHONE +#import + +@compatibility_alias NSView UIView; +@compatibility_alias NSColor UIColor; +@compatibility_alias NSBezierPath UIBezierPath; +@compatibility_alias NSImage UIImage; + +typedef UIEdgeInsets NSEdgeInsets; + +#define NSEdgeInsetsMake UIEdgeInsetsMake +#define NSRectFill UIRectFill +#define NSStringFromRect NSStringFromCGRect +#define NSStringFromSize NSStringFromCGSize +#define NSTextInputClient UITextInput + +extern NSString * const NSLinkAttributeName; +extern NSString * const NSStrikethroughStyleAttributeName; + +#else +#import + +@compatibility_alias UIView NSView; +@compatibility_alias UIFont NSFont; +@compatibility_alias UIColor NSColor; +@compatibility_alias UIBezierPath NSBezierPath; +@compatibility_alias UIImage NSImage; + +typedef NSEdgeInsets UIEdgeInsets; + +#define UIEdgeInsetsMake NSEdgeInsetsMake +#define UIRectFill NSRectFill +#define NSStringFromCGRect NSStringFromRect +#define NSStringFromCGSize NSStringFromSize +#define UITextInput NSTextInputClient + +@interface NSColor (Compatibility) + +- (CGColorRef)createCGColor CF_RETURNS_RETAINED; + +@end + +#endif + +@interface SECompatibility : NSObject + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SEConstants.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SEConstants.h new file mode 100755 index 0000000..336c591 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SEConstants.h @@ -0,0 +1,19 @@ +// +// SEConstants.h +// SECoreTextView-iOS +// +// Created by kishikawa katsumi on 2013/04/27. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import +#import "SECompatibility.h" + +@interface SEConstants : NSObject + ++ (NSColor *)selectedTextBackgroundColor; ++ (NSColor *)linkColor; ++ (NSColor *)selectionCaretColor; ++ (NSColor *)caretColor; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SELineLayout.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SELineLayout.h new file mode 100755 index 0000000..5f25049 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SELineLayout.h @@ -0,0 +1,51 @@ +// +// SELine.h +// SECoreTextView +// +// Created by kishikawa katsumi on 2013/04/20. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import +#import + +@class SELinkText; + +typedef struct { + CGFloat ascent; + CGFloat descent; + CGFloat width; + CGFloat leading; + double trailingWhitespaceWidth; +} SELineMetrics; + +@interface SELineLayout : NSObject + +@property (nonatomic, readonly) CTLineRef line; +@property (nonatomic, readonly) NSInteger index; +@property (nonatomic, readonly) CGRect rect; +@property (nonatomic) CGRect drawingRect; +@property (nonatomic) CGFloat truncationTokenWidth; +@property (nonatomic, readonly) SELineMetrics metrics; + +@property (nonatomic, readonly) NSRange stringRange; + +@property (nonatomic, readonly) NSArray *links; +@property (nonatomic, readonly) BOOL containsLink; +@property (nonatomic, readonly) NSUInteger numberOfLinks; + +@property (nonatomic, getter = isTruncated) BOOL truncated; + +- (id)initWithLine:(CTLineRef)line index:(NSInteger)index rect:(CGRect)rect metrics:(SELineMetrics)metrics; + +- (NSRange)stringRange; + +- (BOOL)containsPoint:(CGPoint)point; +- (CFIndex)stringIndexForPosition:(CGPoint)point; + +- (CGRect)rectOfStringWithRange:(NSRange)range; + +- (void)addLink:(SELinkText *)link; +- (SELinkText *)linkAtPoint:(CGPoint)point; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SELinkText.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SELinkText.h new file mode 100755 index 0000000..3ba6db5 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SELinkText.h @@ -0,0 +1,23 @@ +// +// SELinkText.h +// SECoreTextView +// +// Created by kishikawa katsumi on 2013/04/20. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import + +@class SETextGeometry; + +@interface SELinkText : NSObject + +@property (nonatomic, readonly) NSString *text; +@property (nonatomic, readonly) id object; +@property (nonatomic, readonly) NSRange range; +@property (nonatomic, readonly) NSArray *geometries; + +- (id)initWithText:(NSString *)text object:(id)object range:(NSRange)range; +- (void)addLinkGeometry:(SETextGeometry *)geometry; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SESelectionGrabber.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SESelectionGrabber.h new file mode 100755 index 0000000..1295396 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SESelectionGrabber.h @@ -0,0 +1,25 @@ +// +// SESelectionGrabber.h +// SECoreTextView-iOS +// +// Created by kishikawa katsumi on 2013/04/23. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import + +#if TARGET_OS_IPHONE +#import + +typedef NS_ENUM(NSUInteger, SESelectionGrabberDotMetric) { + SESelectionGrabberDotMetricTop, + SESelectionGrabberDotMetricBottom +}; + +@interface SESelectionGrabber : UIView + +@property (nonatomic) BOOL dragging; +@property (nonatomic) SESelectionGrabberDotMetric dotMetric; + +@end +#endif diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextAttachment.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextAttachment.h new file mode 100755 index 0000000..acaea8f --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextAttachment.h @@ -0,0 +1,53 @@ +// +// SETextAttachment.h +// SECoreTextView-iOS +// +// Created by kishikawa katsumi on 2013/04/26. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import +#import + +#if !TARGET_OS_IPHONE +#if !defined(MAC_OS_X_VERSION_10_9) || MAC_OS_X_VERSION_MAX_ALLOWED < MAC_OS_X_VERSION_10_9 +enum { + kCTRunDelegateVersion1 = 1, + kCTRunDelegateCurrentVersion = kCTRunDelegateVersion1 +}; + +typedef void (*CTRunDelegateDeallocateCallback) (void *refCon); +typedef CGFloat (*CTRunDelegateGetAscentCallback) (void *refCon); +typedef CGFloat (*CTRunDelegateGetDescentCallback) (void *refCon); +typedef CGFloat (*CTRunDelegateGetWidthCallback) (void *refCon); + +typedef struct { + CFIndex version; + CTRunDelegateDeallocateCallback dealloc; + CTRunDelegateGetAscentCallback getAscent; + CTRunDelegateGetDescentCallback getDescent; + CTRunDelegateGetWidthCallback getWidth; +} CTRunDelegateCallbacks; + +typedef const struct __CTRunDelegate * CTRunDelegateRef; +CTRunDelegateRef CTRunDelegateCreate(const CTRunDelegateCallbacks* callbacks, + void* refCon ); +void* CTRunDelegateGetRefCon( + CTRunDelegateRef runDelegate ); +#endif +#endif + +@interface SETextAttachment : NSObject + +@property (nonatomic, readonly) id object; +@property (nonatomic, readonly) CGSize size; +@property (nonatomic, readonly) NSRange range; + +@property (nonatomic, readonly) CTRunDelegateCallbacks callbacks; + +@property (nonatomic) NSAttributedString *originalAttributedString; +@property (nonatomic) NSString *replacedString; + +- (id)initWithObject:(id)object size:(CGSize)size range:(NSRange)range; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextEditingCaret.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextEditingCaret.h new file mode 100755 index 0000000..4eac34b --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextEditingCaret.h @@ -0,0 +1,20 @@ +// +// SETextEditingCaret.h +// CoreTextEditor +// +// Created by kishikawa katsumi on 2013/09/24. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import + +#if TARGET_OS_IPHONE +#import + +@interface SETextEditingCaret : UIView + +- (void)delayBlink; +- (void)stopBlink; + +@end +#endif diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextGeometry.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextGeometry.h new file mode 100755 index 0000000..2c98c69 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextGeometry.h @@ -0,0 +1,19 @@ +// +// SETextGeometry.h +// SECoreTextView +// +// Created by kishikawa katsumi on 2013/04/20. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import +#import + +@interface SETextGeometry : NSObject + +@property (nonatomic, readonly) CGRect rect; +@property (nonatomic, readonly) NSInteger lineNumber; + +- (id)initWithRect:(CGRect)rect lineNumber:(NSInteger)lineNumber; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextInput.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextInput.h new file mode 100755 index 0000000..9a1351c --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextInput.h @@ -0,0 +1,31 @@ +// +// SETextInput.h +// SECoreTextView +// +// Created by kishikawa katsumi on 2013/09/22. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import + +#if TARGET_OS_IPHONE +#import +#import + +@interface SETextRange : UITextRange + +@property (nonatomic) NSRange range; + ++ (SETextRange *)rangeWithNSRange:(NSRange)theRange; + +@end + +@interface SETextPosition : UITextPosition + +@property (nonatomic, weak) id delegate; +@property (nonatomic) NSUInteger index; + ++ (SETextPosition *)positionWithIndex:(NSUInteger)index; + +@end +#endif diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextLayout.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextLayout.h new file mode 100755 index 0000000..318df16 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextLayout.h @@ -0,0 +1,56 @@ +// +// SETextView.h +// SECoreTextView +// +// Created by kishikawa katsumi on 2013/04/19. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import +#import +#import "SECompatibility.h" + +@class SETextSelection, SELinkText; + +@interface SETextLayout : NSObject + +@property (nonatomic, copy) NSAttributedString *attributedString; + +@property (nonatomic) CGRect bounds; + +@property (nonatomic, readonly) CGRect frameRect; +@property (nonatomic, readonly) NSArray *lineLayouts; + +@property (nonatomic) SETextSelection *textSelection; +@property (nonatomic, readonly) NSArray *links; + +@property (nonatomic) NSRange markedTextRange; +@property (nonatomic, getter = isEditing) BOOL editing; + +@property (nonatomic) CTTextAlignment textAlignment; +@property (nonatomic) CTLineBreakMode lineBreakMode; + +- (id)initWithAttributedString:(NSAttributedString *)attributedString; +- (void)update; +- (void)drawInContext:(CGContextRef)context; + +- (CFIndex)stringIndexForPosition:(CGPoint)point; +- (CFIndex)stringIndexForClosestPosition:(CGPoint)point; +- (CGRect)rectOfStringForIndex:(CFIndex)index; +- (CGRect)rectOfStringForLastLine; + +- (void)setSelectionStartWithPoint:(CGPoint)point; +- (void)setSelectionEndWithPoint:(CGPoint)point; +- (void)setSelectionEndWithClosestPoint:(CGPoint)point; +- (void)setSelectionStartWithFirstPoint:(CGPoint)firstPoint; + +- (void)setSelectionWithPoint:(CGPoint)point; +- (void)setSelectionWithFirstPoint:(CGPoint)firstPoint secondPoint:(CGPoint)secondPoint; + +- (void)selectAll; +- (void)clearSelection; + ++ (CGRect)frameRectWithAttributtedString:(NSAttributedString *)attributedString + constraintSize:(CGSize)constraintSize; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextMagnifierCaret.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextMagnifierCaret.h new file mode 100755 index 0000000..fd4b6e6 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextMagnifierCaret.h @@ -0,0 +1,22 @@ +// +// SETextMagnifierCaret.h +// SECoreTextView-iOS +// +// Created by kishikawa katsumi on 2013/04/23. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import + +#if TARGET_OS_IPHONE +#import +#import + +@interface SETextMagnifierCaret : UIView + +- (void)showInView:(UIView *)view atPoint:(CGPoint)point; +- (void)moveToPoint:(CGPoint)point; +- (void)hide; + +@end +#endif diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextMagnifierRanged.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextMagnifierRanged.h new file mode 100755 index 0000000..aa13fd0 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextMagnifierRanged.h @@ -0,0 +1,22 @@ +// +// SETextMagnifierRanged.h +// SECoreTextView-iOS +// +// Created by kishikawa katsumi on 2013/04/26. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import + +#if TARGET_OS_IPHONE +#import +#import + +@interface SETextMagnifierRanged : UIView + +- (void)showInView:(UIView *)view atPoint:(CGPoint)point; +- (void)moveToPoint:(CGPoint)point; +- (void)hide; + +@end +#endif diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextSelection.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextSelection.h new file mode 100755 index 0000000..f27d5ec --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextSelection.h @@ -0,0 +1,18 @@ +// +// SETextSelection.h +// SECoreTextView +// +// Created by kishikawa katsumi on 2013/04/20. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import + +@interface SETextSelection : NSObject + +@property (nonatomic) NSRange selectedRange; + +- (id)initWithIndex:(NSInteger)index; +- (void)setSelectionEndAtIndex:(NSInteger)index; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextSelectionView.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextSelectionView.h new file mode 100755 index 0000000..df2c4d6 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextSelectionView.h @@ -0,0 +1,38 @@ +// +// SETextSelectionView.h +// SECoreTextView-iOS +// +// Created by kishikawa katsumi on 2013/09/23. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import + +#if TARGET_OS_IPHONE +#import + +@class SETextView, SESelectionGrabber, SETextLayout; + +@interface SETextSelectionView : UIView + +- (instancetype)initWithFrame:(CGRect)frame textView:(SETextView *)textView; + +@property (nonatomic, weak) SETextView *textView; + +@property (nonatomic) SESelectionGrabber *startGrabber; +@property (nonatomic) SESelectionGrabber *endGrabber; + +@property (nonatomic) UILongPressGestureRecognizer *selectionGestureRecognizer; +@property (nonatomic) UIPanGestureRecognizer *startGrabberGestureRecognizer; +@property (nonatomic) UIPanGestureRecognizer *endGrabberGestureRecognizer; + +@property (nonatomic) CGRect startFrame; +@property (nonatomic) CGRect endFrame; + +- (void)update; + +- (void)showControls; +- (void)hideControls; + +@end +#endif diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextView.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextView.h new file mode 100755 index 0000000..8cf76d9 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/SETextView.h @@ -0,0 +1,151 @@ +// +// SETextView.h +// SECoreTextView +// +// Created by kishikawa katsumi on 2013/04/20. +// Copyright (c) 2013 kishikawa katsumi. All rights reserved. +// + +#import +#import +#import "SELinkText.h" +#import "SETextAttachment.h" +#import "SECompatibility.h" + +typedef void(^SETextAttachmentDrawingBlock)(CGRect rect, CGContextRef context); + +typedef NS_ENUM(NSUInteger, SETextAttachmentDrawingOptions) { + SETextAttachmentDrawingOptionNone = 0, + SETextAttachmentDrawingOptionNewLine = 1 << 0 +}; + +@protocol SETextViewDelegate; + +@class SELinkText; + +#if TARGET_OS_IPHONE +@interface SETextView : UIView +#else +@interface SETextView : NSView +#endif + +@property (nonatomic, weak) IBOutlet id delegate; + +@property (nonatomic, copy) NSString *text; +@property (nonatomic, copy) NSAttributedString *attributedText; + +#if TARGET_OS_IPHONE +@property (nonatomic) UIFont *font; +#else +@property (nonatomic) NSFont *font; +#endif +@property (nonatomic) NSColor *textColor; +@property (nonatomic) NSColor *highlightedTextColor; +@property (nonatomic) NSTextAlignment textAlignment; +@property (nonatomic) NSLineBreakMode lineBreakMode; +@property (nonatomic) CGFloat lineSpacing; +@property (nonatomic) CGFloat lineHeight; +@property (nonatomic) CGFloat paragraphSpacing; + +@property (nonatomic) NSColor *selectedTextBackgroundColor; +@property (nonatomic) NSColor *linkHighlightColor; +@property (nonatomic) NSColor *linkRolloverEffectColor; + +@property (nonatomic, readonly) CGRect layoutFrame; + +@property (nonatomic, getter = isHighlighted) BOOL highlighted; +@property (nonatomic, getter = isSelectable) BOOL selectable; +#if TARGET_OS_IPHONE +@property (nonatomic) BOOL showsEditingMenuAutomatically; +#endif + +#if TARGET_OS_IPHONE +@property (nonatomic) NSRange selectedRange; +#else +@property (nonatomic, readonly) NSRange selectedRange; +#endif +@property (nonatomic, readonly) NSString *selectedText; +@property (nonatomic, readonly) NSAttributedString *selectedAttributedText; + +@property (nonatomic) NSTimeInterval minimumLongPressDuration; + +@property (nonatomic, getter = isEditable) BOOL editable; +@property (nonatomic, readonly, getter = isEditing) BOOL editing; +@property (nonatomic, readonly) CGRect caretRect; + +@property (readwrite) UIView *inputView; +@property (readwrite) UIView *inputAccessoryView; + +#if TARGET_OS_IPHONE +@property (nonatomic) UITextAutocapitalizationType autocapitalizationType; +@property (nonatomic) UITextAutocorrectionType autocorrectionType; +@property (nonatomic) UITextSpellCheckingType spellCheckingType; +@property (nonatomic) UIKeyboardType keyboardType; +@property (nonatomic) UIKeyboardAppearance keyboardAppearance; +@property (nonatomic) UIReturnKeyType returnKeyType; +@property (nonatomic) BOOL enablesReturnKeyAutomatically; +@property (nonatomic, getter = isSecureTextEntry) BOOL secureTextEntry; +#endif + +- (id)initWithFrame:(CGRect)frame; + ++ (CGRect)frameRectWithAttributtedString:(NSAttributedString *)attributedString + constraintSize:(CGSize)constraintSize; ++ (CGRect)frameRectWithAttributtedString:(NSAttributedString *)attributedString + constraintSize:(CGSize)constraintSize + lineSpacing:(CGFloat)lineSpacing; +#if TARGET_OS_IPHONE ++ (CGRect)frameRectWithAttributtedString:(NSAttributedString *)attributedString + constraintSize:(CGSize)constraintSize + lineSpacing:(CGFloat)lineSpacing + font:(UIFont *)font; ++ (CGRect)frameRectWithAttributtedString:(NSAttributedString *)attributedString + constraintSize:(CGSize)constraintSize + lineSpacing:(CGFloat)lineSpacing + paragraphSpacing:(CGFloat)paragraphSpacing + font:(UIFont *)font; +#else ++ (CGRect)frameRectWithAttributtedString:(NSAttributedString *)attributedString + constraintSize:(CGSize)constraintSize + lineSpacing:(CGFloat)lineSpacing + font:(NSFont *)font; ++ (CGRect)frameRectWithAttributtedString:(NSAttributedString *)attributedString + constraintSize:(CGSize)constraintSize + lineSpacing:(CGFloat)lineSpacing + paragraphSpacing:(CGFloat)paragraphSpacing + font:(NSFont *)font; +#endif + +- (void)addObject:(id)object size:(CGSize)size atIndex:(NSInteger)index; +- (void)addObject:(id)object size:(CGSize)size replaceRange:(NSRange)range; +#if TARGET_OS_IPHONE +- (void)insertAttributedText:(NSAttributedString *)attributedText; +- (void)insertObject:(id)object size:(CGSize)size; +#endif + +- (void)clearSelection; + +@end + +@protocol SETextViewDelegate + +@optional +- (BOOL)textViewShouldBeginEditing:(SETextView *)textView; +- (BOOL)textViewShouldEndEditing:(SETextView *)textView; + +- (void)textViewDidBeginEditing:(SETextView *)textView; +- (void)textViewDidEndEditing:(SETextView *)textView; + +- (BOOL)textView:(SETextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text; +- (void)textViewDidChange:(SETextView *)textView; + +- (void)textViewDidChangeSelection:(SETextView *)textView; +- (void)textViewDidEndSelecting:(SETextView *)textView; + +//- (BOOL)textView:(SETextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange; +//- (BOOL)textView:(SETextView *)textView shouldInteractWithTextAttachment:(NSTextAttachment *)textAttachment inRange:(NSRange)characterRange; + +- (BOOL)textView:(SETextView *)textView clickedOnLink:(SELinkText *)link atIndex:(NSUInteger)charIndex; +- (BOOL)textView:(SETextView *)textView longPressedOnLink:(SELinkText *)link atIndex:(NSUInteger)charIndex; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/UIImage+Alpha.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/UIImage+Alpha.h new file mode 100755 index 0000000..370d978 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/UIImage+Alpha.h @@ -0,0 +1,11 @@ +// UIImage+Alpha.h +// Created by Trevor Harmon on 9/20/09. +// Free for personal or commercial use, with or without modification. +// No warranty is expressed or implied. + +// Helper methods for adding an alpha layer to an image +@interface UIImage (Alpha) +- (BOOL)hasAlpha; +- (UIImage *)imageWithAlpha; +- (UIImage *)transparentBorderImage:(NSUInteger)borderSize; +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/UIImage+Resize.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/UIImage+Resize.h new file mode 100755 index 0000000..f143381 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/UIImage+Resize.h @@ -0,0 +1,18 @@ +// UIImage+Resize.h +// Created by Trevor Harmon on 8/5/09. +// Free for personal or commercial use, with or without modification. +// No warranty is expressed or implied. + +// Extends the UIImage class to support resizing/cropping +@interface UIImage (Resize) +- (UIImage *)croppedImage:(CGRect)bounds; +- (UIImage *)thumbnailImage:(NSInteger)thumbnailSize + transparentBorder:(NSUInteger)borderSize + cornerRadius:(NSUInteger)cornerRadius + interpolationQuality:(CGInterpolationQuality)quality; +- (UIImage *)resizedImage:(CGSize)newSize + interpolationQuality:(CGInterpolationQuality)quality; +- (UIImage *)resizedImageWithContentMode:(UIViewContentMode)contentMode + bounds:(CGSize)bounds + interpolationQuality:(CGInterpolationQuality)quality; +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/UIImage+RoundedCorner.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/UIImage+RoundedCorner.h new file mode 100755 index 0000000..630ebb3 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/UIImage+RoundedCorner.h @@ -0,0 +1,9 @@ +// UIImage+RoundedCorner.h +// Created by Trevor Harmon on 9/20/09. +// Free for personal or commercial use, with or without modification. +// No warranty is expressed or implied. + +// Extends the UIImage class to support making rounded corners +@interface UIImage (RoundedCorner) +- (UIImage *)roundedCornerImage:(NSInteger)cornerSize borderSize:(NSInteger)borderSize; +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/UIImage+Utility.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/UIImage+Utility.h new file mode 100644 index 0000000..5fb0e84 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/UIImage+Utility.h @@ -0,0 +1,16 @@ +// +// UIImage+Utility.h +// XHImageViewer +// +// Created by 曾 宪华 on 14-2-18. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +@interface UIImage (Utility) + ++ (UIImage *)fastImageWithData:(NSData *)data; ++ (UIImage *)fastImageWithContentsOfFile:(NSString *)path; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/UIImage+XHRounded.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/UIImage+XHRounded.h new file mode 100644 index 0000000..399f35c --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/UIImage+XHRounded.h @@ -0,0 +1,15 @@ +// +// UIImage+XHRounded.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-25. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +@interface UIImage (XHRounded) + +- (UIImage *)createRoundedWithRadius:(CGFloat)radius; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/UIScrollView+XHkeyboardControl.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/UIScrollView+XHkeyboardControl.h new file mode 100644 index 0000000..3528fe8 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/UIScrollView+XHkeyboardControl.h @@ -0,0 +1,74 @@ +// +// UIScrollView+XHkeyboardControl.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import + +typedef void(^KeyboardWillBeDismissedBlock)(void); +typedef void(^KeyboardDidHideBlock)(void); +typedef void(^KeyboardDidShowBlock)(BOOL didShowed); +typedef void(^KeyboardDidScrollToPointBlock)(CGPoint point); +typedef void(^KeyboardWillSnapBackToPointBlock)(CGPoint point); + +typedef void(^KeyboardWillChangeBlock)(CGRect keyboardRect, UIViewAnimationOptions options, double duration, BOOL showKeyboard); + + +@interface UIScrollView (XHkeyboardControl) + +@property (nonatomic, weak) UIView *keyboardView; + +/** + * 根据是否需要手势控制键盘消失注册键盘的通知 + * + * @param isPanGestured 手势的需要与否 + */ +- (void)setupPanGestureControlKeyboardHide:(BOOL)isPanGestured; + +/** + * 不需要根据是否需要手势控制键盘消失remove键盘的通知,因为注册的时候,已经固定了这里是否需要释放手势对象了 + * + * @param isPanGestured 根据注册通知里面的YES or NO来进行设置,千万别搞错了 + */ +- (void)disSetupPanGestureControlKeyboardHide:(BOOL)isPanGestured; + +/** + * 手势控制的时候,将要开始消失了,意思在UIView动画里面的animation里面,告诉键盘也需要跟着移动了,顺便需要移动inputView的位置啊! + */ +@property (nonatomic, copy) KeyboardWillBeDismissedBlock keyboardWillBeDismissed; + +/** + * 键盘刚好隐藏 + */ +@property (nonatomic, copy) KeyboardDidHideBlock keyboardDidHide; + +/** + * 键盘刚好变换完成 + */ +@property (nonatomic, copy) KeyboardDidShowBlock keyboardDidChange; + +/** + * 手势控制键盘,滑动到某一点的回调 + */ +@property (nonatomic, copy) KeyboardDidScrollToPointBlock keyboardDidScrollToPoint; + +/** + * 手势控制键盘,滑动到键盘以下的某个位置,然后又想撤销隐藏的手势,告诉键盘又要显示出来啦!顺便需要移动inputView的位置啊! + */ +@property (nonatomic, copy) KeyboardWillSnapBackToPointBlock keyboardWillSnapBackToPoint; + +/** + * 键盘状态改变的回调 + */ +@property (nonatomic, copy) KeyboardWillChangeBlock keyboardWillChange; + +/** + * 手势控制键盘的偏移量 + */ +@property (nonatomic, assign) CGFloat messageInputBarHeight; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/UIView+XHRemoteImage.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/UIView+XHRemoteImage.h new file mode 100644 index 0000000..351760d --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/UIView+XHRemoteImage.h @@ -0,0 +1,52 @@ +// +// UIView+XHRemoteImage.h +// MessageDisplayExample +// +// Created by 曾 宪华 on 14-5-30. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import "XHMessageAvatarFactory.h" + +typedef NS_ENUM(NSInteger, UIImageViewURLDownloadState) { + UIImageViewURLDownloadStateUnknown = 0, + UIImageViewURLDownloadStateLoaded, + UIImageViewURLDownloadStateWaitingForLoad, + UIImageViewURLDownloadStateNowLoading, + UIImageViewURLDownloadStateFailed, +}; + +@interface UIView (XHRemoteImage) + +// url +@property (nonatomic, strong) NSURL *url; + +// download state +@property (nonatomic, readonly) UIImageViewURLDownloadState loadingState; + +// +@property (nonatomic, assign) XHMessageAvatarType messageAvatarType; + +// UI +@property (nonatomic, strong) UIView *loadingView; +// Set UIActivityIndicatorView as loadingView +- (void)setDefaultLoadingView; + +// instancetype ++ (id)imageViewWithURL:(NSURL *)url autoLoading:(BOOL)autoLoading; + +// Get instance that has UIActivityIndicatorView as loadingView by default ++ (id)indicatorImageView; ++ (id)indicatorImageViewWithURL:(NSURL *)url autoLoading:(BOOL)autoLoading; + +// Download +- (void)setImageWithURL:(NSURL *)url; +- (void)setImageWithURL:(NSURL *)url placeholer:(UIImage *)placeholerImage; +- (void)setImageWithURL:(NSURL *)url placeholer:(UIImage *)placeholerImage showActivityIndicatorView:(BOOL)show; +- (void)setImageWithURL:(NSURL *)url placeholer:(UIImage *)placeholerImage showActivityIndicatorView:(BOOL)show completionBlock:(void(^)(UIImage *image, NSURL *url, NSError *error))handler; + +- (void)setImageUrl:(NSURL *)url autoLoading:(BOOL)autoLoading; +- (void)load; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHAnnotation.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHAnnotation.h new file mode 100644 index 0000000..64583e3 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHAnnotation.h @@ -0,0 +1,35 @@ +// +// XHAnnotation.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-9. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import + +@interface XHAnnotation : NSObject + +/** + * 实现MKAnnotation协议必须要定义这个属性 + */ +@property (nonatomic, readwrite) CLLocationCoordinate2D coordinate; + +/** + * 标题 + */ +@property (nonatomic, copy) NSString *title; + +/** + * 子标题 + */ +@property (nonatomic, copy) NSString *subtitle; + +@property (nonatomic, strong) CLRegion *region; + +@property (nonatomic, readwrite) CLLocationDistance radius; + +- (id)initWithCLRegion:(CLRegion *)newRegion title:(NSString *)title subtitle:(NSString *)subtitle; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHAudioPlayerHelper.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHAudioPlayerHelper.h new file mode 100755 index 0000000..89ddc12 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHAudioPlayerHelper.h @@ -0,0 +1,46 @@ +// +// XHAudioPlayerHelper.h +// MessageDisplayKit +// +// Created by Aevitx on 14-1-22. +// Copyright (c) 2014年 Aevitx. All rights reserved. +// + +#import +#import + +#import "XHMacro.h" + +@protocol XHAudioPlayerHelperDelegate + +@optional +- (void)didAudioPlayerBeginPlay:(AVAudioPlayer*)audioPlayer; +- (void)didAudioPlayerStopPlay:(AVAudioPlayer*)audioPlayer; +- (void)didAudioPlayerPausePlay:(AVAudioPlayer*)audioPlayer; + +@end + +@interface XHAudioPlayerHelper : NSObject + +@property (nonatomic, strong) AVAudioPlayer *player; + +@property (nonatomic, copy) NSString *playingFileName; + +@property (nonatomic, assign) id delegate; + +@property (nonatomic, strong) NSIndexPath *playingIndexPathInFeedList;//给动态列表用 + ++ (id)shareInstance; + +- (AVAudioPlayer*)player; +- (BOOL)isPlaying; + +- (void)managerAudioWithFileName:(NSString*)amrName toPlay:(BOOL)toPlay; +- (void)pausePlayingAudio;//暂停 +- (void)stopAudio;//停止 + + + +@end + + diff --git a/MessageDisplayKit/Classes/Views/BaseCollectionViewCell/XHBaseCollectionViewCell.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHBaseTableViewCell.h similarity index 61% rename from MessageDisplayKit/Classes/Views/BaseCollectionViewCell/XHBaseCollectionViewCell.h rename to Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHBaseTableViewCell.h index 40b25f0..fd51340 100644 --- a/MessageDisplayKit/Classes/Views/BaseCollectionViewCell/XHBaseCollectionViewCell.h +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHBaseTableViewCell.h @@ -1,13 +1,13 @@ // -// XHBaseCollectionViewCell.h +// XHBaseTableViewCell.h // MessageDisplayExample // -// Created by 曾 宪华 on 14-5-20. +// Created by dw_iOS on 14-5-20. // Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. // #import -@interface XHBaseCollectionViewCell : UICollectionViewCell +@interface XHBaseTableViewCell : UITableViewCell @end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHBubblePhotoImageView.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHBubblePhotoImageView.h new file mode 100644 index 0000000..a6ce3ad --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHBubblePhotoImageView.h @@ -0,0 +1,49 @@ +// +// XHBubblePhotoImageView.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-28. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import "XHMessageBubbleFactory.h" + +#define kXHBubblePhotoMargin 8.0f // 上下左右的边距 + +@interface XHBubblePhotoImageView : UIView + +/** + * 发送后,需要显示的图片消息的图片,或者是视频的封面 + */ +@property (nonatomic, strong) UIImage *messagePhoto; + +/** + * 加载网络图片的时候,需要用到转圈的控件 + */ +@property (nonatomic, strong) UIActivityIndicatorView *activityIndicatorView; + +/** + * + * + * @param messagePhoto + * @param bubbleMessageType + */ +/** + * 根据目标图片配置三角形具体位置 + * + * @param messagePhoto 目标图片 + * @param thumbnailUrl 目标图片缩略图的URL链接 + * @param originPhotoUrl 目标图片原图的URL链接 + * @param bubbleMessageType 目标消息类型 + */ +- (void)configureMessagePhoto:(UIImage *)messagePhoto thumbnailUrl:(NSString *)thumbnailUrl originPhotoUrl:(NSString *)originPhotoUrl onBubbleMessageType:(XHBubbleMessageType)bubbleMessageType; + +/** + * 获取消息类型比如发送或接收 + * + * @return 消息类型 + */ +- (XHBubbleMessageType)getBubbleMessageType; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHCacheManager.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHCacheManager.h new file mode 100644 index 0000000..6ff4352 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHCacheManager.h @@ -0,0 +1,51 @@ +// +// XHCacheManager.h +// XHImageViewer +// +// Created by 曾 宪华 on 14-2-18. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import + +@interface XHCacheManager : NSObject + +// instancetype ++ (instancetype)shareCacheManager; ++ (instancetype)cacheManagerWithIdentifier:(NSString *)identifier; + +// file/url to uer ++ (void)limitNumberOfCacheFiles:(NSInteger)numberOfCacheFiles; +- (void)limitNumberOfCacheFiles:(NSInteger)numberOfCacheFiles; + ++ (void)removeCacheForURL:(NSURL *)url; +- (void)removeCacheForURL:(NSURL *)url; + ++ (void)removeCacheDirectory; +- (void)removeCacheDirectory; + ++ (unsigned long long)diskSize; +- (unsigned long long)diskSize; + +// NSData caching ++ (void)storeData:(NSData *)data forURL:(NSURL *)url storeMemoryCache:(BOOL)storeMemoryCache; +- (void)storeData:(NSData *)data forURL:(NSURL *)url storeMemoryCache:(BOOL)storeMemoryCache; + ++ (NSData *)localCachedDataWithURL:(NSURL *)url; +- (NSData *)localCachedDataWithURL:(NSURL *)url; + ++ (NSData *)dataWithURL:(NSURL *)url storeMemoryCache:(BOOL)storeMemoryCache; +- (NSData *)dataWithURL:(NSURL *)url storeMemoryCache:(BOOL)storeMemoryCache; + ++ (BOOL)existsDataForURL:(NSURL *)url; +- (BOOL)existsDataForURL:(NSURL *)url; + +// UIImage caching ++ (void)storeMemoryCacheWithImage:(UIImage *)image forURL:(NSURL *)url; +- (void)storeMemoryCacheWithImage:(UIImage *)image forURL:(NSURL *)url; + ++ (UIImage *)imageWithURL:(NSURL *)url storeMemoryCache:(BOOL)storeMemoryCache; +- (UIImage *)imageWithURL:(NSURL *)url storeMemoryCache:(BOOL)storeMemoryCache; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHCaptureHelper.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHCaptureHelper.h new file mode 100644 index 0000000..8e62b50 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHCaptureHelper.h @@ -0,0 +1,21 @@ +// +// XHCaptureHelper.h +// MessageDisplayExample +// +// Created by 曾 宪华 on 14-5-25. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +#import + +typedef void(^DidOutputSampleBufferBlock)(CMSampleBufferRef sampleBuffer); + +@interface XHCaptureHelper : NSObject + +- (void)setDidOutputSampleBufferHandle:(DidOutputSampleBufferBlock)didOutputSampleBuffer; + +- (void)showCaptureOnView:(UIView *)preview; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHConfigurationHelper.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHConfigurationHelper.h new file mode 100644 index 0000000..6474749 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHConfigurationHelper.h @@ -0,0 +1,62 @@ +// +// XHConfigurationHelper.h +// MessageDisplayKit +// +// Created by Jack_iMac on 15/6/30. +// Copyright (c) 2015年 iOS软件开发工程师 曾宪华 热衷于简洁的UI QQ:543413507 http://www.pailixiu.com/blog http://www.pailixiu.com/Jack/personal. All rights reserved. +// + +#import + +// (Input Tool Bar Style Key) +extern NSString *kXHMessageInputViewVoiceNormalImageNameKey; +extern NSString *kXHMessageInputViewVoiceHLImageNameKey; +extern NSString *kXHMessageInputViewVoiceHolderImageNameKey; +extern NSString *kXHMessageInputViewVoiceHolderHLImageNameKey; +extern NSString *kXHMessageInputViewExtensionNormalImageNameKey; +extern NSString *kXHMessageInputViewExtensionHLImageNameKey; +extern NSString *kXHMessageInputViewKeyboardNormalImageNameKey; +extern NSString *kXHMessageInputViewKeyboardHLImageNameKey; +extern NSString *kXHMessageInputViewEmotionNormalImageNameKey; +extern NSString *kXHMessageInputViewEmotionHLImageNameKey; +extern NSString *kXHMessageInputViewBackgroundImageNameKey; +extern NSString *kXHMessageInputViewBackgroundColorKey; +extern NSString *kXHMessageInputViewBorderColorKey; +extern NSString *kXHMessageInputViewBorderWidthKey; +extern NSString *kXHMessageInputViewCornerRadiusKey; +extern NSString *kXHMessageInputViewPlaceHolderTextColorKey; +extern NSString *kXHMessageInputViewPlaceHolderKey; +extern NSString *kXHMessageInputViewTextColorKey; + + +// (Message Table Style Key) +extern NSString *kXHMessageTablePlaceholderImageNameKey; +extern NSString *kXHMessageTableReceivingSolidImageNameKey; +extern NSString *kXHMessageTableSendingSolidImageNameKey; +extern NSString *kXHMessageTableVoiceUnreadImageNameKey; +extern NSString *kXHMessageTableAvatarPalceholderImageNameKey; +extern NSString *kXHMessageTableTimestampBackgroundColorKey; +extern NSString *kXHMessageTableTimestampTextColorKey; +extern NSString *kXHMessageTableAvatarTypeKey; // XHMessageAvatarType for NSNumber, if kXHMessageTableCustomLoadAvatarNetworImageKey is YES, kXHMessageTableAvatarTypeKey is invalid +extern NSString *kXHMessageTableCustomLoadAvatarNetworImageKey; // for NSNumber(BOOL) + +// 优先控制MDK的UI控件样式,比如输入框的按钮图 +@interface XHConfigurationHelper : NSObject + +@property (nonatomic, strong, readonly) NSArray *popMenuTitles; + +@property (nonatomic, strong, readonly) NSDictionary *messageInputViewStyle; + +@property (nonatomic, strong, readonly) NSDictionary *messageTableStyle; + ++ (instancetype)appearance; + +- (void)setupPopMenuTitles:(NSArray *)popMenuTitles; + +// The key from (Input Tool Bar Style Key) +- (void)setupMessageInputViewStyle:(NSDictionary *)messageInputViewStyle; + +// The key from (Message Table Style Key) +- (void)setupMessageTableStyle:(NSDictionary *)messageTableStyle; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHDisplayEmotionViewController.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHDisplayEmotionViewController.h new file mode 100644 index 0000000..573497b --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHDisplayEmotionViewController.h @@ -0,0 +1,13 @@ +// +// XHDisplayEmotionViewController.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-6. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +@interface XHDisplayEmotionViewController : UIViewController + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHDisplayLocationViewController.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHDisplayLocationViewController.h new file mode 100644 index 0000000..82663ab --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHDisplayLocationViewController.h @@ -0,0 +1,18 @@ +// +// XHDisplayLocationViewController.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-6. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import + +#import "XHMessageModel.h" + +@interface XHDisplayLocationViewController : UIViewController + +@property (nonatomic, strong) id message; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHDisplayMediaViewController.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHDisplayMediaViewController.h new file mode 100644 index 0000000..920bb03 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHDisplayMediaViewController.h @@ -0,0 +1,16 @@ +// +// XHDisplayMediaViewController.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-6. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import "XHMessageModel.h" + +@interface XHDisplayMediaViewController : UIViewController + +@property (nonatomic, strong) id message; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHDisplayTextViewController.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHDisplayTextViewController.h new file mode 100644 index 0000000..6fb80d0 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHDisplayTextViewController.h @@ -0,0 +1,16 @@ +// +// XHDisplayTextViewController.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-6. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import "XHMessageModel.h" + +@interface XHDisplayTextViewController : UIViewController + +@property (nonatomic, strong) id message; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHEmotion.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHEmotion.h new file mode 100644 index 0000000..0b84004 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHEmotion.h @@ -0,0 +1,26 @@ +// +// XHEmotion.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-3. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +#define kXHEmotionImageViewSize 60 +#define kXHEmotionMinimumLineSpacing 12 + +@interface XHEmotion : NSObject + +/** + * gif表情的封面图 + */ +@property (nonatomic, strong) UIImage *emotionConverPhoto; + +/** + * gif表情的路径 + */ +@property (nonatomic, copy) NSString *emotionPath; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHEmotionCollectionViewCell.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHEmotionCollectionViewCell.h new file mode 100644 index 0000000..2b7ed72 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHEmotionCollectionViewCell.h @@ -0,0 +1,21 @@ +// +// XHEmotionCollectionViewCell.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-3. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import "XHEmotion.h" + +#define kXHEmotionCollectionViewCellIdentifier @"XHEmotionCollectionViewCellIdentifier" + +@interface XHEmotionCollectionViewCell : UICollectionViewCell + +/** + * 需要显示和配置的gif表情对象 + */ +@property (nonatomic, strong) XHEmotion *emotion; + +@end diff --git a/Example/MessageDisplayExample/MessageDisplayExample/XHMessageRootViewController.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHEmotionCollectionViewFlowLayout.h similarity index 53% rename from Example/MessageDisplayExample/MessageDisplayExample/XHMessageRootViewController.h rename to Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHEmotionCollectionViewFlowLayout.h index 4706c65..bea3149 100644 --- a/Example/MessageDisplayExample/MessageDisplayExample/XHMessageRootViewController.h +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHEmotionCollectionViewFlowLayout.h @@ -1,14 +1,14 @@ // -// XHMessageRootViewController.h +// XHEmotionCollectionViewFlowLayout.h // MessageDisplayExample // -// Created by qtone-1 on 14-4-26. +// Created by HUAJIE-1 on 14-5-3. // Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. // #import -#import "XHBaseTableViewController.h" +#import "XHEmotionManager.h" -@interface XHMessageRootViewController : XHBaseTableViewController +@interface XHEmotionCollectionViewFlowLayout : UICollectionViewFlowLayout @end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHEmotionManager.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHEmotionManager.h new file mode 100644 index 0000000..8fe48be --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHEmotionManager.h @@ -0,0 +1,20 @@ +// +// XHEmotionManager.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-3. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import "XHEmotion.h" + +@interface XHEmotionManager : NSObject + +@property (nonatomic, copy) NSString *emotionName; +/** + * 某一类表情的数据源 + */ +@property (nonatomic, strong) NSMutableArray *emotions; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHEmotionManagerView.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHEmotionManagerView.h new file mode 100644 index 0000000..a807b5e --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHEmotionManagerView.h @@ -0,0 +1,75 @@ +// +// XHEmotionManagerView.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-3. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import "XHEmotionManager.h" +#import "XHMacro.h" + +#define kXHEmotionPerRowItemCount (kIsiPad ? 10 : 4) +#define kXHEmotionPageControlHeight 38 +#define kXHEmotionSectionBarHeight 36 + +@protocol XHEmotionManagerViewDelegate + +@optional +/** + * 第三方gif表情被点击的回调事件 + * + * @param emotion 被点击的gif表情Model + * @param indexPath 被点击的位置 + */ +- (void)didSelecteEmotion:(XHEmotion *)emotion atIndexPath:(NSIndexPath *)indexPath; + +@end + +@protocol XHEmotionManagerViewDataSource + +@required +/** + * 通过数据源获取统一管理一类表情的回调方法 + * + * @param column 列数 + * + * @return 返回统一管理表情的Model对象 + */ +- (XHEmotionManager *)emotionManagerForColumn:(NSInteger)column; + +/** + * 通过数据源获取一系列的统一管理表情的Model数组 + * + * @return 返回包含统一管理表情Model元素的数组 + */ +- (NSArray *)emotionManagersAtManager; + +/** + * 通过数据源获取总共有多少类gif表情 + * + * @return 返回总数 + */ +- (NSInteger)numberOfEmotionManagers; + +@end + +@interface XHEmotionManagerView : UIView + +@property (nonatomic, weak) id delegate; + +@property (nonatomic, weak) id dataSource; + +/** + * 是否显示表情商店的按钮 + */ +@property (nonatomic, assign) BOOL isShowEmotionStoreButton; // default is YES + +/** + * 根据数据源刷新UI布局和数据 + */ +- (void)reloadData; + + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHEmotionSectionBar.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHEmotionSectionBar.h new file mode 100644 index 0000000..853a28f --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHEmotionSectionBar.h @@ -0,0 +1,41 @@ +// +// XHEmotionSectionBar.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-3. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import "XHEmotionManager.h" + +@protocol XHEmotionSectionBarDelegate + +/** + * 点击某一类gif表情的回调方法 + * + * @param emotionManager 被点击的管理表情Model对象 + * @param section 被点击的位置 + */ +- (void)didSelecteEmotionManager:(XHEmotionManager *)emotionManager atSection:(NSInteger)section; + +@end + +@interface XHEmotionSectionBar : UIView + +@property (nonatomic, weak) id delegate; + +/** + * 数据源 + */ +@property (nonatomic, strong) NSArray *emotionManagers; + +- (instancetype)initWithFrame:(CGRect)frame showEmotionStoreButton:(BOOL)isShowEmotionStoreButtoned; + + +/** + * 根据数据源刷新UI布局和数据 + */ +- (void)reloadData; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHFileAttribute.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHFileAttribute.h new file mode 100644 index 0000000..5c33dd1 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHFileAttribute.h @@ -0,0 +1,18 @@ +// +// XHFileAttribute.h +// XHImageViewer +// +// Created by 曾 宪华 on 14-2-18. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +@interface XHFileAttribute : NSObject + +@property (nonatomic, strong) NSString *filePath; +@property (nonatomic, strong) NSDictionary *fileAttributes; +@property (nonatomic, readonly) NSDate *fileModificationDate; +- (id)initWithPath:(NSString *)filePath attributes:(NSDictionary *)attributes; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHFoundationMacro.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHFoundationMacro.h new file mode 100644 index 0000000..9055804 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHFoundationMacro.h @@ -0,0 +1,39 @@ +// +// XHFoundationMacro.h +// MessageDisplayExample +// +// Created by dw_iOS on 14-5-22. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#ifndef MessageDisplayExample_XHFoundationMacro_h +#define MessageDisplayExample_XHFoundationMacro_h + +#ifdef DEBUG +# define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__); +#else +# define DLog(...) +#endif + +// block self +#define WEAKSELF typeof(self) __weak weakSelf = self; +#define STRONGSELF typeof(weakSelf) __strong strongSelf = weakSelf; + +// device verson float value +#define CURRENT_SYS_VERSION [[[UIDevice currentDevice] systemVersion] floatValue] + +// Size +#define MDK_SCREEN_WIDTH [[UIScreen mainScreen] bounds].size.width +#define MDK_SCREEN_HEIGHT [[UIScreen mainScreen] bounds].size.height + +// iPad +#define kIsiPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) +#define kIs_iPhone (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) +#define kIs_iPhone_6 (kIs_iPhone && MDK_SCREEN_HEIGHT == 667.0) +#define kIs_iPhone_6P (kIs_iPhone && MDK_SCREEN_HEIGHT == 736.0) + +// image STRETCH +#define XH_STRETCH_IMAGE(image, edgeInsets) (CURRENT_SYS_VERSION < 6.0 ? [image stretchableImageWithLeftCapWidth:edgeInsets.left topCapHeight:edgeInsets.top] : [image resizableImageWithCapInsets:edgeInsets resizingMode:UIImageResizingModeStretch]) + + +#endif diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHHTTPClient.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHHTTPClient.h new file mode 100644 index 0000000..557a726 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHHTTPClient.h @@ -0,0 +1,28 @@ +// +// XHHTTPClient.h +// MessageDisplayExample +// +// Created by 曾 宪华 on 14-5-30. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +#import "XHOperationNetworkKit.h" + +#define kXHBaseHomeURL @"http://.......set there" + +#define XHHTTPClientTimeoutInterval 30 + +@interface XHHTTPClient : NSObject + ++ (void)GETPath:(NSString *)urlString parameters:(NSDictionary *)parameters jsonSuccessHandler:(XHJSONSuccessHandler)jsonSuccessHandler + failureHandler:(XHHTTPFailureHandler)failureHandler; + ++ (void)POSTPath:(NSString *)urlString parameters:(NSDictionary *)parameters jsonSuccessHandler:(XHJSONSuccessHandler)jsonSuccessHandler + failureHandler:(XHHTTPFailureHandler)failureHandler; + ++ (void)DELETEPath:(NSString *)urlString parameters:(NSDictionary *)parameters jsonSuccessHandler:(XHJSONSuccessHandler)jsonSuccessHandler + failureHandler:(XHHTTPFailureHandler)failureHandler; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHLocationHelper.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHLocationHelper.h new file mode 100644 index 0000000..636aa1e --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHLocationHelper.h @@ -0,0 +1,18 @@ +// +// XHLocationHelper.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-8. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import + +typedef void(^DidGetGeolocationsCompledBlock)(NSArray *placemarks); + +@interface XHLocationHelper : NSObject + +- (void)getCurrentGeolocationsCompled:(DidGetGeolocationsCompledBlock)compled; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMacro.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMacro.h new file mode 100644 index 0000000..6d48864 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMacro.h @@ -0,0 +1,24 @@ +// +// XHMacro.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#ifndef MessageDisplayExample_XHMacro_h +#define MessageDisplayExample_XHMacro_h + +// Foundation 框架宏定义 +#import "XHFoundationMacro.h" + +// UIKit 框架宏定义 +#import "XHUIKitMacro.h" + + +// User Default Configure Value + +// Max record Time +#define kVoiceRecorderTotalTime 60.0 + +#endif diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessage.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessage.h new file mode 100644 index 0000000..cf83021 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessage.h @@ -0,0 +1,166 @@ +// +// XHMessage.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import +#import "XHMessageModel.h" + +@interface XHMessage : NSObject + +@property (nonatomic, copy) NSString *text; + +@property (nonatomic, strong) UIImage *photo; +@property (nonatomic, copy) NSString *thumbnailUrl; +@property (nonatomic, copy) NSString *originPhotoUrl; + +@property (nonatomic, strong) UIImage *videoConverPhoto; +@property (nonatomic, copy) NSString *videoPath; +@property (nonatomic, copy) NSString *videoUrl; + +@property (nonatomic, copy) NSString *voicePath; +@property (nonatomic, copy) NSString *voiceUrl; +@property (nonatomic, copy) NSString *voiceDuration; + +@property (nonatomic, copy) NSString *emotionPath; + +@property (nonatomic, strong) UIImage *localPositionPhoto; +@property (nonatomic, copy) NSString *geolocations; +@property (nonatomic, strong) CLLocation *location; + +@property (nonatomic, strong) UIImage *avatar; +@property (nonatomic, copy) NSString *avatarUrl; + +@property (nonatomic, copy) NSString *sender; + +@property (nonatomic, strong) NSDate *timestamp; + +@property (nonatomic, assign) BOOL shouldShowUserName; + +@property (nonatomic, assign) BOOL sended; + +@property (nonatomic, assign) XHBubbleMessageMediaType messageMediaType; + +@property (nonatomic, assign) XHBubbleMessageType bubbleMessageType; + +@property (nonatomic) BOOL isRead; + + +/** + * 初始化文本消息 + * + * @param text 发送的目标文本 + * @param sender 发送者的名称 + * @param date 发送的时间 + * + * @return 返回Message model 对象 + */ +- (instancetype)initWithText:(NSString *)text + sender:(NSString *)sender + timestamp:(NSDate *)timestamp; + +/** + * 初始化图片类型的消息 + * + * @param photo 目标图片 + * @param thumbnailUrl 目标图片在服务器的缩略图地址 + * @param originPhotoUrl 目标图片在服务器的原图地址 + * @param sender 发送者 + * @param date 发送时间 + * + * @return 返回Message model 对象 + */ +- (instancetype)initWithPhoto:(UIImage *)photo + thumbnailUrl:(NSString *)thumbnailUrl + originPhotoUrl:(NSString *)originPhotoUrl + sender:(NSString *)sender + timestamp:(NSDate *)timestamp; + +/** + * 初始化视频类型的消息 + * + * @param videoConverPhoto 目标视频的封面图 + * @param videoPath 目标视频的本地路径,如果是下载过,或者是从本地发送的时候,会存在 + * @param videoUrl 目标视频在服务器上的地址 + * @param sender 发送者 + * @param date 发送时间 + * + * @return 返回Message model 对象 + */ +- (instancetype)initWithVideoConverPhoto:(UIImage *)videoConverPhoto + videoPath:(NSString *)videoPath + videoUrl:(NSString *)videoUrl + sender:(NSString *)sender + timestamp:(NSDate *)timestamp; + +/** + * 初始化语音类型的消息 + * + * @param voicePath 目标语音的本地路径 + * @param voiceUrl 目标语音在服务器的地址 + * @param voiceDuration 目标语音的时长 + * @param sender 发送者 + * @param date 发送时间 + * + * @return 返回Message model 对象 + */ +- (instancetype)initWithVoicePath:(NSString *)voicePath + voiceUrl:(NSString *)voiceUrl + voiceDuration:(NSString *)voiceDuration + sender:(NSString *)sender + timestamp:(NSDate *)timestamp; + +/** + * 初始化语音类型的消息。增加已读未读标记 + * + * @param voicePath 目标语音的本地路径 + * @param voiceUrl 目标语音在服务器的地址 + * @param voiceDuration 目标语音的时长 + * @param sender 发送者 + * @param date 发送时间 + * @param isRead 已读未读标记 + * + * @return 返回Message model 对象 + */ +- (instancetype)initWithVoicePath:(NSString *)voicePath + voiceUrl:(NSString *)voiceUrl + voiceDuration:(NSString *)voiceDuration + sender:(NSString *)sender + timestamp:(NSDate *)timestamp + isRead:(BOOL)isRead; + +/** + * 初始化gif表情类型的消息 + * + * @param emotionPath 表情的路径 + * @param sender 发送者 + * @param timestamp 发送时间 + * + * @return 返回Message model 对象 + */ +- (instancetype)initWithEmotionPath:(NSString *)emotionPath + sender:(NSString *)sender + timestamp:(NSDate *)timestamp; + +/** + * 初始化地理位置的消息 + * + * @param localPositionPhoto 地理位置默认显示的图 + * @param geolocations 地理位置的信息 + * @param location 地理位置的经纬度 + * @param sender 发送者 + * @param timestamp 发送时间 + * + * @return 返回Message model 对象 + */ +- (instancetype)initWithLocalPositionPhoto:(UIImage *)localPositionPhoto + geolocations:(NSString *)geolocations + location:(CLLocation *)location + sender:(NSString *)sender + timestamp:(NSDate *)timestamp; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageAvatarFactory.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageAvatarFactory.h new file mode 100644 index 0000000..acd5319 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageAvatarFactory.h @@ -0,0 +1,26 @@ +// +// XHMessageAvatarFactory.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-25. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +// 头像大小以及头像与其他控件的距离 +static CGFloat const kXHAvatarImageSize = 40.0f; +static CGFloat const kXHAlbumAvatarSpacing = 15.0f; + +typedef NS_ENUM(NSInteger, XHMessageAvatarType) { + XHMessageAvatarTypeNormal = 0, + XHMessageAvatarTypeSquare, + XHMessageAvatarTypeCircle +}; + +@interface XHMessageAvatarFactory : NSObject + ++ (UIImage *)avatarImageNamed:(UIImage *)originImage + messageAvatarType:(XHMessageAvatarType)type; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageBubbleFactory.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageBubbleFactory.h new file mode 100644 index 0000000..6f225da --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageBubbleFactory.h @@ -0,0 +1,57 @@ +// +// XHMessageBubbleFactory.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-25. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +typedef NS_ENUM(NSInteger, XHBubbleMessageType) { + XHBubbleMessageTypeSending = 0, // 发送 + XHBubbleMessageTypeReceiving // 接收 +}; + +typedef NS_ENUM(NSUInteger, XHBubbleImageViewStyle) { + XHBubbleImageViewStyleWeChat = 0 +}; + +typedef NS_ENUM(NSInteger, XHBubbleMessageMediaType) { + XHBubbleMessageMediaTypeText = 0, + XHBubbleMessageMediaTypePhoto = 1, + XHBubbleMessageMediaTypeVideo = 2, + XHBubbleMessageMediaTypeVoice = 3, + XHBubbleMessageMediaTypeEmotion = 4, + XHBubbleMessageMediaTypeLocalPosition = 5, +}; + +typedef NS_ENUM(NSInteger, XHBubbleMessageMenuSelecteType) { + XHBubbleMessageMenuSelecteTypeTextCopy = 0, + XHBubbleMessageMenuSelecteTypeTextTranspond = 1, + XHBubbleMessageMenuSelecteTypeTextFavorites = 2, + XHBubbleMessageMenuSelecteTypeTextMore = 3, + + XHBubbleMessageMenuSelecteTypePhotoCopy = 4, + XHBubbleMessageMenuSelecteTypePhotoTranspond = 5, + XHBubbleMessageMenuSelecteTypePhotoFavorites = 6, + XHBubbleMessageMenuSelecteTypePhotoMore = 7, + + XHBubbleMessageMenuSelecteTypeVideoTranspond = 8, + XHBubbleMessageMenuSelecteTypeVideoFavorites = 9, + XHBubbleMessageMenuSelecteTypeVideoMore = 10, + + XHBubbleMessageMenuSelecteTypeVoicePlay = 11, + XHBubbleMessageMenuSelecteTypeVoiceFavorites = 12, + XHBubbleMessageMenuSelecteTypeVoiceTurnToText = 13, + XHBubbleMessageMenuSelecteTypeVoiceMore = 14, +}; + +@interface XHMessageBubbleFactory : NSObject + ++ (UIImage *)bubbleImageViewForType:(XHBubbleMessageType)type + style:(XHBubbleImageViewStyle)style + meidaType:(XHBubbleMessageMediaType)mediaType; + + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageBubbleHelper.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageBubbleHelper.h new file mode 100644 index 0000000..0295c17 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageBubbleHelper.h @@ -0,0 +1,17 @@ +// +// XHMessageBubbleHelper.h +// MessageDisplayExample +// +// Created by 曾 宪华 on 14-6-2. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +@interface XHMessageBubbleHelper : NSObject + ++ (instancetype)sharedMessageBubbleHelper; + +- (NSAttributedString *)bubbleAttributtedStringWithText:(NSString *)text; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageBubbleView.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageBubbleView.h new file mode 100644 index 0000000..c363f1d --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageBubbleView.h @@ -0,0 +1,125 @@ +// +// XHMessageBubbleView.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +// Views +#import "XHMessageTextView.h" +#import "XHMessageInputView.h" +#import "XHBubblePhotoImageView.h" +#import "SETextView.h" + +#import "FLAnimatedImageView.h" +#import "FLAnimatedImage.h" + +// Macro +#import "XHMacro.h" + +// Model +#import "XHMessage.h" + +// Factorys +#import "XHMessageAvatarFactory.h" +#import "XHMessageVoiceFactory.h" + +#define kXHMessageBubbleDisplayMaxLine 200 + +#define kXHTextLineSpacing 3.0 + +@interface XHMessageBubbleView : UIView + +/** + * 目标消息Model对象 + */ +@property (nonatomic, strong, readonly) id message; + +/** + * 自定义显示文本消息控件,子类化的原因有两个,第一个是屏蔽Menu的显示。第二是传递手势到下一层,因为文本需要双击的手势 + */ +@property (nonatomic, weak, readonly) SETextView *displayTextView; + +/** + * 用于显示气泡的ImageView控件 + */ +@property (nonatomic, weak, readonly) UIImageView *bubbleImageView; + +/** + * 专门用于gif表情显示控件 + */ +@property (nonatomic, weak, readonly) FLAnimatedImageView *emotionImageView; + +/** + * 用于显示语音的控件,并且支持播放动画 + */ +@property (nonatomic, weak, readonly) UIImageView *animationVoiceImageView; + +/** + * 用于显示语音未读的控件,小圆点 + */ +@property (nonatomic, weak, readonly) UIImageView *voiceUnreadDotImageView; + +/** + * 用于显示语音时长的label + */ +@property (nonatomic, weak, readonly) UILabel *voiceDurationLabel; + +/** + * 用于显示仿微信发送图片的控件 + */ +@property (nonatomic, weak, readonly) XHBubblePhotoImageView *bubblePhotoImageView; + +/** + * 显示语音播放的图片控件 + */ +@property (nonatomic, weak, readonly) UIImageView *videoPlayImageView; + +/** + * 显示地理位置的文本控件 + */ +@property (nonatomic, weak, readonly) UILabel *geolocationsLabel; + +/** + * 设置文本消息的字体 + */ +@property (nonatomic, strong) UIFont *font UI_APPEARANCE_SELECTOR; + +/** + * 初始化消息内容显示控件的方法 + * + * @param frame 目标Frame + * @param message 目标消息Model对象 + * + * @return 返回XHMessageBubbleView类型的对象 + */ +- (instancetype)initWithFrame:(CGRect)frame + message:(id )message; + +/** + * 获取气泡相对于父试图的位置 + * + * @return 返回气泡的位置 + */ +- (CGRect)bubbleFrame; + +/** + * 根据消息Model对象配置消息显示内容 + * + * @param message 目标消息Model对象 + */ +- (void)configureCellWithMessage:(id )message; + +/** + * 根据消息Model对象计算消息内容的高度 + * + * @param message 目标消息Model对象 + * + * @return 返回所需高度 + */ ++ (CGFloat)calculateCellHeightWithMessage:(id )message; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageInputView.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageInputView.h new file mode 100644 index 0000000..8b7e408 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageInputView.h @@ -0,0 +1,171 @@ +// +// XHMessageInputView.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +#import "XHMessageTextView.h" + +typedef NS_ENUM(NSInteger, XHMessageInputViewStyle) { + // iOS7样式的 + XHMessageInputViewStyleFlat +}; + +@protocol XHMessageInputViewDelegate + +@required + +/** + * 输入框刚好开始编辑 + * + * @param messageInputTextView 输入框对象 + */ +- (void)inputTextViewDidBeginEditing:(XHMessageTextView *)messageInputTextView; + +/** + * 输入框将要开始编辑 + * + * @param messageInputTextView 输入框对象 + */ +- (void)inputTextViewWillBeginEditing:(XHMessageTextView *)messageInputTextView; + +@optional + +/** + * 在发送文本和语音之间发送改变时,会触发这个回调函数 + * + * @param changed 是否改为发送语音状态 + */ +- (void)didChangeSendVoiceAction:(BOOL)changed; + +/** + * 发送文本消息,包括系统的表情 + * + * @param text 目标文本消息 + */ +- (void)didSendTextAction:(NSString *)text; + +/** + * 点击+号按钮Action + */ +- (void)didSelectedMultipleMediaAction; + +/** + * 按下錄音按鈕 "準備" 錄音 + */ +- (void)prepareRecordingVoiceActionWithCompletion:(BOOL (^)(void))completion; +/** + * 开始录音 + */ +- (void)didStartRecordingVoiceAction; +/** + * 手指向上滑动取消录音 + */ +- (void)didCancelRecordingVoiceAction; +/** + * 松开手指完成录音 + */ +- (void)didFinishRecoingVoiceAction; +/** + * 当手指离开按钮的范围内时,主要为了通知外部的HUD + */ +- (void)didDragOutsideAction; +/** + * 当手指再次进入按钮的范围内时,主要也是为了通知外部的HUD + */ +- (void)didDragInsideAction; + +/** + * 发送第三方表情 + * + * @param facePath 目标表情的本地路径 + */ +- (void)didSendFaceAction:(BOOL)sendFace; + +@end + +@interface XHMessageInputView : UIImageView + +@property (nonatomic, weak) id delegate; + +/** + * 用于输入文本消息的输入框 + */ +@property (nonatomic, weak, readonly) XHMessageTextView *inputTextView; + +/** + * 当前输入工具条的样式 + */ +@property (nonatomic, assign) XHMessageInputViewStyle messageInputViewStyle; // default is XHMessageInputViewStyleFlat + +/** + * 是否允许发送语音 + */ +@property (nonatomic, assign) BOOL allowsSendVoice; // default is YES + +/** + * 是否允许发送多媒体 + */ +@property (nonatomic, assign) BOOL allowsSendMultiMedia; // default is YES + +/** + * 是否支持发送表情 + */ +@property (nonatomic, assign) BOOL allowsSendFace; // default is YES + +/** + * 切换文本和语音的按钮 + */ +@property (nonatomic, weak, readonly) UIButton *voiceChangeButton; + +/** + * +号按钮 + */ +@property (nonatomic, weak, readonly) UIButton *multiMediaSendButton; + +/** + * 第三方表情按钮 + */ +@property (nonatomic, weak, readonly) UIButton *faceSendButton; + +/** + * 语音录制按钮 + */ +@property (nonatomic, weak, readonly) UIButton *holdDownButton; + +#pragma mark - Message input view + +/** + * 动态改变高度 + * + * @param changeInHeight 目标变化的高度 + */ +- (void)adjustTextViewHeightBy:(CGFloat)changeInHeight; + +/** + * 获取输入框内容字体行高 + * + * @return 返回行高 + */ ++ (CGFloat)textViewLineHeight; + +/** + * 获取最大行数 + * + * @return 返回最大行数 + */ ++ (CGFloat)maxLines; + +/** + * 获取根据最大行数和每行高度计算出来的最大显示高度 + * + * @return 返回最大显示高度 + */ ++ (CGFloat)maxHeight; + + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageModel.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageModel.h new file mode 100644 index 0000000..b58ee20 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageModel.h @@ -0,0 +1,57 @@ +// +// XHMessageModel.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import +#import "XHMessageBubbleFactory.h" + +@class XHMessage; + +@protocol XHMessageModel + +@required +- (NSString *)text; + +- (UIImage *)photo; +- (NSString *)thumbnailUrl; +- (NSString *)originPhotoUrl; + +- (UIImage *)videoConverPhoto; +- (NSString *)videoPath; +- (NSString *)videoUrl; + +- (NSString *)voicePath; +- (NSString *)voiceUrl; +- (NSString *)voiceDuration; + +- (UIImage *)localPositionPhoto; +- (NSString *)geolocations; +- (CLLocation *)location; + +- (NSString *)emotionPath; + +- (UIImage *)avatar; +- (NSString *)avatarUrl; + +- (XHBubbleMessageMediaType)messageMediaType; + +- (XHBubbleMessageType)bubbleMessageType; + +@optional + +- (BOOL)shouldShowUserName; + +- (NSString *)sender; + +- (NSDate *)timestamp; + +- (BOOL)isRead; +- (void)setIsRead:(BOOL)isRead; + +@end + diff --git a/MessageDisplayKit/Classes/Controllers/XHBaseNavigationController/XHBaseNavigationController.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageTableView.h similarity index 61% rename from MessageDisplayKit/Classes/Controllers/XHBaseNavigationController/XHBaseNavigationController.h rename to Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageTableView.h index 8fd3d10..432bf08 100644 --- a/MessageDisplayKit/Classes/Controllers/XHBaseNavigationController/XHBaseNavigationController.h +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageTableView.h @@ -1,13 +1,13 @@ // -// XHBaseNavigationController.h +// XHMessageTableView.h // MessageDisplayExample // -// Created by qtone-1 on 14-5-6. +// Created by HUAJIE-1 on 14-4-24. // Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. // #import -@interface XHBaseNavigationController : UINavigationController +@interface XHMessageTableView : UITableView @end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageTableViewCell.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageTableViewCell.h new file mode 100644 index 0000000..e8b84db --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageTableViewCell.h @@ -0,0 +1,126 @@ +// +// XHMessageTableViewCell.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +#import "XHBaseTableViewCell.h" +#import "XHConfigurationHelper.h" + +#import "XHMessageBubbleView.h" +#import "UIView+XHRemoteImage.h" + +#import "LKBadgeView.h" + +@class XHMessageTableViewCell; + +@protocol XHMessageTableViewCellDelegate + +@optional +/** + * 点击多媒体消息的时候统一触发这个回调 + * + * @param message 被操作的目标消息Model + * @param indexPath 该目标消息在哪个IndexPath里面 + * @param messageTableViewCell 目标消息在该Cell上 + */ +- (void)multiMediaMessageDidSelectedOnMessage:(id )message atIndexPath:(NSIndexPath *)indexPath onMessageTableViewCell:(XHMessageTableViewCell *)messageTableViewCell; + +/** + * 双击文本消息,触发这个回调 + * + * @param message 被操作的目标消息Model + * @param indexPath 该目标消息在哪个IndexPath里面 + */ +- (void)didDoubleSelectedOnTextMessage:(id )message atIndexPath:(NSIndexPath *)indexPath; + +/** + * 点击消息发送者的头像回调方法 + * + * @param indexPath 该目标消息在哪个IndexPath里面 + */ +- (void)didSelectedAvatarOnMessage:(id )message atIndexPath:(NSIndexPath *)indexPath; + +/** + * Menu Control Selected Item + * + * @param bubbleMessageMenuSelecteType 点击item后,确定点击类型 + */ +- (void)menuDidSelectedAtBubbleMessageMenuSelecteType:(XHBubbleMessageMenuSelecteType)bubbleMessageMenuSelecteType; + +@end + +@interface XHMessageTableViewCell : XHBaseTableViewCell + +@property (nonatomic, weak) id delegate; + +/** + * 自定义多媒体消息内容View + */ +@property (nonatomic, weak, readonly) XHMessageBubbleView *messageBubbleView; + +/** + * 头像按钮 + */ +@property (nonatomic, weak, readonly) UIButton *avatarButton; + +/** + * 用户名标签 + */ +@property (nonatomic, weak, readonly) UILabel *userNameLabel; + +/** + * 时间轴Label + */ +@property (nonatomic, weak, readonly) LKBadgeView *timestampLabel; + +/** + * Cell所在的位置,用于Cell delegate回调 + */ +@property (nonatomic, strong) NSIndexPath *indexPath; + +/** + * 获取消息类型 + * + * @return 返回消息类型,比如是发送消息,又或者是接收消息 + */ +- (XHBubbleMessageType)bubbleMessageType; + +/** + * 初始化Cell的方法,必须先调用这个,不然不会初始化显示控件 + * + * @param message 需显示的目标消息Model + * @param displayTimestamp 预先告知是否需要显示时间轴Label + * @param cellIdentifier 重用Cell的标识 + * + * @return 返回消息Cell对象 + */ +- (instancetype)initWithMessage:(id )message + displaysTimestamp:(BOOL)displayTimestamp + reuseIdentifier:(NSString *)cellIdentifier; + +/** + * 根据消息Model配置Cell的显示内容 + * + * @param message 目标消息Model + * @param displayTimestamp 配置的时候告知是否需要显示时间轴Label + */ +- (void)configureCellWithMessage:(id )message + displaysTimestamp:(BOOL)displayTimestamp; + +/** + * 根据消息Model计算Cell的高度 + * + * @param message 目标消息Model + * @param displayTimestamp 是否显示时间轴Label + * + * @return 返回Cell所需要的高度 + */ ++ (CGFloat)calculateCellHeightWithMessage:(id )message + displaysTimestamp:(BOOL)displayTimestamp; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageTableViewController.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageTableViewController.h new file mode 100644 index 0000000..75ddc0d --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageTableViewController.h @@ -0,0 +1,318 @@ +// +// XHMessageTableViewController.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +// Model +#import "XHMessage.h" + +// Views +#import "XHMessageTableView.h" +#import "XHMessageTableViewCell.h" +#import "XHMessageInputView.h" +#import "XHShareMenuView.h" +#import "XHEmotionManagerView.h" +#import "XHVoiceRecordHUD.h" + +// Factory +#import "XHMessageBubbleFactory.h" +#import "XHMessageVideoConverPhotoFactory.h" + +// Helper +#import "XHPhotographyHelper.h" +#import "XHLocationHelper.h" +#import "XHVoiceRecordHelper.h" + +// Categorys +#import "UIScrollView+XHkeyboardControl.h" + +@protocol XHMessageTableViewControllerDelegate + +@optional +/** + * 发送文本消息的回调方法 + * + * @param text 目标文本字符串 + * @param sender 发送者的名字 + * @param date 发送时间 + */ +- (void)didSendText:(NSString *)text fromSender:(NSString *)sender onDate:(NSDate *)date; + +/** + * 发送图片消息的回调方法 + * + * @param photo 目标图片对象,后续有可能会换 + * @param sender 发送者的名字 + * @param date 发送时间 + */ +- (void)didSendPhoto:(UIImage *)photo fromSender:(NSString *)sender onDate:(NSDate *)date; + +/** + * 发送视频消息的回调方法 + * + * @param videoConverPhoto 目标视频的封面图 + * @param videoPath 目标视频本地路径 + * @param sender 发送者的名字 + * @param date 发送时间 + */ +- (void)didSendVideoConverPhoto:(UIImage *)videoConverPhoto videoPath:(NSString *)videoPath fromSender:(NSString *)sender onDate:(NSDate *)date; + +/** + * 发送语音消息的回调方法 + * + * @param voicePath 目标语音本地路径 + * @param voiceDuration 目标语音时长 + * @param sender 发送者的名字 + * @param date 发送时间 + */ +- (void)didSendVoice:(NSString *)voicePath voiceDuration:(NSString*)voiceDuration fromSender:(NSString *)sender onDate:(NSDate *)date; + +/** + * 发送第三方表情消息的回调方法 + * + * @param facePath 目标第三方表情的本地路径 + * @param sender 发送者的名字 + * @param date 发送时间 + */ +- (void)didSendEmotion:(NSString *)emotionPath fromSender:(NSString *)sender onDate:(NSDate *)date; + +/** + * 发送地理位置的回调方法 + * + * @param geoLocationsPhoto 目标显示默认图 + * @param geolocations 目标地理信息 + * @param location 目标地理经纬度 + * @param sender 发送者 + * @param date 发送时间 + */ +- (void)didSendGeoLocationsPhoto:(UIImage *)geoLocationsPhoto geolocations:(NSString *)geolocations location:(CLLocation *)location fromSender:(NSString *)sender onDate:(NSDate *)date; + +/** + * 是否显示时间轴Label的回调方法 + * + * @param indexPath 目标消息的位置IndexPath + * + * @return 根据indexPath获取消息的Model的对象,从而判断返回YES or NO来控制是否显示时间轴Label + */ +- (BOOL)shouldDisplayTimestampForRowAtIndexPath:(NSIndexPath *)indexPath; + +/** + * 配置Cell的样式或者字体 + * + * @param cell 目标Cell + * @param indexPath 目标Cell所在位置IndexPath + */ +- (void)configureCell:(XHMessageTableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath; + +/** + * 协议回掉是否支持用户手动滚动 + * + * @return 返回YES or NO + */ +- (BOOL)shouldPreventScrollToBottomWhileUserScrolling; + +/** + * 判断是否支持下拉加载更多消息 + * + * @return 返回BOOL值,判定是否拥有这个功能 + */ +- (BOOL)shouldLoadMoreMessagesScrollToTop; + +/** + * 下拉加载更多消息,只有在支持下拉加载更多消息的情况下才会调用。 + */ +- (void)loadMoreMessagesScrollTotop; + +/** + * 配置TableViewCell高度的方法,如果你想定制自己的Cell样式,那么你必须要实现DataSource中的方法 + - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath targetMessage:(id)message; + * + * @param tableView 目标TableView + * @param indexPath 目标IndexPath + * @param message 目标消息Model + * + * @return 返回计算好的Cell高度 + */ +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath targetMessage:(id)message; + +@end + +@protocol XHMessageTableViewControllerDataSource + +@required +- (id )messageForRowAtIndexPath:(NSIndexPath *)indexPath; + +@optional +/** + * 配置TableViewCell的方法,如果你想定制自己的Cell样式,那么你必须要实现Delegate中的方法 + - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath targetMessage:(id)message; + * + * @param tableView 目标TableView + * @param indexPath 目标IndexPath + * @param message 目标消息Model + * + * @return 返回UITableViewCell或者继承于UITableViewCell的实例化对象 + */ +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath targetMessage:(id)message; + +@end + +@interface XHMessageTableViewController : UIViewController + +@property (nonatomic, weak) id delegate; + +@property (nonatomic, weak) id dataSource; + +@property (nonatomic, assign, readonly) XHInputViewType textViewInputViewType; + +@property (nonatomic, assign) UIActivityIndicatorViewStyle loadMoreActivityIndicatorViewStyle; + +/** + * 数据源,显示多少消息 + */ +@property (nonatomic, strong) NSMutableArray *messages; + +/** + * 第三方接入的功能,也包括系统自身的功能,比如拍照、发送地理位置 + */ +@property (nonatomic, strong) NSArray *shareMenuItems; + +/** + * 消息的主体,默认为nil + */ +@property (nonatomic, copy) NSString *messageSender; + +/** + * 用于显示消息的TableView + */ +@property (nonatomic, weak, readonly) XHMessageTableView *messageTableView; + +/** + * 用于显示发送消息类型控制的工具条,在底部 + */ +@property (nonatomic, weak, readonly) XHMessageInputView *messageInputView; + +/** + * 替换键盘的位置的第三方功能控件 + */ +@property (nonatomic, weak, readonly) XHShareMenuView *shareMenuView; + + +/** + * 管理第三方gif表情的控件 + */ +@property (nonatomic, weak, readonly) XHEmotionManagerView *emotionManagerView; + +/** + * 是否正在加载更多旧的消息数据 + */ +@property (nonatomic, assign) BOOL loadingMoreMessage; + +#pragma mark - Message View Controller Default stup +/** + * 是否允许手势关闭键盘,默认是允许 + */ +@property (nonatomic, assign) BOOL allowsPanToDismissKeyboard; // default is YES + +/** + * 是否允许发送语音 + */ +@property (nonatomic, assign) BOOL allowsSendVoice; // default is YES + +/** + * 是否允许发送多媒体 + */ +@property (nonatomic, assign) BOOL allowsSendMultiMedia; // default is YES + +/** + * 是否支持发送表情 + */ +@property (nonatomic, assign) BOOL allowsSendFace; // default is YES + +/** + * 输入框的样式,默认为扁平化 + */ +@property (nonatomic, assign) XHMessageInputViewStyle inputViewStyle; + +#pragma mark - DataSource Change +/** + * 添加一条新的消息 + * + * @param addedMessage 添加的目标消息对象 + */ +- (void)addMessage:(XHMessage *)addedMessage; + +/** + * 删除一条已存在的消息 + * + * @param reomvedMessage 删除的目标消息对象 + */ +- (void)removeMessageAtIndexPath:(NSIndexPath *)indexPath; + +/** + * 插入旧消息数据到头部,仿微信的做法 + * + * @param oldMessages 目标的旧消息数据 + */ +- (void)insertOldMessages:(NSArray *)oldMessages; + +/** + * 同上,增加了 completion 来通知消息插入完毕 + * + * @param oldMessages 目标的旧消息数据 + * @param completion insert 完成回调 + */ +- (void)insertOldMessages:(NSArray *)oldMessages completion:(void (^)())completion; + +#pragma mark - Messages view controller +/** + * 完成发送消息的函数 + */ +- (void)finishSendMessageWithBubbleMessageType:(XHBubbleMessageMediaType)mediaType; + +/** + * 设置View、tableView的背景颜色 + * + * @param color 背景颜色 + */ +- (void)setBackgroundColor:(UIColor *)color; + +/** + * 设置消息列表的背景图片 + * + * @param backgroundImage 目标背景图片 + */ +- (void)setBackgroundImage:(UIImage *)backgroundImage; + +/** + * 是否滚动到底部 + * + * @param animated YES Or NO + */ +- (void)scrollToBottomAnimated:(BOOL)animated; + +/** + * 滚动到哪一行 + * + * @param indexPath 目标行数变量 + * @param position UITableViewScrollPosition 整形常亮 + * @param animated 是否滚动动画,YES or NO + */ +- (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath + atScrollPosition:(UITableViewScrollPosition)position + animated:(BOOL)animated; + +#pragma mark - Other Menu View Frame Helper Mehtod +/** + * 根据显示或隐藏的需求对所有第三方Menu进行管理 + * + * @param hide 需求条件 + */ +- (void)layoutOtherMenuViewHiden:(BOOL)hide; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageTextView.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageTextView.h new file mode 100644 index 0000000..8b9ecd2 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageTextView.h @@ -0,0 +1,53 @@ +// +// XHMessageTextView.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +typedef NS_ENUM(NSUInteger, XHInputViewType) { + XHInputViewTypeNormal = 0, + XHInputViewTypeText, + XHInputViewTypeEmotion, + XHInputViewTypeShareMenu, +}; + +@interface XHMessageTextView : UITextView + +/** + * 提示用户输入的标语 + */ +@property (nonatomic, copy) NSString *placeHolder; + +/** + * 标语文本的颜色 + */ +@property (nonatomic, strong) UIColor *placeHolderTextColor; + +/** + * 获取自身文本占据有多少行 + * + * @return 返回行数 + */ +- (NSUInteger)numberOfLinesOfText; + +/** + * 获取每行的高度 + * + * @return 根据iPhone或者iPad来获取每行字体的高度 + */ ++ (NSUInteger)maxCharactersPerLine; + +/** + * 获取某个文本占据自身适应宽带的行数 + * + * @param text 目标文本 + * + * @return 返回占据行数 + */ ++ (NSUInteger)numberOfLinesForMessage:(NSString *)text; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageVideoConverPhotoFactory.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageVideoConverPhotoFactory.h new file mode 100644 index 0000000..0a1c03e --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageVideoConverPhotoFactory.h @@ -0,0 +1,15 @@ +// +// XHMessageVideoConverPhotoFactory.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-9. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +@interface XHMessageVideoConverPhotoFactory : NSObject + ++ (UIImage *)videoConverPhotoWithVideoPath:(NSString *)videoPath; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageVoiceFactory.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageVoiceFactory.h new file mode 100644 index 0000000..90a7f4b --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHMessageVoiceFactory.h @@ -0,0 +1,16 @@ +// +// XHMessageVoiceFactory.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-28. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import "XHMessageBubbleFactory.h" + +@interface XHMessageVoiceFactory : NSObject + ++ (UIImageView *)messageVoiceAnimationImageViewWithBubbleMessageType:(XHBubbleMessageType)type; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHOperationNetworkKit.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHOperationNetworkKit.h new file mode 100644 index 0000000..63d458a --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHOperationNetworkKit.h @@ -0,0 +1,33 @@ +// +// XHOperationNetworkKit.h +// MessageDisplayExample +// +// Created by 曾 宪华 on 14-6-10. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +typedef void (^XHHTTPProgressHandler)(CGFloat progress, unsigned long long total); +typedef void (^XHJSONSuccessHandler)(id json); +typedef void (^XHHTTPSuccessHandler)(NSData *responseData, NSURLResponse *response); +typedef void (^XHHTTPFailureHandler)(NSData *responseData, NSURLResponse *response, NSError *error); + +@interface XHOperationNetworkKit : NSOperation + +- (id)initWithRequest:(NSURLRequest *)request; +- (id)initWithRequest:(NSURLRequest *)request + jsonSuccessHandler:(XHJSONSuccessHandler)jsonSuccessHandler + failureHandler:(XHHTTPFailureHandler)failureHandler; +- (id)initWithRequest:(NSURLRequest *)request + successHandler:(XHHTTPSuccessHandler)successHandler + failureHandler:(XHHTTPFailureHandler)failureHandler; + + +- (void)setSuccessHandler:(XHHTTPSuccessHandler)successHandler; +- (void)setFailureHandler:(XHHTTPFailureHandler)failureHandler; +- (void)setProgressHandler:(XHHTTPProgressHandler)progressHandler; + +- (void)startRequest; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHPhotographyHelper.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHPhotographyHelper.h new file mode 100644 index 0000000..2fe30a2 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHPhotographyHelper.h @@ -0,0 +1,17 @@ +// +// XHPhotographyHelper.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-3. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +typedef void(^DidFinishTakeMediaCompledBlock)(UIImage *image, NSDictionary *editingInfo); + +@interface XHPhotographyHelper : NSObject + +- (void)showOnPickerViewControllerSourceType:(UIImagePickerControllerSourceType)sourceType onViewController:(UIViewController *)viewController compled:(DidFinishTakeMediaCompledBlock)compled; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHShareMenuItem.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHShareMenuItem.h new file mode 100644 index 0000000..1fff978 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHShareMenuItem.h @@ -0,0 +1,45 @@ +// +// XHShareMenuItem.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-1. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +#define kXHShareMenuItemWidth 60 +#define KXHShareMenuItemHeight 80 + +@interface XHShareMenuItem : NSObject + +/** + * 正常显示图片 + */ +@property (nonatomic, strong) UIImage *normalIconImage; + +/** + * 第三方按钮的标题 + */ +@property (nonatomic, copy) NSString *title; + +@property (nonatomic, strong) UIColor *titleColor; + +@property (nonatomic, strong) UIFont *titleFont; + +/** + * 根据正常图片和标题初始化一个Model对象 + * + * @param normalIconImage 正常图片 + * @param title 标题 + * + * @return 返回一个Model对象 + */ +- (instancetype)initWithNormalIconImage:(UIImage *)normalIconImage + title:(NSString *)title; + +- (instancetype)initWithNormalIconImage:(UIImage *)normalIconImage + title:(NSString *)title + titleColor:(UIColor *)titleColor + titleFont:(UIFont *)titleFont; +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHShareMenuView.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHShareMenuView.h new file mode 100644 index 0000000..69218d0 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHShareMenuView.h @@ -0,0 +1,42 @@ +// +// XHShareMenuView.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-1. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import "XHShareMenuItem.h" + +#define kXHShareMenuPageControlHeight 30 + +@protocol XHShareMenuViewDelegate + +@optional +/** + * 点击第三方功能回调方法 + * + * @param shareMenuItem 被点击的第三方Model对象,可以在这里做一些特殊的定制 + * @param index 被点击的位置 + */ +- (void)didSelecteShareMenuItem:(XHShareMenuItem *)shareMenuItem atIndex:(NSInteger)index; + +@end + + +@interface XHShareMenuView : UIView + +/** + * 第三方功能Models + */ +@property (nonatomic, strong) NSArray *shareMenuItems; + +@property (nonatomic, weak) id delegate; + +/** + * 根据数据源刷新第三方功能按钮的布局 + */ +- (void)reloadData; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHUIKitMacro.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHUIKitMacro.h new file mode 100644 index 0000000..7162930 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHUIKitMacro.h @@ -0,0 +1,14 @@ +// +// XHUIKitMacro.h +// MessageDisplayExample +// +// Created by dw_iOS on 14-5-22. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#ifndef MessageDisplayExample_XHUIKitMacro_h +#define MessageDisplayExample_XHUIKitMacro_h + + + +#endif diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHVideoOutputSampleBufferFactory.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHVideoOutputSampleBufferFactory.h new file mode 100644 index 0000000..d5a195c --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHVideoOutputSampleBufferFactory.h @@ -0,0 +1,17 @@ +// +// XHVideoOutputSampleBufferFactory.h +// MessageDisplayExample +// +// Created by 曾 宪华 on 14-5-25. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +#import + +@interface XHVideoOutputSampleBufferFactory : NSObject + ++ (UIImage *)imageFromSampleBuffer:(CMSampleBufferRef)sampleBuffer; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHVoiceCommonHelper.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHVoiceCommonHelper.h new file mode 100644 index 0000000..3c67b38 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHVoiceCommonHelper.h @@ -0,0 +1,91 @@ +// +// XHVoiceCommonHelper.h +// MessageDisplayExample +// +// Created by Aevitx on 14-5-27. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import +#import + +#define AUDIO_LOCAL_FILE @"localfile" + +typedef void(^DidDeleteAudioFileBlock)(); + +@interface XHVoiceCommonHelper : NSObject +/** + * 根据文件名字(不包含后缀),删除文件 + * + * @param fileName 文件名字(不包含后缀) + * @param block 删除成功后的回调 + */ ++ (void)removeRecordedFileWithOnlyName:(NSString*)fileName block:(DidDeleteAudioFileBlock)block; + + +/** + * 删除/documents/Audio下的文件 + * + * @param exception 有包含些字符串就不删除(为空表示全部删除) + * @param block 删除成功后的回调 + */ ++ (void)removeAudioFile:(NSString*)exception block:(DidDeleteAudioFileBlock)block; + + + + +/** + * 根据当前时间生成字符串 + * + * @return 当前时间字符串 + */ ++ (NSString*)getCurrentTimeString; + + +/** + * 获取缓存路径 + * + * @return 缓存路径 + */ ++ (NSString*)getCacheDirectory; + + +/** + * 判断文件是否存在 + * + * @param _path 文件路径 + * + * @return 存在返回YES + */ ++ (BOOL)fileExistsAtPath:(NSString*)_path; + + +/** + * 删除文件 + * + * @param _path 文件路径 + * + * @return 成功返回YES + */ ++ (BOOL)deleteFileAtPath:(NSString*)_path; + + +/** + * 生成文件路径 + * + * @param _fileName 文件名 + * @param _type 文件类型 + * @return 文件路径 + */ ++ (NSString*)getPathByFileName:(NSString *)_fileName; ++ (NSString*)getPathByFileName:(NSString *)_fileName ofType:(NSString *)_type; + + +/** + * 获取录音设置 + * + * @return 录音设置 + */ ++ (NSDictionary*)getAudioRecorderSettingDict; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHVoiceRecordHUD.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHVoiceRecordHUD.h new file mode 100644 index 0000000..482947f --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHVoiceRecordHUD.h @@ -0,0 +1,46 @@ +// +// XHVoiceRecordHUD.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-13. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +@interface XHVoiceRecordHUD : UIView + +@property (nonatomic, assign) CGFloat peakPower; + +/** + * 开始显示录音HUD控件在某个view + * + * @param view 具体要显示的View + */ +- (void)startRecordingHUDAtView:(UIView *)view; + +/** + * 提示取消录音 + */ +- (void)pauseRecord; + +/** + * 提示继续录音 + */ +- (void)resaueRecord; + +/** + * 停止录音,意思是完成录音 + * + * @param compled 完成录音后的block回调 + */ +- (void)stopRecordCompled:(void(^)(BOOL fnished))compled; + +/** + * 取消录音 + * + * @param compled 取消录音完成后的回调 + */ +- (void)cancelRecordCompled:(void(^)(BOOL fnished))compled; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHVoiceRecordHelper.h b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHVoiceRecordHelper.h new file mode 100644 index 0000000..1f81404 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Headers/XHVoiceRecordHelper.h @@ -0,0 +1,38 @@ +// +// XHVoiceRecordHelper.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-5-13. +// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// + +#import + +typedef BOOL(^XHPrepareRecorderCompletion)(); +typedef void(^XHStartRecorderCompletion)(); +typedef void(^XHStopRecorderCompletion)(); +typedef void(^XHPauseRecorderCompletion)(); +typedef void(^XHResumeRecorderCompletion)(); +typedef void(^XHCancellRecorderDeleteFileCompletion)(); +typedef void(^XHRecordProgress)(float progress); +typedef void(^XHPeakPowerForChannel)(float peakPowerForChannel); + + +@interface XHVoiceRecordHelper : NSObject + +@property (nonatomic, copy) XHStopRecorderCompletion maxTimeStopRecorderCompletion; +@property (nonatomic, copy) XHRecordProgress recordProgress; +@property (nonatomic, copy) XHPeakPowerForChannel peakPowerForChannel; +@property (nonatomic, copy, readonly) NSString *recordPath; +@property (nonatomic, copy) NSString *recordDuration; +@property (nonatomic) float maxRecordTime; // 默认 60秒为最大 +@property (nonatomic, readonly) NSTimeInterval currentTimeInterval; + +- (void)prepareRecordingWithPath:(NSString *)path prepareRecorderCompletion:(XHPrepareRecorderCompletion)prepareRecorderCompletion; +- (void)startRecordingWithStartRecorderCompletion:(XHStartRecorderCompletion)startRecorderCompletion; +- (void)pauseRecordingWithPauseRecorderCompletion:(XHPauseRecorderCompletion)pauseRecorderCompletion; +- (void)resumeRecordingWithResumeRecorderCompletion:(XHResumeRecorderCompletion)resumeRecorderCompletion; +- (void)stopRecordingWithStopRecorderCompletion:(XHStopRecorderCompletion)stopRecorderCompletion; +- (void)cancelledDeleteWithCompletion:(XHCancellRecorderDeleteFileCompletion)cancelledDeleteCompletion; + +@end diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Info.plist b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Info.plist new file mode 100644 index 0000000..e7c6975 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/Info.plist differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/MessageDisplayKit b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/MessageDisplayKit new file mode 100755 index 0000000..e7a77b6 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/MessageDisplayKit differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/MessageVideoPlay@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/MessageVideoPlay@2x.png new file mode 100644 index 0000000..f374450 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/MessageVideoPlay@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/ReceiverVoiceNodePlaying000@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/ReceiverVoiceNodePlaying000@2x.png new file mode 100644 index 0000000..fb96cb0 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/ReceiverVoiceNodePlaying000@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/ReceiverVoiceNodePlaying001@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/ReceiverVoiceNodePlaying001@2x.png new file mode 100644 index 0000000..53a3ce5 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/ReceiverVoiceNodePlaying001@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/ReceiverVoiceNodePlaying002@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/ReceiverVoiceNodePlaying002@2x.png new file mode 100644 index 0000000..1568f54 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/ReceiverVoiceNodePlaying002@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/ReceiverVoiceNodePlaying003@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/ReceiverVoiceNodePlaying003@2x.png new file mode 100644 index 0000000..36a8fbc Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/ReceiverVoiceNodePlaying003@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/ReceiverVoiceNodePlaying@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/ReceiverVoiceNodePlaying@2x.png new file mode 100644 index 0000000..fcbc480 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/ReceiverVoiceNodePlaying@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordCancel@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordCancel@2x.png new file mode 100644 index 0000000..fae73b6 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordCancel@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingBkg@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingBkg@2x.png new file mode 100644 index 0000000..d7d9cb5 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingBkg@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingSignal001@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingSignal001@2x.png new file mode 100644 index 0000000..dd17556 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingSignal001@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingSignal002@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingSignal002@2x.png new file mode 100644 index 0000000..174dc31 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingSignal002@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingSignal003@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingSignal003@2x.png new file mode 100644 index 0000000..8238d86 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingSignal003@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingSignal004@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingSignal004@2x.png new file mode 100644 index 0000000..1e7d086 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingSignal004@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingSignal005@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingSignal005@2x.png new file mode 100644 index 0000000..d8e340c Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingSignal005@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingSignal006@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingSignal006@2x.png new file mode 100644 index 0000000..a68c60a Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingSignal006@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingSignal007@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingSignal007@2x.png new file mode 100644 index 0000000..21af98f Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingSignal007@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingSignal008@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingSignal008@2x.png new file mode 100644 index 0000000..b0cda99 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/RecordingSignal008@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-drag-dot.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-drag-dot.png new file mode 100755 index 0000000..2b73215 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-drag-dot.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-drag-dot@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-drag-dot@2x.png new file mode 100755 index 0000000..1bed119 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-drag-dot@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-hi.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-hi.png new file mode 100755 index 0000000..0027688 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-hi.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-hi@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-hi@2x.png new file mode 100755 index 0000000..717d3f9 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-hi@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-lo.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-lo.png new file mode 100755 index 0000000..a63b346 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-lo.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-lo@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-lo@2x.png new file mode 100755 index 0000000..f896482 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-lo@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-mask.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-mask.png new file mode 100755 index 0000000..37499ce Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-mask.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-mask@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-mask@2x.png new file mode 100755 index 0000000..7519a37 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-loupe-mask@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-hi.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-hi.png new file mode 100755 index 0000000..143f953 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-hi.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-hi@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-hi@2x.png new file mode 100755 index 0000000..0c703ed Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-hi@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-lo-stemless.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-lo-stemless.png new file mode 100755 index 0000000..b9689e5 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-lo-stemless.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-lo-stemless@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-lo-stemless@2x.png new file mode 100755 index 0000000..8582637 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-lo-stemless@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-lo.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-lo.png new file mode 100755 index 0000000..ff551c0 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-lo.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-lo@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-lo@2x.png new file mode 100755 index 0000000..3aec2f9 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-lo@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-mask-flipped.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-mask-flipped.png new file mode 100755 index 0000000..5d1cac0 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-mask-flipped.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-mask-flipped@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-mask-flipped@2x.png new file mode 100755 index 0000000..f7bfadf Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-mask-flipped@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-mask.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-mask.png new file mode 100755 index 0000000..7292831 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-mask.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-mask@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-mask@2x.png new file mode 100755 index 0000000..9e70463 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SECoreTextView.bundle/kb-magnifier-ranged-mask@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SenderVoiceNodePlaying000@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SenderVoiceNodePlaying000@2x.png new file mode 100644 index 0000000..fb96cb0 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SenderVoiceNodePlaying000@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SenderVoiceNodePlaying001@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SenderVoiceNodePlaying001@2x.png new file mode 100644 index 0000000..e948825 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SenderVoiceNodePlaying001@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SenderVoiceNodePlaying002@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SenderVoiceNodePlaying002@2x.png new file mode 100644 index 0000000..0b37221 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SenderVoiceNodePlaying002@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SenderVoiceNodePlaying003@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SenderVoiceNodePlaying003@2x.png new file mode 100644 index 0000000..454ac03 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SenderVoiceNodePlaying003@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SenderVoiceNodePlaying@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SenderVoiceNodePlaying@2x.png new file mode 100644 index 0000000..2dbbaf5 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/SenderVoiceNodePlaying@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/VoiceBtn_Black@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/VoiceBtn_Black@2x.png new file mode 100644 index 0000000..c92a0c2 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/VoiceBtn_Black@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/VoiceBtn_BlackHL@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/VoiceBtn_BlackHL@2x.png new file mode 100644 index 0000000..e7e7cbd Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/VoiceBtn_BlackHL@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/_CodeSignature/CodeResources b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/_CodeSignature/CodeResources new file mode 100644 index 0000000..80e6f10 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/_CodeSignature/CodeResources @@ -0,0 +1,1187 @@ + + + + + files + + Fav_Cell_Loc@2x.png + + dcmi0ofin2g6j6SA4tDnSIzaJyk= + + Headers/FLAnimatedImage.h + + aS378zadbzEV6fyl8CSTTEd9KXM= + + Headers/FLAnimatedImageView.h + + 9MjR2K9JVLS8ijmgXdR1pr+qcrY= + + Headers/LKBadgeView.h + + A7GUPbHYw/EEOSVQjpFuTDyUbiQ= + + Headers/MessageDisplayKit-Prefix.pch + + /eBkVeT+9hr2nPgrXtPn+Jq9/1k= + + Headers/NSString+MessageInputView.h + + aqJBcG5B8df03eRbYC3X0GNOYuo= + + Headers/NSString+XHMD5.h + + EvIUT6KMcZX+SbKNuZSYGyQtgj8= + + Headers/SECompatibility.h + + jdCJhm2t2TAvVGYnEB0Oeutpr0A= + + Headers/SEConstants.h + + v6piZPXcDeWFqE/aD7gWV2E/6KQ= + + Headers/SELineLayout.h + + /vUArQpVBzW1ADqt4yDmyx0/M2k= + + Headers/SELinkText.h + + jw2VYboLvB35BCjp6VL2YsQaLAU= + + Headers/SESelectionGrabber.h + + LhyzI5TIQkM34SaR/g3szOR9nto= + + Headers/SETextAttachment.h + + 3NUF1yEs+HpPfh9iFPEWPDaewVk= + + Headers/SETextEditingCaret.h + + hJ2/al5xKZlXC1/9MzCIYWewn2Y= + + Headers/SETextGeometry.h + + 7WIZR7aSqzsdeeVCSvFmur2OJN4= + + Headers/SETextInput.h + + 7qehTtjM3j5z0U6kShTTMcJfOXU= + + Headers/SETextLayout.h + + fTRLwobrJ3q0FjeMpKSZJLqBK2Y= + + Headers/SETextMagnifierCaret.h + + Pqxx/o9mBUYZBTcmGNubyo6y2j0= + + Headers/SETextMagnifierRanged.h + + +TZCcY5Ek/JBc5MRQBJuGthM3Ok= + + Headers/SETextSelection.h + + vDV2PZYj+FVC3JWm2maa1rKhfFM= + + Headers/SETextSelectionView.h + + kRyNAqht1NiIvcFFnO7IYK/DRr4= + + Headers/SETextView.h + + LENMlk9FALKqS3gSqa2cgUGMzLA= + + Headers/UIImage+Alpha.h + + x0oeR2wzKN04Bjli4ZVEjeSirOY= + + Headers/UIImage+Resize.h + + 998aB8L82ApIbjE2/GQ5VZFpvg4= + + Headers/UIImage+RoundedCorner.h + + 1N7y5Q531CugtKouLqStTkz8ttU= + + Headers/UIImage+Utility.h + + KIYF4OupJo5RmeyPWRNG+/UJHGU= + + Headers/UIImage+XHRounded.h + + 1tJiKaAZNEwaWQTsO51CNabO6mY= + + Headers/UIScrollView+XHkeyboardControl.h + + E6LYWtGojaeuNc57A9YD9LwIUD4= + + Headers/UIView+XHRemoteImage.h + + S3PhEe+mhRhHG3K9kPD84AId4So= + + Headers/XHAnnotation.h + + DDt6biPGQ9H6Y/NE6KZMpodctVM= + + Headers/XHAudioPlayerHelper.h + + 8Ipviq611lDXJEfc1+mkAoLlp3g= + + Headers/XHBaseTableViewCell.h + + ejqSetztdLr1hMMorOF6U3hTefc= + + Headers/XHBubblePhotoImageView.h + + GN9MFfzo5S+e1CJ56TRP4CbX1S4= + + Headers/XHCacheManager.h + + AY+H6QwqRRkLT8XcZyOgY91NKhk= + + Headers/XHCaptureHelper.h + + qDwondx9l0ISI4JnY7lch6wzX3c= + + Headers/XHConfigurationHelper.h + + gYxyEDIS1a6uCwTVF8n2z09cxow= + + Headers/XHDisplayEmotionViewController.h + + V+UenTAYOSOeDZ36gfaZF50r5uo= + + Headers/XHDisplayLocationViewController.h + + x4vRnHt8qP7apZOSeIzcCX+oDxk= + + Headers/XHDisplayMediaViewController.h + + MlMNmzub2QQy4IpJIB+F6ltBmaw= + + Headers/XHDisplayTextViewController.h + + J6n7Ji2rF0QLVr4OHox5FEJgO8I= + + Headers/XHEmotion.h + + muxcmi7IE+l9BtKNhHHMjjVSBx4= + + Headers/XHEmotionCollectionViewCell.h + + VohhOkU0mjfUyoABv9HaGl5fgS0= + + Headers/XHEmotionCollectionViewFlowLayout.h + + G5xrWp7MS8ErhxQkDUPBLGLbZjs= + + Headers/XHEmotionManager.h + + YUwskG1lWb8xhzP5Kc8EQROoFLk= + + Headers/XHEmotionManagerView.h + + MOuMOll22bZisDJJNLL7/rl11Qs= + + Headers/XHEmotionSectionBar.h + + LuwyMO1PWwtedDffsd24nHu5RTI= + + Headers/XHFileAttribute.h + + PPI3ntJKSuYUv4P5EFJaKIa1maI= + + Headers/XHFoundationMacro.h + + OAXi1OXp5YQwswW+dQ5J0VezdF8= + + Headers/XHHTTPClient.h + + Bexbk4JzCkH60hATNBhtZcBxqJU= + + Headers/XHLocationHelper.h + + HDoX7QFhFrk7bzfLnDyyCCo62AY= + + Headers/XHMacro.h + + Z2EHYnHz9qJgE/cftK+K8bxrOHs= + + Headers/XHMessage.h + + 66OZjUkM2BpYoumbDMCF97TxoIM= + + Headers/XHMessageAvatarFactory.h + + MtZ18pUB1PCB8zr3AVzqqOY9afU= + + Headers/XHMessageBubbleFactory.h + + YH5uE9n6f3LS81zwfDEJ0RY+7+U= + + Headers/XHMessageBubbleHelper.h + + V5sp4ktq6O64DPuDy/k6ibk0D14= + + Headers/XHMessageBubbleView.h + + befeqg47XlwZUFmoQ5s0KGQBEvk= + + Headers/XHMessageInputView.h + + ZhHhq5d2cFryFIn9qXGKDF3TKtg= + + Headers/XHMessageModel.h + + BMVFzKfh2CsaFFZYlfVT42IzTMo= + + Headers/XHMessageTableView.h + + 8DP62yumdo4nDrCBIlDM0S2GyGw= + + Headers/XHMessageTableViewCell.h + + CJjSgH+xJwSnxTXV1v8cg4NUvB8= + + Headers/XHMessageTableViewController.h + + WZ1RrJ3c6ZmAMB4AfMJsJQeIHi8= + + Headers/XHMessageTextView.h + + CS6kcQtLszNJP4XT2IFP8HMrQTQ= + + Headers/XHMessageVideoConverPhotoFactory.h + + 8t3Y05rbgrW2O/hiU4vpB+dZmzs= + + Headers/XHMessageVoiceFactory.h + + tndlNJednJe2q2Fkutu9nU8rMLI= + + Headers/XHOperationNetworkKit.h + + Xb21zRuly5dkH36+g/IyN8oh6js= + + Headers/XHPhotographyHelper.h + + Lb98LUr8LjyTpy3XZiRl3IUACoE= + + Headers/XHShareMenuItem.h + + 7vVw6L0a2LxoCHKm1In4Z5TyXlI= + + Headers/XHShareMenuView.h + + +r/FWqmkr1IpSr61pJiE4Pw0fLQ= + + Headers/XHUIKitMacro.h + + YevRfsp/JZKtgNuTvSOeUtZak18= + + Headers/XHVideoOutputSampleBufferFactory.h + + 24nbCVzeXPuiNuOzMpxHX7K1doo= + + Headers/XHVoiceCommonHelper.h + + moU9NLC0Pa2WSi2LJvGU+QGyPiI= + + Headers/XHVoiceRecordHUD.h + + YZIvhC5KaoubO2QyphlvXdvNkvE= + + Headers/XHVoiceRecordHelper.h + + Mqs6z6zEG7sAP1FIBZjFk4FvMAA= + + Info.plist + + KwohJviyPKKGG3lkZWgizBj0Xnc= + + MessageVideoPlay@2x.png + + yJ5NL6IrhVPqy2CYZd1QXYV9DFs= + + ReceiverVoiceNodePlaying000@2x.png + + H+b58WdNjEq3Jy9fFoFXz8nIFxQ= + + ReceiverVoiceNodePlaying001@2x.png + + Zm8fEaRUUJ9ZoosnZUufBejUf6I= + + ReceiverVoiceNodePlaying002@2x.png + + tqxrWeNyyN0zPNqvjIBwLL426VY= + + ReceiverVoiceNodePlaying003@2x.png + + guZlK+YNA3/A5z57Pu+PyOuM5sE= + + ReceiverVoiceNodePlaying@2x.png + + tcjm1Ysw9pP5hTnXNtZiiiC+0vw= + + RecordCancel@2x.png + + MYJXz9OV8RFtWWPtPf9HOX0W9TU= + + RecordingBkg@2x.png + + 7Eq/imYvhKo2mo5kgNb9bwF3124= + + RecordingSignal001@2x.png + + DaQyA4Z/cS4wQR6xPFQBPZIW3XM= + + RecordingSignal002@2x.png + + WV++TqgBVnetvziHuXmCk1YoM3Y= + + RecordingSignal003@2x.png + + t938Zeh7ri98ZKGQfvsEzCTLbhQ= + + RecordingSignal004@2x.png + + g3phFoQsIKVf5UkwQwQCIOnaxrk= + + RecordingSignal005@2x.png + + AhghCUNnCQ9hMs5tKCBauFJAslg= + + RecordingSignal006@2x.png + + Ids/pSqMOjMrti12XZtUUEL7bbU= + + RecordingSignal007@2x.png + + ROEcDBgiD/2cjr3AlGSi88NRxKQ= + + RecordingSignal008@2x.png + + w8brq/JX2xAQaOuFdai2MXsS2O8= + + SECoreTextView.bundle/kb-drag-dot.png + + /tiuru1GQC9K76fTIAe3sEc4HoI= + + SECoreTextView.bundle/kb-drag-dot@2x.png + + SwF9xQWIUulIomiovQdVJYSx59Q= + + SECoreTextView.bundle/kb-loupe-hi.png + + 8QcUugiBTEb8pV7+fX07Q4BSBjs= + + SECoreTextView.bundle/kb-loupe-hi@2x.png + + H86At9gO8dpPC3RTLpEvsfmCLro= + + SECoreTextView.bundle/kb-loupe-lo.png + + qHxOhrMImkSlsv4zPfD3SradWLc= + + SECoreTextView.bundle/kb-loupe-lo@2x.png + + e6GYCLIVyxk6FwGBCQuCAl2XLi0= + + SECoreTextView.bundle/kb-loupe-mask.png + + RVcIDnRCl7HT6H2JemYxI8AZ96M= + + SECoreTextView.bundle/kb-loupe-mask@2x.png + + WtUC03uZx++riizUCEuqswvzs3A= + + SECoreTextView.bundle/kb-magnifier-ranged-hi.png + + YHsmVF3BQ1+7UET2Bmjm2XwChR4= + + SECoreTextView.bundle/kb-magnifier-ranged-hi@2x.png + + n+GMYemfC8gndRdHVtG5M13Oxfc= + + SECoreTextView.bundle/kb-magnifier-ranged-lo-stemless.png + + /uwLLa4qmKgXQmchW0oFW73zXOI= + + SECoreTextView.bundle/kb-magnifier-ranged-lo-stemless@2x.png + + k1BtJSCLKsX9uYUJpw4ctuVRS1o= + + SECoreTextView.bundle/kb-magnifier-ranged-lo.png + + dzvzqqfE5l4yaphFfEMhUBpg05s= + + SECoreTextView.bundle/kb-magnifier-ranged-lo@2x.png + + ziCpxCt+m23ufk0vlSVmf7KnE8A= + + SECoreTextView.bundle/kb-magnifier-ranged-mask-flipped.png + + bOzdxh9sYf8Mg08b48NzNvNH2nE= + + SECoreTextView.bundle/kb-magnifier-ranged-mask-flipped@2x.png + + v8suxV1rRZ04UIudUKpDb/fhnpc= + + SECoreTextView.bundle/kb-magnifier-ranged-mask.png + + hO/Eo3PXCZHPdcInWMRaWBeBXP8= + + SECoreTextView.bundle/kb-magnifier-ranged-mask@2x.png + + csIkRjZ7kX6DGycyRH0N1koDg8M= + + SenderVoiceNodePlaying000@2x.png + + H+b58WdNjEq3Jy9fFoFXz8nIFxQ= + + SenderVoiceNodePlaying001@2x.png + + b+blmbxkZTfSiegj7YwqaykgFyg= + + SenderVoiceNodePlaying002@2x.png + + dC6SEPzIQR+C9mOSKBIju9oG9MY= + + SenderVoiceNodePlaying003@2x.png + + I9fcwTy5pc5AO6f3+DEF1IFH2XY= + + SenderVoiceNodePlaying@2x.png + + nzKgSh+3ZnwuXMWQSyClNNDnfvw= + + VoiceBtn_Black@2x.png + + C+KezNOQHhjS6up+mOeJ0vqQvCY= + + VoiceBtn_BlackHL@2x.png + + dlK1dAq4C4jjO1+PqU4mAoD4o7I= + + avator@2x.png + + sgyKq5ukhaE2rvkeIQubrW1jMCI= + + en.lproj/MessageDisplayKitString.strings + + hash + + 5attu1fe2JTTuhjUZ09sb0frT0U= + + optional + + + face@2x.png + + nE1ghRflqINwQndmuU3hGZ9S/O0= + + face_HL@2x.png + + VCik7fmOwBvy9Y8p/aytqXy8b4k= + + input-bar-flat.png + + lkLDysijMuyGRO2U1D/rc6i/moQ= + + input-bar-flat@2x.png + + Dvdtjjmqm/RF03CnmMi7uxm6MDU= + + keyboard@2x.png + + 4yYUsM7jZxU/L+vtkpSeVichASc= + + keyboard_HL@2x.png + + 2z8+mc0Esm/ShNPglb7iOJFVSdo= + + msg_chat_voice_unread.png + + zF3nN5tWim2NNb459BmirF2lqV8= + + msg_chat_voice_unread@2x.png + + O6wZdV24rGbSj0fGOdeM9bqnmFY= + + multiMedia@2x.png + + 7ti+5vWUIjwLRnD6Ht9i2Dzxnl0= + + multiMedia_HL@2x.png + + ddk1hIv9f9Npm+wqldYi6qm0pc4= + + placeholderImage@2x.png + + cPJi/+3A51RBz150RXajBPNj+so= + + voice@2x.png + + 0GsLQU+rMy9PVbPQzVd+CKOiApo= + + voice_HL@2x.png + + 0N5Idcjobp7x1fYD0d/qKPzSYxg= + + weChatBubble_Receiving_Solid@2x.png + + XSMxKJw4wdSCGiPAOukHjbVOY0g= + + weChatBubble_Sending_Solid@2x.png + + 3mfDxwCYebIVghNCeYe4g+9EU80= + + zh-Hans.lproj/MessageDisplayKitString.strings + + hash + + 7fzgSMzvrJpphjTWtsjIFf/gU6o= + + optional + + + + files2 + + Fav_Cell_Loc@2x.png + + dcmi0ofin2g6j6SA4tDnSIzaJyk= + + Headers/FLAnimatedImage.h + + aS378zadbzEV6fyl8CSTTEd9KXM= + + Headers/FLAnimatedImageView.h + + 9MjR2K9JVLS8ijmgXdR1pr+qcrY= + + Headers/LKBadgeView.h + + A7GUPbHYw/EEOSVQjpFuTDyUbiQ= + + Headers/MessageDisplayKit-Prefix.pch + + /eBkVeT+9hr2nPgrXtPn+Jq9/1k= + + Headers/NSString+MessageInputView.h + + aqJBcG5B8df03eRbYC3X0GNOYuo= + + Headers/NSString+XHMD5.h + + EvIUT6KMcZX+SbKNuZSYGyQtgj8= + + Headers/SECompatibility.h + + jdCJhm2t2TAvVGYnEB0Oeutpr0A= + + Headers/SEConstants.h + + v6piZPXcDeWFqE/aD7gWV2E/6KQ= + + Headers/SELineLayout.h + + /vUArQpVBzW1ADqt4yDmyx0/M2k= + + Headers/SELinkText.h + + jw2VYboLvB35BCjp6VL2YsQaLAU= + + Headers/SESelectionGrabber.h + + LhyzI5TIQkM34SaR/g3szOR9nto= + + Headers/SETextAttachment.h + + 3NUF1yEs+HpPfh9iFPEWPDaewVk= + + Headers/SETextEditingCaret.h + + hJ2/al5xKZlXC1/9MzCIYWewn2Y= + + Headers/SETextGeometry.h + + 7WIZR7aSqzsdeeVCSvFmur2OJN4= + + Headers/SETextInput.h + + 7qehTtjM3j5z0U6kShTTMcJfOXU= + + Headers/SETextLayout.h + + fTRLwobrJ3q0FjeMpKSZJLqBK2Y= + + Headers/SETextMagnifierCaret.h + + Pqxx/o9mBUYZBTcmGNubyo6y2j0= + + Headers/SETextMagnifierRanged.h + + +TZCcY5Ek/JBc5MRQBJuGthM3Ok= + + Headers/SETextSelection.h + + vDV2PZYj+FVC3JWm2maa1rKhfFM= + + Headers/SETextSelectionView.h + + kRyNAqht1NiIvcFFnO7IYK/DRr4= + + Headers/SETextView.h + + LENMlk9FALKqS3gSqa2cgUGMzLA= + + Headers/UIImage+Alpha.h + + x0oeR2wzKN04Bjli4ZVEjeSirOY= + + Headers/UIImage+Resize.h + + 998aB8L82ApIbjE2/GQ5VZFpvg4= + + Headers/UIImage+RoundedCorner.h + + 1N7y5Q531CugtKouLqStTkz8ttU= + + Headers/UIImage+Utility.h + + KIYF4OupJo5RmeyPWRNG+/UJHGU= + + Headers/UIImage+XHRounded.h + + 1tJiKaAZNEwaWQTsO51CNabO6mY= + + Headers/UIScrollView+XHkeyboardControl.h + + E6LYWtGojaeuNc57A9YD9LwIUD4= + + Headers/UIView+XHRemoteImage.h + + S3PhEe+mhRhHG3K9kPD84AId4So= + + Headers/XHAnnotation.h + + DDt6biPGQ9H6Y/NE6KZMpodctVM= + + Headers/XHAudioPlayerHelper.h + + 8Ipviq611lDXJEfc1+mkAoLlp3g= + + Headers/XHBaseTableViewCell.h + + ejqSetztdLr1hMMorOF6U3hTefc= + + Headers/XHBubblePhotoImageView.h + + GN9MFfzo5S+e1CJ56TRP4CbX1S4= + + Headers/XHCacheManager.h + + AY+H6QwqRRkLT8XcZyOgY91NKhk= + + Headers/XHCaptureHelper.h + + qDwondx9l0ISI4JnY7lch6wzX3c= + + Headers/XHConfigurationHelper.h + + gYxyEDIS1a6uCwTVF8n2z09cxow= + + Headers/XHDisplayEmotionViewController.h + + V+UenTAYOSOeDZ36gfaZF50r5uo= + + Headers/XHDisplayLocationViewController.h + + x4vRnHt8qP7apZOSeIzcCX+oDxk= + + Headers/XHDisplayMediaViewController.h + + MlMNmzub2QQy4IpJIB+F6ltBmaw= + + Headers/XHDisplayTextViewController.h + + J6n7Ji2rF0QLVr4OHox5FEJgO8I= + + Headers/XHEmotion.h + + muxcmi7IE+l9BtKNhHHMjjVSBx4= + + Headers/XHEmotionCollectionViewCell.h + + VohhOkU0mjfUyoABv9HaGl5fgS0= + + Headers/XHEmotionCollectionViewFlowLayout.h + + G5xrWp7MS8ErhxQkDUPBLGLbZjs= + + Headers/XHEmotionManager.h + + YUwskG1lWb8xhzP5Kc8EQROoFLk= + + Headers/XHEmotionManagerView.h + + MOuMOll22bZisDJJNLL7/rl11Qs= + + Headers/XHEmotionSectionBar.h + + LuwyMO1PWwtedDffsd24nHu5RTI= + + Headers/XHFileAttribute.h + + PPI3ntJKSuYUv4P5EFJaKIa1maI= + + Headers/XHFoundationMacro.h + + OAXi1OXp5YQwswW+dQ5J0VezdF8= + + Headers/XHHTTPClient.h + + Bexbk4JzCkH60hATNBhtZcBxqJU= + + Headers/XHLocationHelper.h + + HDoX7QFhFrk7bzfLnDyyCCo62AY= + + Headers/XHMacro.h + + Z2EHYnHz9qJgE/cftK+K8bxrOHs= + + Headers/XHMessage.h + + 66OZjUkM2BpYoumbDMCF97TxoIM= + + Headers/XHMessageAvatarFactory.h + + MtZ18pUB1PCB8zr3AVzqqOY9afU= + + Headers/XHMessageBubbleFactory.h + + YH5uE9n6f3LS81zwfDEJ0RY+7+U= + + Headers/XHMessageBubbleHelper.h + + V5sp4ktq6O64DPuDy/k6ibk0D14= + + Headers/XHMessageBubbleView.h + + befeqg47XlwZUFmoQ5s0KGQBEvk= + + Headers/XHMessageInputView.h + + ZhHhq5d2cFryFIn9qXGKDF3TKtg= + + Headers/XHMessageModel.h + + BMVFzKfh2CsaFFZYlfVT42IzTMo= + + Headers/XHMessageTableView.h + + 8DP62yumdo4nDrCBIlDM0S2GyGw= + + Headers/XHMessageTableViewCell.h + + CJjSgH+xJwSnxTXV1v8cg4NUvB8= + + Headers/XHMessageTableViewController.h + + WZ1RrJ3c6ZmAMB4AfMJsJQeIHi8= + + Headers/XHMessageTextView.h + + CS6kcQtLszNJP4XT2IFP8HMrQTQ= + + Headers/XHMessageVideoConverPhotoFactory.h + + 8t3Y05rbgrW2O/hiU4vpB+dZmzs= + + Headers/XHMessageVoiceFactory.h + + tndlNJednJe2q2Fkutu9nU8rMLI= + + Headers/XHOperationNetworkKit.h + + Xb21zRuly5dkH36+g/IyN8oh6js= + + Headers/XHPhotographyHelper.h + + Lb98LUr8LjyTpy3XZiRl3IUACoE= + + Headers/XHShareMenuItem.h + + 7vVw6L0a2LxoCHKm1In4Z5TyXlI= + + Headers/XHShareMenuView.h + + +r/FWqmkr1IpSr61pJiE4Pw0fLQ= + + Headers/XHUIKitMacro.h + + YevRfsp/JZKtgNuTvSOeUtZak18= + + Headers/XHVideoOutputSampleBufferFactory.h + + 24nbCVzeXPuiNuOzMpxHX7K1doo= + + Headers/XHVoiceCommonHelper.h + + moU9NLC0Pa2WSi2LJvGU+QGyPiI= + + Headers/XHVoiceRecordHUD.h + + YZIvhC5KaoubO2QyphlvXdvNkvE= + + Headers/XHVoiceRecordHelper.h + + Mqs6z6zEG7sAP1FIBZjFk4FvMAA= + + MessageVideoPlay@2x.png + + yJ5NL6IrhVPqy2CYZd1QXYV9DFs= + + ReceiverVoiceNodePlaying000@2x.png + + H+b58WdNjEq3Jy9fFoFXz8nIFxQ= + + ReceiverVoiceNodePlaying001@2x.png + + Zm8fEaRUUJ9ZoosnZUufBejUf6I= + + ReceiverVoiceNodePlaying002@2x.png + + tqxrWeNyyN0zPNqvjIBwLL426VY= + + ReceiverVoiceNodePlaying003@2x.png + + guZlK+YNA3/A5z57Pu+PyOuM5sE= + + ReceiverVoiceNodePlaying@2x.png + + tcjm1Ysw9pP5hTnXNtZiiiC+0vw= + + RecordCancel@2x.png + + MYJXz9OV8RFtWWPtPf9HOX0W9TU= + + RecordingBkg@2x.png + + 7Eq/imYvhKo2mo5kgNb9bwF3124= + + RecordingSignal001@2x.png + + DaQyA4Z/cS4wQR6xPFQBPZIW3XM= + + RecordingSignal002@2x.png + + WV++TqgBVnetvziHuXmCk1YoM3Y= + + RecordingSignal003@2x.png + + t938Zeh7ri98ZKGQfvsEzCTLbhQ= + + RecordingSignal004@2x.png + + g3phFoQsIKVf5UkwQwQCIOnaxrk= + + RecordingSignal005@2x.png + + AhghCUNnCQ9hMs5tKCBauFJAslg= + + RecordingSignal006@2x.png + + Ids/pSqMOjMrti12XZtUUEL7bbU= + + RecordingSignal007@2x.png + + ROEcDBgiD/2cjr3AlGSi88NRxKQ= + + RecordingSignal008@2x.png + + w8brq/JX2xAQaOuFdai2MXsS2O8= + + SECoreTextView.bundle/kb-drag-dot.png + + /tiuru1GQC9K76fTIAe3sEc4HoI= + + SECoreTextView.bundle/kb-drag-dot@2x.png + + SwF9xQWIUulIomiovQdVJYSx59Q= + + SECoreTextView.bundle/kb-loupe-hi.png + + 8QcUugiBTEb8pV7+fX07Q4BSBjs= + + SECoreTextView.bundle/kb-loupe-hi@2x.png + + H86At9gO8dpPC3RTLpEvsfmCLro= + + SECoreTextView.bundle/kb-loupe-lo.png + + qHxOhrMImkSlsv4zPfD3SradWLc= + + SECoreTextView.bundle/kb-loupe-lo@2x.png + + e6GYCLIVyxk6FwGBCQuCAl2XLi0= + + SECoreTextView.bundle/kb-loupe-mask.png + + RVcIDnRCl7HT6H2JemYxI8AZ96M= + + SECoreTextView.bundle/kb-loupe-mask@2x.png + + WtUC03uZx++riizUCEuqswvzs3A= + + SECoreTextView.bundle/kb-magnifier-ranged-hi.png + + YHsmVF3BQ1+7UET2Bmjm2XwChR4= + + SECoreTextView.bundle/kb-magnifier-ranged-hi@2x.png + + n+GMYemfC8gndRdHVtG5M13Oxfc= + + SECoreTextView.bundle/kb-magnifier-ranged-lo-stemless.png + + /uwLLa4qmKgXQmchW0oFW73zXOI= + + SECoreTextView.bundle/kb-magnifier-ranged-lo-stemless@2x.png + + k1BtJSCLKsX9uYUJpw4ctuVRS1o= + + SECoreTextView.bundle/kb-magnifier-ranged-lo.png + + dzvzqqfE5l4yaphFfEMhUBpg05s= + + SECoreTextView.bundle/kb-magnifier-ranged-lo@2x.png + + ziCpxCt+m23ufk0vlSVmf7KnE8A= + + SECoreTextView.bundle/kb-magnifier-ranged-mask-flipped.png + + bOzdxh9sYf8Mg08b48NzNvNH2nE= + + SECoreTextView.bundle/kb-magnifier-ranged-mask-flipped@2x.png + + v8suxV1rRZ04UIudUKpDb/fhnpc= + + SECoreTextView.bundle/kb-magnifier-ranged-mask.png + + hO/Eo3PXCZHPdcInWMRaWBeBXP8= + + SECoreTextView.bundle/kb-magnifier-ranged-mask@2x.png + + csIkRjZ7kX6DGycyRH0N1koDg8M= + + SenderVoiceNodePlaying000@2x.png + + H+b58WdNjEq3Jy9fFoFXz8nIFxQ= + + SenderVoiceNodePlaying001@2x.png + + b+blmbxkZTfSiegj7YwqaykgFyg= + + SenderVoiceNodePlaying002@2x.png + + dC6SEPzIQR+C9mOSKBIju9oG9MY= + + SenderVoiceNodePlaying003@2x.png + + I9fcwTy5pc5AO6f3+DEF1IFH2XY= + + SenderVoiceNodePlaying@2x.png + + nzKgSh+3ZnwuXMWQSyClNNDnfvw= + + VoiceBtn_Black@2x.png + + C+KezNOQHhjS6up+mOeJ0vqQvCY= + + VoiceBtn_BlackHL@2x.png + + dlK1dAq4C4jjO1+PqU4mAoD4o7I= + + avator@2x.png + + sgyKq5ukhaE2rvkeIQubrW1jMCI= + + en.lproj/MessageDisplayKitString.strings + + hash + + 5attu1fe2JTTuhjUZ09sb0frT0U= + + optional + + + face@2x.png + + nE1ghRflqINwQndmuU3hGZ9S/O0= + + face_HL@2x.png + + VCik7fmOwBvy9Y8p/aytqXy8b4k= + + input-bar-flat.png + + lkLDysijMuyGRO2U1D/rc6i/moQ= + + input-bar-flat@2x.png + + Dvdtjjmqm/RF03CnmMi7uxm6MDU= + + keyboard@2x.png + + 4yYUsM7jZxU/L+vtkpSeVichASc= + + keyboard_HL@2x.png + + 2z8+mc0Esm/ShNPglb7iOJFVSdo= + + msg_chat_voice_unread.png + + zF3nN5tWim2NNb459BmirF2lqV8= + + msg_chat_voice_unread@2x.png + + O6wZdV24rGbSj0fGOdeM9bqnmFY= + + multiMedia@2x.png + + 7ti+5vWUIjwLRnD6Ht9i2Dzxnl0= + + multiMedia_HL@2x.png + + ddk1hIv9f9Npm+wqldYi6qm0pc4= + + placeholderImage@2x.png + + cPJi/+3A51RBz150RXajBPNj+so= + + voice@2x.png + + 0GsLQU+rMy9PVbPQzVd+CKOiApo= + + voice_HL@2x.png + + 0N5Idcjobp7x1fYD0d/qKPzSYxg= + + weChatBubble_Receiving_Solid@2x.png + + XSMxKJw4wdSCGiPAOukHjbVOY0g= + + weChatBubble_Sending_Solid@2x.png + + 3mfDxwCYebIVghNCeYe4g+9EU80= + + zh-Hans.lproj/MessageDisplayKitString.strings + + hash + + 7fzgSMzvrJpphjTWtsjIFf/gU6o= + + optional + + + + rules + + ^ + + ^.*\.lproj/ + + optional + + weight + 1000 + + ^.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^version.plist$ + + + rules2 + + .*\.dSYM($|/) + + weight + 11 + + ^ + + weight + 20 + + ^(.*/)?\.DS_Store$ + + omit + + weight + 2000 + + ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ + + nested + + weight + 10 + + ^.* + + ^.*\.lproj/ + + optional + + weight + 1000 + + ^.*\.lproj/locversion.plist$ + + omit + + weight + 1100 + + ^Info\.plist$ + + omit + + weight + 20 + + ^PkgInfo$ + + omit + + weight + 20 + + ^[^/]+$ + + nested + + weight + 10 + + ^embedded\.provisionprofile$ + + weight + 20 + + ^version\.plist$ + + weight + 20 + + + + diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/avator@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/avator@2x.png new file mode 100644 index 0000000..425d02e Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/avator@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/en.lproj/MessageDisplayKitString.strings b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/en.lproj/MessageDisplayKitString.strings new file mode 100644 index 0000000..56c9a60 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/en.lproj/MessageDisplayKitString.strings differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/face@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/face@2x.png new file mode 100644 index 0000000..dd56f56 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/face@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/face_HL@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/face_HL@2x.png new file mode 100644 index 0000000..83fb884 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/face_HL@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/input-bar-flat.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/input-bar-flat.png new file mode 100644 index 0000000..25750ef Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/input-bar-flat.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/input-bar-flat@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/input-bar-flat@2x.png new file mode 100644 index 0000000..a4d4e2a Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/input-bar-flat@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/keyboard@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/keyboard@2x.png new file mode 100644 index 0000000..20af864 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/keyboard@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/keyboard_HL@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/keyboard_HL@2x.png new file mode 100644 index 0000000..83074b0 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/keyboard_HL@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/msg_chat_voice_unread.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/msg_chat_voice_unread.png new file mode 100644 index 0000000..92a6c24 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/msg_chat_voice_unread.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/msg_chat_voice_unread@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/msg_chat_voice_unread@2x.png new file mode 100644 index 0000000..99406d6 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/msg_chat_voice_unread@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/multiMedia@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/multiMedia@2x.png new file mode 100644 index 0000000..458015a Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/multiMedia@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/multiMedia_HL@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/multiMedia_HL@2x.png new file mode 100644 index 0000000..19e6df7 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/multiMedia_HL@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/placeholderImage@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/placeholderImage@2x.png new file mode 100644 index 0000000..9b6dea3 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/placeholderImage@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/voice@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/voice@2x.png new file mode 100644 index 0000000..d14715b Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/voice@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/voice_HL@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/voice_HL@2x.png new file mode 100644 index 0000000..970bb29 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/voice_HL@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/weChatBubble_Receiving_Solid@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/weChatBubble_Receiving_Solid@2x.png new file mode 100644 index 0000000..c227285 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/weChatBubble_Receiving_Solid@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/weChatBubble_Sending_Solid@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/weChatBubble_Sending_Solid@2x.png new file mode 100644 index 0000000..3054f00 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/weChatBubble_Sending_Solid@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/zh-Hans.lproj/MessageDisplayKitString.strings b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/zh-Hans.lproj/MessageDisplayKitString.strings new file mode 100644 index 0000000..eaafab5 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/Vendor/MessageDisplayKit/MessageDisplayKit.framework/zh-Hans.lproj/MessageDisplayKitString.strings differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion0.gif b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion0.gif new file mode 100644 index 0000000..0ba5b8f Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion0.gif differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion1.gif b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion1.gif new file mode 100644 index 0000000..5cd617b Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion1.gif differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion10.gif b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion10.gif new file mode 100644 index 0000000..5569c0a Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion10.gif differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion11.gif b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion11.gif new file mode 100644 index 0000000..e973308 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion11.gif differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion12.gif b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion12.gif new file mode 100644 index 0000000..9123680 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion12.gif differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion13.gif b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion13.gif new file mode 100644 index 0000000..8f20848 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion13.gif differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion14.gif b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion14.gif new file mode 100644 index 0000000..c6a1b1f Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion14.gif differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion15.gif b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion15.gif new file mode 100644 index 0000000..314bf7c Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion15.gif differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion16.gif b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion16.gif new file mode 100644 index 0000000..0315436 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion16.gif differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion2.gif b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion2.gif new file mode 100644 index 0000000..797a132 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion2.gif differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion3.gif b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion3.gif new file mode 100644 index 0000000..cc22729 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion3.gif differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion4.gif b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion4.gif new file mode 100644 index 0000000..f4b9c3a Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion4.gif differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion5.gif b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion5.gif new file mode 100644 index 0000000..2695fdd Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion5.gif differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion6.gif b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion6.gif new file mode 100644 index 0000000..12c6783 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion6.gif differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion7.gif b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion7.gif new file mode 100644 index 0000000..367d616 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion7.gif differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion8.gif b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion8.gif new file mode 100644 index 0000000..acf9430 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion8.gif differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion9.gif b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion9.gif new file mode 100644 index 0000000..a5e6e53 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/emoticons/emotion9.gif differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/main.m b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/main.m new file mode 100644 index 0000000..a30d8ad --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/main.m @@ -0,0 +1,16 @@ +// +// main.m +// MessageDisplayKitLeanchatExample +// +// Created by Jack_iMac on 15/3/21. +// Copyright (c) 2015年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion0@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion0@2x.png new file mode 100644 index 0000000..fed59a4 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion0@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion10@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion10@2x.png new file mode 100644 index 0000000..1474622 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion10@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion11@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion11@2x.png new file mode 100644 index 0000000..1a23699 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion11@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion12@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion12@2x.png new file mode 100644 index 0000000..83e90fe Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion12@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion13@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion13@2x.png new file mode 100644 index 0000000..322663a Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion13@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion14@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion14@2x.png new file mode 100644 index 0000000..1a23699 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion14@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion15@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion15@2x.png new file mode 100644 index 0000000..83e90fe Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion15@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion1@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion1@2x.png new file mode 100644 index 0000000..0c2d251 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion1@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion2@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion2@2x.png new file mode 100644 index 0000000..c99dcdc Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion2@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion3@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion3@2x.png new file mode 100644 index 0000000..9df686e Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion3@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion4@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion4@2x.png new file mode 100644 index 0000000..d327fb6 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion4@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion5@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion5@2x.png new file mode 100644 index 0000000..287ab21 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion5@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion6@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion6@2x.png new file mode 100644 index 0000000..a8fc585 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion6@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion7@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion7@2x.png new file mode 100644 index 0000000..4a0acc1 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion7@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion8@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion8@2x.png new file mode 100644 index 0000000..dd8ab8b Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion8@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion9@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion9@2x.png new file mode 100644 index 0000000..6647caa Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/section0_emotion9@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_friendcard@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_friendcard@2x.png new file mode 100644 index 0000000..522e01a Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_friendcard@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_location@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_location@2x.png new file mode 100644 index 0000000..718b04e Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_location@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_myfav@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_myfav@2x.png new file mode 100644 index 0000000..755c240 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_myfav@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_openapi@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_openapi@2x.png new file mode 100644 index 0000000..43e0190 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_openapi@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_pic@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_pic@2x.png new file mode 100644 index 0000000..6d55408 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_pic@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_video@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_video@2x.png new file mode 100644 index 0000000..72a5f07 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_video@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_videovoip@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_videovoip@2x.png new file mode 100644 index 0000000..dd25d26 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_videovoip@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_voiceinput@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_voiceinput@2x.png new file mode 100644 index 0000000..1c0233c Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_voiceinput@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_voipvoice@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_voipvoice@2x.png new file mode 100644 index 0000000..b8413f1 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_voipvoice@2x.png differ diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_wxtalk@2x.png b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_wxtalk@2x.png new file mode 100644 index 0000000..2201119 Binary files /dev/null and b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExample/sharemore_wxtalk@2x.png differ diff --git a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExampleTests/MessageDisplayKitStoryboardExampleTests-Info.plist b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExampleTests/Info.plist similarity index 78% rename from Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExampleTests/MessageDisplayKitStoryboardExampleTests-Info.plist rename to Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExampleTests/Info.plist index 7873a4f..19e90a2 100644 --- a/Example/MessageDisplayExample/MessageDisplayKitStoryboardExample/MessageDisplayKitStoryboardExampleTests/MessageDisplayKitStoryboardExampleTests-Info.plist +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExampleTests/Info.plist @@ -5,11 +5,13 @@ CFBundleDevelopmentRegion en CFBundleExecutable - ${EXECUTABLE_NAME} + $(EXECUTABLE_NAME) CFBundleIdentifier - com.HUAJIE.${PRODUCT_NAME:rfc1034identifier} + com.HUAJIE.$(PRODUCT_NAME:rfc1034identifier) CFBundleInfoDictionaryVersion 6.0 + CFBundleName + $(PRODUCT_NAME) CFBundlePackageType BNDL CFBundleShortVersionString diff --git a/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExampleTests/MessageDisplayKitLeanchatExampleTests.m b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExampleTests/MessageDisplayKitLeanchatExampleTests.m new file mode 100644 index 0000000..516ca53 --- /dev/null +++ b/Example/MessageDisplayKitLeanchatExample/MessageDisplayKitLeanchatExampleTests/MessageDisplayKitLeanchatExampleTests.m @@ -0,0 +1,40 @@ +// +// MessageDisplayKitLeanchatExampleTests.m +// MessageDisplayKitLeanchatExampleTests +// +// Created by Jack_iMac on 15/3/21. +// Copyright (c) 2015年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import +#import + +@interface MessageDisplayKitLeanchatExampleTests : XCTestCase + +@end + +@implementation MessageDisplayKitLeanchatExampleTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testExample { + // This is an example of a functional test case. + XCTAssert(YES, @"Pass"); +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +@end diff --git a/Example/MessageDisplayKitLib/MessageDisplayKitLib.xcodeproj/project.pbxproj b/Example/MessageDisplayKitLib/MessageDisplayKitLib.xcodeproj/project.pbxproj new file mode 100644 index 0000000..049213b --- /dev/null +++ b/Example/MessageDisplayKitLib/MessageDisplayKitLib.xcodeproj/project.pbxproj @@ -0,0 +1,1154 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + E466FA521B42F43300EE02A6 /* XHConfigurationHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = E466FA511B42F43300EE02A6 /* XHConfigurationHelper.m */; }; + F751C2161A4C3E5000743ECB /* libMessageDisplayKitLib.a in Frameworks */ = {isa = PBXBuildFile; fileRef = F751C20A1A4C3E5000743ECB /* libMessageDisplayKitLib.a */; }; + F751C7B61A4C429100743ECB /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F751C7B51A4C429100743ECB /* UIKit.framework */; }; + F751C7B81A4C429500743ECB /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F751C7B71A4C429500743ECB /* Foundation.framework */; }; + F7B9E8401A4D5E7B0072F81B /* NSString+MessageInputView.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E79C1A4D5E7B0072F81B /* NSString+MessageInputView.m */; }; + F7B9E8411A4D5E7B0072F81B /* NSString+XHMD5.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E79E1A4D5E7B0072F81B /* NSString+XHMD5.m */; }; + F7B9E8421A4D5E7B0072F81B /* UIImage+Alpha.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7A21A4D5E7B0072F81B /* UIImage+Alpha.m */; }; + F7B9E8431A4D5E7B0072F81B /* UIImage+Resize.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7A41A4D5E7B0072F81B /* UIImage+Resize.m */; }; + F7B9E8441A4D5E7B0072F81B /* UIImage+RoundedCorner.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7A61A4D5E7B0072F81B /* UIImage+RoundedCorner.m */; }; + F7B9E8451A4D5E7B0072F81B /* UIImage+Utility.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7A81A4D5E7B0072F81B /* UIImage+Utility.m */; }; + F7B9E8461A4D5E7B0072F81B /* UIImage+XHRounded.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7AA1A4D5E7B0072F81B /* UIImage+XHRounded.m */; }; + F7B9E8471A4D5E7B0072F81B /* UIScrollView+XHkeyboardControl.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7AD1A4D5E7B0072F81B /* UIScrollView+XHkeyboardControl.m */; }; + F7B9E8481A4D5E7B0072F81B /* UIView+XHRemoteImage.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7B01A4D5E7B0072F81B /* UIView+XHRemoteImage.m */; }; + F7B9E8491A4D5E7B0072F81B /* XHAudioPlayerHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7B31A4D5E7B0072F81B /* XHAudioPlayerHelper.m */; }; + F7B9E84A1A4D5E7B0072F81B /* XHCaptureHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7B51A4D5E7B0072F81B /* XHCaptureHelper.m */; }; + F7B9E84B1A4D5E7B0072F81B /* XHLocationHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7B71A4D5E7B0072F81B /* XHLocationHelper.m */; }; + F7B9E84C1A4D5E7B0072F81B /* XHMessageBubbleHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7B91A4D5E7B0072F81B /* XHMessageBubbleHelper.m */; }; + F7B9E84D1A4D5E7B0072F81B /* XHPhotographyHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7BB1A4D5E7B0072F81B /* XHPhotographyHelper.m */; }; + F7B9E84E1A4D5E7B0072F81B /* XHVoiceCommonHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7BD1A4D5E7B0072F81B /* XHVoiceCommonHelper.m */; }; + F7B9E84F1A4D5E7B0072F81B /* XHVoiceRecordHelper.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7BF1A4D5E7B0072F81B /* XHVoiceRecordHelper.m */; }; + F7B9E8501A4D5E7B0072F81B /* XHDisplayEmotionViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7C41A4D5E7B0072F81B /* XHDisplayEmotionViewController.m */; }; + F7B9E8511A4D5E7B0072F81B /* XHDisplayLocationViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7C71A4D5E7B0072F81B /* XHDisplayLocationViewController.m */; }; + F7B9E8521A4D5E7B0072F81B /* XHDisplayMediaViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7CA1A4D5E7B0072F81B /* XHDisplayMediaViewController.m */; }; + F7B9E8531A4D5E7B0072F81B /* XHDisplayTextViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7CD1A4D5E7B0072F81B /* XHDisplayTextViewController.m */; }; + F7B9E8541A4D5E7B0072F81B /* XHMessageTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7CF1A4D5E7B0072F81B /* XHMessageTableViewController.m */; }; + F7B9E8551A4D5E7B0072F81B /* XHCacheManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7D31A4D5E7B0072F81B /* XHCacheManager.m */; }; + F7B9E8561A4D5E7B0072F81B /* XHFileAttribute.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7D51A4D5E7B0072F81B /* XHFileAttribute.m */; }; + F7B9E8571A4D5E7B0072F81B /* XHHTTPClient.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7D81A4D5E7B0072F81B /* XHHTTPClient.m */; }; + F7B9E8581A4D5E7B0072F81B /* XHOperationNetworkKit.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7DA1A4D5E7B0072F81B /* XHOperationNetworkKit.m */; }; + F7B9E8591A4D5E7B0072F81B /* XHMessageAvatarFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7DD1A4D5E7B0072F81B /* XHMessageAvatarFactory.m */; }; + F7B9E85A1A4D5E7B0072F81B /* XHMessageBubbleFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7DF1A4D5E7B0072F81B /* XHMessageBubbleFactory.m */; }; + F7B9E85B1A4D5E7B0072F81B /* XHMessageVideoConverPhotoFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7E11A4D5E7B0072F81B /* XHMessageVideoConverPhotoFactory.m */; }; + F7B9E85C1A4D5E7B0072F81B /* XHMessageVoiceFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7E31A4D5E7B0072F81B /* XHMessageVoiceFactory.m */; }; + F7B9E85D1A4D5E7B0072F81B /* XHVideoOutputSampleBufferFactory.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7E51A4D5E7B0072F81B /* XHVideoOutputSampleBufferFactory.m */; }; + F7B9E85E1A4D5E7B0072F81B /* XHAnnotation.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7EC1A4D5E7B0072F81B /* XHAnnotation.m */; }; + F7B9E85F1A4D5E7B0072F81B /* XHEmotion.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7EE1A4D5E7B0072F81B /* XHEmotion.m */; }; + F7B9E8601A4D5E7B0072F81B /* XHEmotionManager.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7F01A4D5E7B0072F81B /* XHEmotionManager.m */; }; + F7B9E8611A4D5E7B0072F81B /* XHMessage.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7F21A4D5E7B0072F81B /* XHMessage.m */; }; + F7B9E8621A4D5E7B0072F81B /* XHShareMenuItem.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7F51A4D5E7B0072F81B /* XHShareMenuItem.m */; }; + F7B9E8631A4D5E7B0072F81B /* FLAnimatedImage.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7F91A4D5E7B0072F81B /* FLAnimatedImage.m */; }; + F7B9E8641A4D5E7B0072F81B /* FLAnimatedImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7FB1A4D5E7B0072F81B /* FLAnimatedImageView.m */; }; + F7B9E8651A4D5E7B0072F81B /* LKBadgeView.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E7FE1A4D5E7B0072F81B /* LKBadgeView.m */; }; + F7B9E8671A4D5E7B0072F81B /* SECompatibility.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E8031A4D5E7B0072F81B /* SECompatibility.m */; }; + F7B9E8681A4D5E7B0072F81B /* SEConstants.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E8051A4D5E7B0072F81B /* SEConstants.m */; }; + F7B9E8691A4D5E7B0072F81B /* SELineLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E8071A4D5E7B0072F81B /* SELineLayout.m */; }; + F7B9E86A1A4D5E7B0072F81B /* SELinkText.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E8091A4D5E7B0072F81B /* SELinkText.m */; }; + F7B9E86B1A4D5E7B0072F81B /* SESelectionGrabber.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E80B1A4D5E7B0072F81B /* SESelectionGrabber.m */; }; + F7B9E86C1A4D5E7B0072F81B /* SETextAttachment.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E80D1A4D5E7B0072F81B /* SETextAttachment.m */; }; + F7B9E86D1A4D5E7B0072F81B /* SETextEditingCaret.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E80F1A4D5E7B0072F81B /* SETextEditingCaret.m */; }; + F7B9E86E1A4D5E7B0072F81B /* SETextGeometry.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E8111A4D5E7B0072F81B /* SETextGeometry.m */; }; + F7B9E86F1A4D5E7B0072F81B /* SETextInput.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E8131A4D5E7B0072F81B /* SETextInput.m */; }; + F7B9E8701A4D5E7B0072F81B /* SETextLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E8151A4D5E7B0072F81B /* SETextLayout.m */; }; + F7B9E8711A4D5E7B0072F81B /* SETextMagnifierCaret.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E8171A4D5E7B0072F81B /* SETextMagnifierCaret.m */; }; + F7B9E8721A4D5E7B0072F81B /* SETextMagnifierRanged.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E8191A4D5E7B0072F81B /* SETextMagnifierRanged.m */; }; + F7B9E8731A4D5E7B0072F81B /* SETextSelection.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E81B1A4D5E7B0072F81B /* SETextSelection.m */; }; + F7B9E8741A4D5E7B0072F81B /* SETextSelectionView.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E81D1A4D5E7B0072F81B /* SETextSelectionView.m */; }; + F7B9E8751A4D5E7B0072F81B /* SETextView.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E81F1A4D5E7B0072F81B /* SETextView.m */; }; + F7B9E8761A4D5E7B0072F81B /* XHBaseTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E8231A4D5E7B0072F81B /* XHBaseTableViewCell.m */; }; + F7B9E8771A4D5E7B0072F81B /* XHBubblePhotoImageView.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E8261A4D5E7B0072F81B /* XHBubblePhotoImageView.m */; }; + F7B9E8781A4D5E7B0072F81B /* XHMessageBubbleView.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E8281A4D5E7B0072F81B /* XHMessageBubbleView.m */; }; + F7B9E8791A4D5E7B0072F81B /* XHMessageTableView.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E82A1A4D5E7B0072F81B /* XHMessageTableView.m */; }; + F7B9E87A1A4D5E7B0072F81B /* XHMessageTableViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E82C1A4D5E7B0072F81B /* XHMessageTableViewCell.m */; }; + F7B9E87B1A4D5E7B0072F81B /* XHMessageInputView.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E82F1A4D5E7B0072F81B /* XHMessageInputView.m */; }; + F7B9E87C1A4D5E7B0072F81B /* XHMessageTextView.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E8311A4D5E7B0072F81B /* XHMessageTextView.m */; }; + F7B9E87D1A4D5E7B0072F81B /* XHVoiceRecordHUD.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E8331A4D5E7B0072F81B /* XHVoiceRecordHUD.m */; }; + F7B9E87E1A4D5E7B0072F81B /* XHEmotionCollectionViewCell.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E8361A4D5E7B0072F81B /* XHEmotionCollectionViewCell.m */; }; + F7B9E87F1A4D5E7B0072F81B /* XHEmotionCollectionViewFlowLayout.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E8381A4D5E7B0072F81B /* XHEmotionCollectionViewFlowLayout.m */; }; + F7B9E8801A4D5E7B0072F81B /* XHEmotionManagerView.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E83A1A4D5E7B0072F81B /* XHEmotionManagerView.m */; }; + F7B9E8811A4D5E7B0072F81B /* XHEmotionSectionBar.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E83C1A4D5E7B0072F81B /* XHEmotionSectionBar.m */; }; + F7B9E8821A4D5E7B0072F81B /* XHShareMenuView.m in Sources */ = {isa = PBXBuildFile; fileRef = F7B9E83E1A4D5E7B0072F81B /* XHShareMenuView.m */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + F751C2171A4C3E5000743ECB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F751C2021A4C3E5000743ECB /* Project object */; + proxyType = 1; + remoteGlobalIDString = F751C2091A4C3E5000743ECB; + remoteInfo = MessageDisplayKitLib; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + F751C2081A4C3E5000743ECB /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = "include/$(PRODUCT_NAME)"; + dstSubfolderSpec = 16; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + E466FA501B42F43300EE02A6 /* XHConfigurationHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHConfigurationHelper.h; sourceTree = ""; }; + E466FA511B42F43300EE02A6 /* XHConfigurationHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHConfigurationHelper.m; sourceTree = ""; }; + E499F58F1B43BE0000E45C84 /* keyboard_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyboard_HL@2x.png"; sourceTree = ""; }; + E499F5901B43BE0000E45C84 /* keyboard@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyboard@2x.png"; sourceTree = ""; }; + F751C20A1A4C3E5000743ECB /* libMessageDisplayKitLib.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libMessageDisplayKitLib.a; sourceTree = BUILT_PRODUCTS_DIR; }; + F751C2151A4C3E5000743ECB /* MessageDisplayKitLibTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = MessageDisplayKitLibTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + F751C21B1A4C3E5000743ECB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + F751C7B21A4C423D00743ECB /* MessageDisplayKitLib-Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "MessageDisplayKitLib-Prefix.pch"; sourceTree = ""; }; + F751C7B51A4C429100743ECB /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; + F751C7B71A4C429500743ECB /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + F7B9E79B1A4D5E7B0072F81B /* NSString+MessageInputView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+MessageInputView.h"; sourceTree = ""; }; + F7B9E79C1A4D5E7B0072F81B /* NSString+MessageInputView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+MessageInputView.m"; sourceTree = ""; }; + F7B9E79D1A4D5E7B0072F81B /* NSString+XHMD5.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSString+XHMD5.h"; sourceTree = ""; }; + F7B9E79E1A4D5E7B0072F81B /* NSString+XHMD5.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSString+XHMD5.m"; sourceTree = ""; }; + F7B9E7A11A4D5E7B0072F81B /* UIImage+Alpha.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+Alpha.h"; sourceTree = ""; }; + F7B9E7A21A4D5E7B0072F81B /* UIImage+Alpha.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+Alpha.m"; sourceTree = ""; }; + F7B9E7A31A4D5E7B0072F81B /* UIImage+Resize.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+Resize.h"; sourceTree = ""; }; + F7B9E7A41A4D5E7B0072F81B /* UIImage+Resize.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+Resize.m"; sourceTree = ""; }; + F7B9E7A51A4D5E7B0072F81B /* UIImage+RoundedCorner.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+RoundedCorner.h"; sourceTree = ""; }; + F7B9E7A61A4D5E7B0072F81B /* UIImage+RoundedCorner.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+RoundedCorner.m"; sourceTree = ""; }; + F7B9E7A71A4D5E7B0072F81B /* UIImage+Utility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+Utility.h"; sourceTree = ""; }; + F7B9E7A81A4D5E7B0072F81B /* UIImage+Utility.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+Utility.m"; sourceTree = ""; }; + F7B9E7A91A4D5E7B0072F81B /* UIImage+XHRounded.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIImage+XHRounded.h"; sourceTree = ""; }; + F7B9E7AA1A4D5E7B0072F81B /* UIImage+XHRounded.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIImage+XHRounded.m"; sourceTree = ""; }; + F7B9E7AC1A4D5E7B0072F81B /* UIScrollView+XHkeyboardControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIScrollView+XHkeyboardControl.h"; sourceTree = ""; }; + F7B9E7AD1A4D5E7B0072F81B /* UIScrollView+XHkeyboardControl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIScrollView+XHkeyboardControl.m"; sourceTree = ""; }; + F7B9E7AF1A4D5E7B0072F81B /* UIView+XHRemoteImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "UIView+XHRemoteImage.h"; sourceTree = ""; }; + F7B9E7B01A4D5E7B0072F81B /* UIView+XHRemoteImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "UIView+XHRemoteImage.m"; sourceTree = ""; }; + F7B9E7B21A4D5E7B0072F81B /* XHAudioPlayerHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHAudioPlayerHelper.h; sourceTree = ""; }; + F7B9E7B31A4D5E7B0072F81B /* XHAudioPlayerHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHAudioPlayerHelper.m; sourceTree = ""; }; + F7B9E7B41A4D5E7B0072F81B /* XHCaptureHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHCaptureHelper.h; sourceTree = ""; }; + F7B9E7B51A4D5E7B0072F81B /* XHCaptureHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHCaptureHelper.m; sourceTree = ""; }; + F7B9E7B61A4D5E7B0072F81B /* XHLocationHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHLocationHelper.h; sourceTree = ""; }; + F7B9E7B71A4D5E7B0072F81B /* XHLocationHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHLocationHelper.m; sourceTree = ""; }; + F7B9E7B81A4D5E7B0072F81B /* XHMessageBubbleHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageBubbleHelper.h; sourceTree = ""; }; + F7B9E7B91A4D5E7B0072F81B /* XHMessageBubbleHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageBubbleHelper.m; sourceTree = ""; }; + F7B9E7BA1A4D5E7B0072F81B /* XHPhotographyHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHPhotographyHelper.h; sourceTree = ""; }; + F7B9E7BB1A4D5E7B0072F81B /* XHPhotographyHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHPhotographyHelper.m; sourceTree = ""; }; + F7B9E7BC1A4D5E7B0072F81B /* XHVoiceCommonHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHVoiceCommonHelper.h; sourceTree = ""; }; + F7B9E7BD1A4D5E7B0072F81B /* XHVoiceCommonHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHVoiceCommonHelper.m; sourceTree = ""; }; + F7B9E7BE1A4D5E7B0072F81B /* XHVoiceRecordHelper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHVoiceRecordHelper.h; sourceTree = ""; }; + F7B9E7BF1A4D5E7B0072F81B /* XHVoiceRecordHelper.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHVoiceRecordHelper.m; sourceTree = ""; }; + F7B9E7C31A4D5E7B0072F81B /* XHDisplayEmotionViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHDisplayEmotionViewController.h; sourceTree = ""; }; + F7B9E7C41A4D5E7B0072F81B /* XHDisplayEmotionViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHDisplayEmotionViewController.m; sourceTree = ""; }; + F7B9E7C61A4D5E7B0072F81B /* XHDisplayLocationViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHDisplayLocationViewController.h; sourceTree = ""; }; + F7B9E7C71A4D5E7B0072F81B /* XHDisplayLocationViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHDisplayLocationViewController.m; sourceTree = ""; }; + F7B9E7C91A4D5E7B0072F81B /* XHDisplayMediaViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHDisplayMediaViewController.h; sourceTree = ""; }; + F7B9E7CA1A4D5E7B0072F81B /* XHDisplayMediaViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHDisplayMediaViewController.m; sourceTree = ""; }; + F7B9E7CC1A4D5E7B0072F81B /* XHDisplayTextViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHDisplayTextViewController.h; sourceTree = ""; }; + F7B9E7CD1A4D5E7B0072F81B /* XHDisplayTextViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHDisplayTextViewController.m; sourceTree = ""; }; + F7B9E7CE1A4D5E7B0072F81B /* XHMessageTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageTableViewController.h; sourceTree = ""; }; + F7B9E7CF1A4D5E7B0072F81B /* XHMessageTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageTableViewController.m; sourceTree = ""; }; + F7B9E7D21A4D5E7B0072F81B /* XHCacheManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHCacheManager.h; sourceTree = ""; }; + F7B9E7D31A4D5E7B0072F81B /* XHCacheManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHCacheManager.m; sourceTree = ""; }; + F7B9E7D41A4D5E7B0072F81B /* XHFileAttribute.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHFileAttribute.h; sourceTree = ""; }; + F7B9E7D51A4D5E7B0072F81B /* XHFileAttribute.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHFileAttribute.m; sourceTree = ""; }; + F7B9E7D71A4D5E7B0072F81B /* XHHTTPClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHHTTPClient.h; sourceTree = ""; }; + F7B9E7D81A4D5E7B0072F81B /* XHHTTPClient.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHHTTPClient.m; sourceTree = ""; }; + F7B9E7D91A4D5E7B0072F81B /* XHOperationNetworkKit.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHOperationNetworkKit.h; sourceTree = ""; }; + F7B9E7DA1A4D5E7B0072F81B /* XHOperationNetworkKit.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHOperationNetworkKit.m; sourceTree = ""; }; + F7B9E7DC1A4D5E7B0072F81B /* XHMessageAvatarFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageAvatarFactory.h; sourceTree = ""; }; + F7B9E7DD1A4D5E7B0072F81B /* XHMessageAvatarFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageAvatarFactory.m; sourceTree = ""; }; + F7B9E7DE1A4D5E7B0072F81B /* XHMessageBubbleFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageBubbleFactory.h; sourceTree = ""; }; + F7B9E7DF1A4D5E7B0072F81B /* XHMessageBubbleFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageBubbleFactory.m; sourceTree = ""; }; + F7B9E7E01A4D5E7B0072F81B /* XHMessageVideoConverPhotoFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageVideoConverPhotoFactory.h; sourceTree = ""; }; + F7B9E7E11A4D5E7B0072F81B /* XHMessageVideoConverPhotoFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageVideoConverPhotoFactory.m; sourceTree = ""; }; + F7B9E7E21A4D5E7B0072F81B /* XHMessageVoiceFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageVoiceFactory.h; sourceTree = ""; }; + F7B9E7E31A4D5E7B0072F81B /* XHMessageVoiceFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageVoiceFactory.m; sourceTree = ""; }; + F7B9E7E41A4D5E7B0072F81B /* XHVideoOutputSampleBufferFactory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHVideoOutputSampleBufferFactory.h; sourceTree = ""; }; + F7B9E7E51A4D5E7B0072F81B /* XHVideoOutputSampleBufferFactory.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHVideoOutputSampleBufferFactory.m; sourceTree = ""; }; + F7B9E7E71A4D5E7B0072F81B /* XHFoundationMacro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHFoundationMacro.h; sourceTree = ""; }; + F7B9E7E81A4D5E7B0072F81B /* XHMacro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMacro.h; sourceTree = ""; }; + F7B9E7E91A4D5E7B0072F81B /* XHUIKitMacro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHUIKitMacro.h; sourceTree = ""; }; + F7B9E7EB1A4D5E7B0072F81B /* XHAnnotation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHAnnotation.h; sourceTree = ""; }; + F7B9E7EC1A4D5E7B0072F81B /* XHAnnotation.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHAnnotation.m; sourceTree = ""; }; + F7B9E7ED1A4D5E7B0072F81B /* XHEmotion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHEmotion.h; sourceTree = ""; }; + F7B9E7EE1A4D5E7B0072F81B /* XHEmotion.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHEmotion.m; sourceTree = ""; }; + F7B9E7EF1A4D5E7B0072F81B /* XHEmotionManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHEmotionManager.h; sourceTree = ""; }; + F7B9E7F01A4D5E7B0072F81B /* XHEmotionManager.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHEmotionManager.m; sourceTree = ""; }; + F7B9E7F11A4D5E7B0072F81B /* XHMessage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessage.h; sourceTree = ""; }; + F7B9E7F21A4D5E7B0072F81B /* XHMessage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessage.m; sourceTree = ""; }; + F7B9E7F31A4D5E7B0072F81B /* XHMessageModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageModel.h; sourceTree = ""; }; + F7B9E7F41A4D5E7B0072F81B /* XHShareMenuItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHShareMenuItem.h; sourceTree = ""; }; + F7B9E7F51A4D5E7B0072F81B /* XHShareMenuItem.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHShareMenuItem.m; sourceTree = ""; }; + F7B9E7F81A4D5E7B0072F81B /* FLAnimatedImage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FLAnimatedImage.h; sourceTree = ""; }; + F7B9E7F91A4D5E7B0072F81B /* FLAnimatedImage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FLAnimatedImage.m; sourceTree = ""; }; + F7B9E7FA1A4D5E7B0072F81B /* FLAnimatedImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FLAnimatedImageView.h; sourceTree = ""; }; + F7B9E7FB1A4D5E7B0072F81B /* FLAnimatedImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FLAnimatedImageView.m; sourceTree = ""; }; + F7B9E7FD1A4D5E7B0072F81B /* LKBadgeView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LKBadgeView.h; sourceTree = ""; }; + F7B9E7FE1A4D5E7B0072F81B /* LKBadgeView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = LKBadgeView.m; sourceTree = ""; }; + F7B9E8021A4D5E7B0072F81B /* SECompatibility.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SECompatibility.h; sourceTree = ""; }; + F7B9E8031A4D5E7B0072F81B /* SECompatibility.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SECompatibility.m; sourceTree = ""; }; + F7B9E8041A4D5E7B0072F81B /* SEConstants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SEConstants.h; sourceTree = ""; }; + F7B9E8051A4D5E7B0072F81B /* SEConstants.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SEConstants.m; sourceTree = ""; }; + F7B9E8061A4D5E7B0072F81B /* SELineLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SELineLayout.h; sourceTree = ""; }; + F7B9E8071A4D5E7B0072F81B /* SELineLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SELineLayout.m; sourceTree = ""; }; + F7B9E8081A4D5E7B0072F81B /* SELinkText.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SELinkText.h; sourceTree = ""; }; + F7B9E8091A4D5E7B0072F81B /* SELinkText.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SELinkText.m; sourceTree = ""; }; + F7B9E80A1A4D5E7B0072F81B /* SESelectionGrabber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SESelectionGrabber.h; sourceTree = ""; }; + F7B9E80B1A4D5E7B0072F81B /* SESelectionGrabber.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SESelectionGrabber.m; sourceTree = ""; }; + F7B9E80C1A4D5E7B0072F81B /* SETextAttachment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextAttachment.h; sourceTree = ""; }; + F7B9E80D1A4D5E7B0072F81B /* SETextAttachment.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextAttachment.m; sourceTree = ""; }; + F7B9E80E1A4D5E7B0072F81B /* SETextEditingCaret.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextEditingCaret.h; sourceTree = ""; }; + F7B9E80F1A4D5E7B0072F81B /* SETextEditingCaret.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextEditingCaret.m; sourceTree = ""; }; + F7B9E8101A4D5E7B0072F81B /* SETextGeometry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextGeometry.h; sourceTree = ""; }; + F7B9E8111A4D5E7B0072F81B /* SETextGeometry.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextGeometry.m; sourceTree = ""; }; + F7B9E8121A4D5E7B0072F81B /* SETextInput.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextInput.h; sourceTree = ""; }; + F7B9E8131A4D5E7B0072F81B /* SETextInput.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextInput.m; sourceTree = ""; }; + F7B9E8141A4D5E7B0072F81B /* SETextLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextLayout.h; sourceTree = ""; }; + F7B9E8151A4D5E7B0072F81B /* SETextLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextLayout.m; sourceTree = ""; }; + F7B9E8161A4D5E7B0072F81B /* SETextMagnifierCaret.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextMagnifierCaret.h; sourceTree = ""; }; + F7B9E8171A4D5E7B0072F81B /* SETextMagnifierCaret.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextMagnifierCaret.m; sourceTree = ""; }; + F7B9E8181A4D5E7B0072F81B /* SETextMagnifierRanged.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextMagnifierRanged.h; sourceTree = ""; }; + F7B9E8191A4D5E7B0072F81B /* SETextMagnifierRanged.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextMagnifierRanged.m; sourceTree = ""; }; + F7B9E81A1A4D5E7B0072F81B /* SETextSelection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextSelection.h; sourceTree = ""; }; + F7B9E81B1A4D5E7B0072F81B /* SETextSelection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextSelection.m; sourceTree = ""; }; + F7B9E81C1A4D5E7B0072F81B /* SETextSelectionView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextSelectionView.h; sourceTree = ""; }; + F7B9E81D1A4D5E7B0072F81B /* SETextSelectionView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextSelectionView.m; sourceTree = ""; }; + F7B9E81E1A4D5E7B0072F81B /* SETextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SETextView.h; sourceTree = ""; }; + F7B9E81F1A4D5E7B0072F81B /* SETextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SETextView.m; sourceTree = ""; }; + F7B9E8221A4D5E7B0072F81B /* XHBaseTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHBaseTableViewCell.h; sourceTree = ""; }; + F7B9E8231A4D5E7B0072F81B /* XHBaseTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHBaseTableViewCell.m; sourceTree = ""; }; + F7B9E8251A4D5E7B0072F81B /* XHBubblePhotoImageView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHBubblePhotoImageView.h; sourceTree = ""; }; + F7B9E8261A4D5E7B0072F81B /* XHBubblePhotoImageView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHBubblePhotoImageView.m; sourceTree = ""; }; + F7B9E8271A4D5E7B0072F81B /* XHMessageBubbleView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageBubbleView.h; sourceTree = ""; }; + F7B9E8281A4D5E7B0072F81B /* XHMessageBubbleView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageBubbleView.m; sourceTree = ""; }; + F7B9E8291A4D5E7B0072F81B /* XHMessageTableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageTableView.h; sourceTree = ""; }; + F7B9E82A1A4D5E7B0072F81B /* XHMessageTableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageTableView.m; sourceTree = ""; }; + F7B9E82B1A4D5E7B0072F81B /* XHMessageTableViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageTableViewCell.h; sourceTree = ""; }; + F7B9E82C1A4D5E7B0072F81B /* XHMessageTableViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageTableViewCell.m; sourceTree = ""; }; + F7B9E82E1A4D5E7B0072F81B /* XHMessageInputView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageInputView.h; sourceTree = ""; }; + F7B9E82F1A4D5E7B0072F81B /* XHMessageInputView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageInputView.m; sourceTree = ""; }; + F7B9E8301A4D5E7B0072F81B /* XHMessageTextView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHMessageTextView.h; sourceTree = ""; }; + F7B9E8311A4D5E7B0072F81B /* XHMessageTextView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHMessageTextView.m; sourceTree = ""; }; + F7B9E8321A4D5E7B0072F81B /* XHVoiceRecordHUD.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHVoiceRecordHUD.h; sourceTree = ""; }; + F7B9E8331A4D5E7B0072F81B /* XHVoiceRecordHUD.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHVoiceRecordHUD.m; sourceTree = ""; }; + F7B9E8351A4D5E7B0072F81B /* XHEmotionCollectionViewCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHEmotionCollectionViewCell.h; sourceTree = ""; }; + F7B9E8361A4D5E7B0072F81B /* XHEmotionCollectionViewCell.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHEmotionCollectionViewCell.m; sourceTree = ""; }; + F7B9E8371A4D5E7B0072F81B /* XHEmotionCollectionViewFlowLayout.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHEmotionCollectionViewFlowLayout.h; sourceTree = ""; }; + F7B9E8381A4D5E7B0072F81B /* XHEmotionCollectionViewFlowLayout.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHEmotionCollectionViewFlowLayout.m; sourceTree = ""; }; + F7B9E8391A4D5E7B0072F81B /* XHEmotionManagerView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHEmotionManagerView.h; sourceTree = ""; }; + F7B9E83A1A4D5E7B0072F81B /* XHEmotionManagerView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHEmotionManagerView.m; sourceTree = ""; }; + F7B9E83B1A4D5E7B0072F81B /* XHEmotionSectionBar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHEmotionSectionBar.h; sourceTree = ""; }; + F7B9E83C1A4D5E7B0072F81B /* XHEmotionSectionBar.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHEmotionSectionBar.m; sourceTree = ""; }; + F7B9E83D1A4D5E7B0072F81B /* XHShareMenuView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHShareMenuView.h; sourceTree = ""; }; + F7B9E83E1A4D5E7B0072F81B /* XHShareMenuView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHShareMenuView.m; sourceTree = ""; }; + F7B9E93C1A4D60380072F81B /* avator@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "avator@2x.png"; sourceTree = ""; }; + F7B9E9471A4D60380072F81B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/MessageDisplayKitString.strings; sourceTree = ""; }; + F7B9E9481A4D60380072F81B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MessageDisplayKitString.strings"; sourceTree = ""; }; + F7B9E94A1A4D60380072F81B /* face@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "face@2x.png"; sourceTree = ""; }; + F7B9E94B1A4D60380072F81B /* face_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "face_HL@2x.png"; sourceTree = ""; }; + F7B9E94C1A4D60380072F81B /* Fav_Cell_Loc@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Fav_Cell_Loc@2x.png"; sourceTree = ""; }; + F7B9E94F1A4D60380072F81B /* input-bar-flat.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-bar-flat.png"; sourceTree = ""; }; + F7B9E9501A4D60380072F81B /* input-bar-flat@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-bar-flat@2x.png"; sourceTree = ""; }; + F7B9E9551A4D60380072F81B /* MessageVideoPlay@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MessageVideoPlay@2x.png"; sourceTree = ""; }; + F7B9E9571A4D60380072F81B /* msg_chat_voice_unread.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = msg_chat_voice_unread.png; sourceTree = ""; }; + F7B9E9581A4D60380072F81B /* msg_chat_voice_unread@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "msg_chat_voice_unread@2x.png"; sourceTree = ""; }; + F7B9E9591A4D60380072F81B /* multiMedia@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "multiMedia@2x.png"; sourceTree = ""; }; + F7B9E95A1A4D60380072F81B /* multiMedia_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "multiMedia_HL@2x.png"; sourceTree = ""; }; + F7B9E95D1A4D60380072F81B /* placeholderImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "placeholderImage@2x.png"; sourceTree = ""; }; + F7B9E95E1A4D60380072F81B /* ReceiverVoiceNodePlaying000@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying000@2x.png"; sourceTree = ""; }; + F7B9E95F1A4D60380072F81B /* ReceiverVoiceNodePlaying001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying001@2x.png"; sourceTree = ""; }; + F7B9E9601A4D60380072F81B /* ReceiverVoiceNodePlaying002@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying002@2x.png"; sourceTree = ""; }; + F7B9E9611A4D60380072F81B /* ReceiverVoiceNodePlaying003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying003@2x.png"; sourceTree = ""; }; + F7B9E9621A4D60380072F81B /* ReceiverVoiceNodePlaying@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying@2x.png"; sourceTree = ""; }; + F7B9E9631A4D60380072F81B /* RecordCancel@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordCancel@2x.png"; sourceTree = ""; }; + F7B9E9641A4D60380072F81B /* RecordingBkg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingBkg@2x.png"; sourceTree = ""; }; + F7B9E9651A4D60380072F81B /* RecordingSignal001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal001@2x.png"; sourceTree = ""; }; + F7B9E9661A4D60380072F81B /* RecordingSignal002@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal002@2x.png"; sourceTree = ""; }; + F7B9E9671A4D60380072F81B /* RecordingSignal003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal003@2x.png"; sourceTree = ""; }; + F7B9E9681A4D60380072F81B /* RecordingSignal004@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal004@2x.png"; sourceTree = ""; }; + F7B9E9691A4D60380072F81B /* RecordingSignal005@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal005@2x.png"; sourceTree = ""; }; + F7B9E96A1A4D60380072F81B /* RecordingSignal006@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal006@2x.png"; sourceTree = ""; }; + F7B9E96B1A4D60380072F81B /* RecordingSignal007@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal007@2x.png"; sourceTree = ""; }; + F7B9E96C1A4D60380072F81B /* RecordingSignal008@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal008@2x.png"; sourceTree = ""; }; + F7B9E96E1A4D60380072F81B /* SECoreTextView.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = SECoreTextView.bundle; sourceTree = ""; }; + F7B9E97F1A4D60380072F81B /* SenderVoiceNodePlaying000@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying000@2x.png"; sourceTree = ""; }; + F7B9E9801A4D60380072F81B /* SenderVoiceNodePlaying001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying001@2x.png"; sourceTree = ""; }; + F7B9E9811A4D60380072F81B /* SenderVoiceNodePlaying002@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying002@2x.png"; sourceTree = ""; }; + F7B9E9821A4D60380072F81B /* SenderVoiceNodePlaying003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying003@2x.png"; sourceTree = ""; }; + F7B9E9831A4D60380072F81B /* SenderVoiceNodePlaying@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying@2x.png"; sourceTree = ""; }; + F7B9E98E1A4D60380072F81B /* voice@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "voice@2x.png"; sourceTree = ""; }; + F7B9E98F1A4D60380072F81B /* voice_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "voice_HL@2x.png"; sourceTree = ""; }; + F7B9E9901A4D60380072F81B /* VoiceBtn_Black@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceBtn_Black@2x.png"; sourceTree = ""; }; + F7B9E9911A4D60380072F81B /* VoiceBtn_BlackHL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceBtn_BlackHL@2x.png"; sourceTree = ""; }; + F7B9E9931A4D60380072F81B /* weChatBubble_Receiving_Solid@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weChatBubble_Receiving_Solid@2x.png"; sourceTree = ""; }; + F7B9E9951A4D60380072F81B /* weChatBubble_Sending_Solid@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weChatBubble_Sending_Solid@2x.png"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + F751C2071A4C3E5000743ECB /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F751C7B81A4C429500743ECB /* Foundation.framework in Frameworks */, + F751C7B61A4C429100743ECB /* UIKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F751C2121A4C3E5000743ECB /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F751C2161A4C3E5000743ECB /* libMessageDisplayKitLib.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + F751C2011A4C3E5000743ECB = { + isa = PBXGroup; + children = ( + F751C20C1A4C3E5000743ECB /* MessageDisplayKitLib */, + F751C2191A4C3E5000743ECB /* MessageDisplayKitLibTests */, + F751C7B91A4C429A00743ECB /* Frameworks */, + F751C20B1A4C3E5000743ECB /* Products */, + ); + sourceTree = ""; + }; + F751C20B1A4C3E5000743ECB /* Products */ = { + isa = PBXGroup; + children = ( + F751C20A1A4C3E5000743ECB /* libMessageDisplayKitLib.a */, + F751C2151A4C3E5000743ECB /* MessageDisplayKitLibTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + F751C20C1A4C3E5000743ECB /* MessageDisplayKitLib */ = { + isa = PBXGroup; + children = ( + F7B9E7971A4D5E7B0072F81B /* MessageDisplayKit */, + F751C7B41A4C425700743ECB /* Supporting Files */, + ); + path = MessageDisplayKitLib; + sourceTree = ""; + }; + F751C2191A4C3E5000743ECB /* MessageDisplayKitLibTests */ = { + isa = PBXGroup; + children = ( + F751C21A1A4C3E5000743ECB /* Supporting Files */, + ); + path = MessageDisplayKitLibTests; + sourceTree = ""; + }; + F751C21A1A4C3E5000743ECB /* Supporting Files */ = { + isa = PBXGroup; + children = ( + F751C21B1A4C3E5000743ECB /* Info.plist */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + F751C7B41A4C425700743ECB /* Supporting Files */ = { + isa = PBXGroup; + children = ( + F751C7B21A4C423D00743ECB /* MessageDisplayKitLib-Prefix.pch */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + F751C7B91A4C429A00743ECB /* Frameworks */ = { + isa = PBXGroup; + children = ( + F751C7B71A4C429500743ECB /* Foundation.framework */, + F751C7B51A4C429100743ECB /* UIKit.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; + F7B9E7971A4D5E7B0072F81B /* MessageDisplayKit */ = { + isa = PBXGroup; + children = ( + F7B9E7981A4D5E7B0072F81B /* Classes */, + F7B9E9961A4D60380072F81B /* Resources */, + ); + name = MessageDisplayKit; + path = ../../../MessageDisplayKit; + sourceTree = ""; + }; + F7B9E7981A4D5E7B0072F81B /* Classes */ = { + isa = PBXGroup; + children = ( + F7B9E7991A4D5E7B0072F81B /* Categorys */, + F7B9E7B11A4D5E7B0072F81B /* Common */, + F7B9E7C01A4D5E7B0072F81B /* Controllers */, + F7B9E7D01A4D5E7B0072F81B /* Core */, + F7B9E7DB1A4D5E7B0072F81B /* Factorys */, + F7B9E7E61A4D5E7B0072F81B /* Macro */, + F7B9E7EA1A4D5E7B0072F81B /* Models */, + F7B9E7F61A4D5E7B0072F81B /* Vendor */, + F7B9E8201A4D5E7B0072F81B /* Views */, + ); + path = Classes; + sourceTree = ""; + }; + F7B9E7991A4D5E7B0072F81B /* Categorys */ = { + isa = PBXGroup; + children = ( + F7B9E79A1A4D5E7B0072F81B /* NSString */, + F7B9E79F1A4D5E7B0072F81B /* UIButton */, + F7B9E7A01A4D5E7B0072F81B /* UIImage */, + F7B9E7AB1A4D5E7B0072F81B /* UIScrollView */, + F7B9E7AE1A4D5E7B0072F81B /* UIView */, + ); + path = Categorys; + sourceTree = ""; + }; + F7B9E79A1A4D5E7B0072F81B /* NSString */ = { + isa = PBXGroup; + children = ( + F7B9E79B1A4D5E7B0072F81B /* NSString+MessageInputView.h */, + F7B9E79C1A4D5E7B0072F81B /* NSString+MessageInputView.m */, + F7B9E79D1A4D5E7B0072F81B /* NSString+XHMD5.h */, + F7B9E79E1A4D5E7B0072F81B /* NSString+XHMD5.m */, + ); + path = NSString; + sourceTree = ""; + }; + F7B9E79F1A4D5E7B0072F81B /* UIButton */ = { + isa = PBXGroup; + children = ( + ); + path = UIButton; + sourceTree = ""; + }; + F7B9E7A01A4D5E7B0072F81B /* UIImage */ = { + isa = PBXGroup; + children = ( + F7B9E7A11A4D5E7B0072F81B /* UIImage+Alpha.h */, + F7B9E7A21A4D5E7B0072F81B /* UIImage+Alpha.m */, + F7B9E7A31A4D5E7B0072F81B /* UIImage+Resize.h */, + F7B9E7A41A4D5E7B0072F81B /* UIImage+Resize.m */, + F7B9E7A51A4D5E7B0072F81B /* UIImage+RoundedCorner.h */, + F7B9E7A61A4D5E7B0072F81B /* UIImage+RoundedCorner.m */, + F7B9E7A71A4D5E7B0072F81B /* UIImage+Utility.h */, + F7B9E7A81A4D5E7B0072F81B /* UIImage+Utility.m */, + F7B9E7A91A4D5E7B0072F81B /* UIImage+XHRounded.h */, + F7B9E7AA1A4D5E7B0072F81B /* UIImage+XHRounded.m */, + ); + path = UIImage; + sourceTree = ""; + }; + F7B9E7AB1A4D5E7B0072F81B /* UIScrollView */ = { + isa = PBXGroup; + children = ( + F7B9E7AC1A4D5E7B0072F81B /* UIScrollView+XHkeyboardControl.h */, + F7B9E7AD1A4D5E7B0072F81B /* UIScrollView+XHkeyboardControl.m */, + ); + path = UIScrollView; + sourceTree = ""; + }; + F7B9E7AE1A4D5E7B0072F81B /* UIView */ = { + isa = PBXGroup; + children = ( + F7B9E7AF1A4D5E7B0072F81B /* UIView+XHRemoteImage.h */, + F7B9E7B01A4D5E7B0072F81B /* UIView+XHRemoteImage.m */, + ); + path = UIView; + sourceTree = ""; + }; + F7B9E7B11A4D5E7B0072F81B /* Common */ = { + isa = PBXGroup; + children = ( + F7B9E7B21A4D5E7B0072F81B /* XHAudioPlayerHelper.h */, + F7B9E7B31A4D5E7B0072F81B /* XHAudioPlayerHelper.m */, + F7B9E7B41A4D5E7B0072F81B /* XHCaptureHelper.h */, + F7B9E7B51A4D5E7B0072F81B /* XHCaptureHelper.m */, + F7B9E7B61A4D5E7B0072F81B /* XHLocationHelper.h */, + F7B9E7B71A4D5E7B0072F81B /* XHLocationHelper.m */, + F7B9E7B81A4D5E7B0072F81B /* XHMessageBubbleHelper.h */, + F7B9E7B91A4D5E7B0072F81B /* XHMessageBubbleHelper.m */, + F7B9E7BA1A4D5E7B0072F81B /* XHPhotographyHelper.h */, + F7B9E7BB1A4D5E7B0072F81B /* XHPhotographyHelper.m */, + F7B9E7BC1A4D5E7B0072F81B /* XHVoiceCommonHelper.h */, + F7B9E7BD1A4D5E7B0072F81B /* XHVoiceCommonHelper.m */, + F7B9E7BE1A4D5E7B0072F81B /* XHVoiceRecordHelper.h */, + F7B9E7BF1A4D5E7B0072F81B /* XHVoiceRecordHelper.m */, + E466FA501B42F43300EE02A6 /* XHConfigurationHelper.h */, + E466FA511B42F43300EE02A6 /* XHConfigurationHelper.m */, + ); + path = Common; + sourceTree = ""; + }; + F7B9E7C01A4D5E7B0072F81B /* Controllers */ = { + isa = PBXGroup; + children = ( + F7B9E7C11A4D5E7B0072F81B /* XHMessageTableViewController */, + ); + path = Controllers; + sourceTree = ""; + }; + F7B9E7C11A4D5E7B0072F81B /* XHMessageTableViewController */ = { + isa = PBXGroup; + children = ( + F7B9E7C21A4D5E7B0072F81B /* XHDisplayEmotionViewController */, + F7B9E7C51A4D5E7B0072F81B /* XHDisplayLocationViewController */, + F7B9E7C81A4D5E7B0072F81B /* XHDisplayMediaViewController */, + F7B9E7CB1A4D5E7B0072F81B /* XHDisplayTextViewController */, + F7B9E7CE1A4D5E7B0072F81B /* XHMessageTableViewController.h */, + F7B9E7CF1A4D5E7B0072F81B /* XHMessageTableViewController.m */, + ); + path = XHMessageTableViewController; + sourceTree = ""; + }; + F7B9E7C21A4D5E7B0072F81B /* XHDisplayEmotionViewController */ = { + isa = PBXGroup; + children = ( + F7B9E7C31A4D5E7B0072F81B /* XHDisplayEmotionViewController.h */, + F7B9E7C41A4D5E7B0072F81B /* XHDisplayEmotionViewController.m */, + ); + path = XHDisplayEmotionViewController; + sourceTree = ""; + }; + F7B9E7C51A4D5E7B0072F81B /* XHDisplayLocationViewController */ = { + isa = PBXGroup; + children = ( + F7B9E7C61A4D5E7B0072F81B /* XHDisplayLocationViewController.h */, + F7B9E7C71A4D5E7B0072F81B /* XHDisplayLocationViewController.m */, + ); + path = XHDisplayLocationViewController; + sourceTree = ""; + }; + F7B9E7C81A4D5E7B0072F81B /* XHDisplayMediaViewController */ = { + isa = PBXGroup; + children = ( + F7B9E7C91A4D5E7B0072F81B /* XHDisplayMediaViewController.h */, + F7B9E7CA1A4D5E7B0072F81B /* XHDisplayMediaViewController.m */, + ); + path = XHDisplayMediaViewController; + sourceTree = ""; + }; + F7B9E7CB1A4D5E7B0072F81B /* XHDisplayTextViewController */ = { + isa = PBXGroup; + children = ( + F7B9E7CC1A4D5E7B0072F81B /* XHDisplayTextViewController.h */, + F7B9E7CD1A4D5E7B0072F81B /* XHDisplayTextViewController.m */, + ); + path = XHDisplayTextViewController; + sourceTree = ""; + }; + F7B9E7D01A4D5E7B0072F81B /* Core */ = { + isa = PBXGroup; + children = ( + F7B9E7D11A4D5E7B0072F81B /* Cache */, + F7B9E7D61A4D5E7B0072F81B /* Network */, + ); + path = Core; + sourceTree = ""; + }; + F7B9E7D11A4D5E7B0072F81B /* Cache */ = { + isa = PBXGroup; + children = ( + F7B9E7D21A4D5E7B0072F81B /* XHCacheManager.h */, + F7B9E7D31A4D5E7B0072F81B /* XHCacheManager.m */, + F7B9E7D41A4D5E7B0072F81B /* XHFileAttribute.h */, + F7B9E7D51A4D5E7B0072F81B /* XHFileAttribute.m */, + ); + path = Cache; + sourceTree = ""; + }; + F7B9E7D61A4D5E7B0072F81B /* Network */ = { + isa = PBXGroup; + children = ( + F7B9E7D71A4D5E7B0072F81B /* XHHTTPClient.h */, + F7B9E7D81A4D5E7B0072F81B /* XHHTTPClient.m */, + F7B9E7D91A4D5E7B0072F81B /* XHOperationNetworkKit.h */, + F7B9E7DA1A4D5E7B0072F81B /* XHOperationNetworkKit.m */, + ); + path = Network; + sourceTree = ""; + }; + F7B9E7DB1A4D5E7B0072F81B /* Factorys */ = { + isa = PBXGroup; + children = ( + F7B9E7DC1A4D5E7B0072F81B /* XHMessageAvatarFactory.h */, + F7B9E7DD1A4D5E7B0072F81B /* XHMessageAvatarFactory.m */, + F7B9E7DE1A4D5E7B0072F81B /* XHMessageBubbleFactory.h */, + F7B9E7DF1A4D5E7B0072F81B /* XHMessageBubbleFactory.m */, + F7B9E7E01A4D5E7B0072F81B /* XHMessageVideoConverPhotoFactory.h */, + F7B9E7E11A4D5E7B0072F81B /* XHMessageVideoConverPhotoFactory.m */, + F7B9E7E21A4D5E7B0072F81B /* XHMessageVoiceFactory.h */, + F7B9E7E31A4D5E7B0072F81B /* XHMessageVoiceFactory.m */, + F7B9E7E41A4D5E7B0072F81B /* XHVideoOutputSampleBufferFactory.h */, + F7B9E7E51A4D5E7B0072F81B /* XHVideoOutputSampleBufferFactory.m */, + ); + path = Factorys; + sourceTree = ""; + }; + F7B9E7E61A4D5E7B0072F81B /* Macro */ = { + isa = PBXGroup; + children = ( + F7B9E7E71A4D5E7B0072F81B /* XHFoundationMacro.h */, + F7B9E7E81A4D5E7B0072F81B /* XHMacro.h */, + F7B9E7E91A4D5E7B0072F81B /* XHUIKitMacro.h */, + ); + path = Macro; + sourceTree = ""; + }; + F7B9E7EA1A4D5E7B0072F81B /* Models */ = { + isa = PBXGroup; + children = ( + F7B9E7EB1A4D5E7B0072F81B /* XHAnnotation.h */, + F7B9E7EC1A4D5E7B0072F81B /* XHAnnotation.m */, + F7B9E7ED1A4D5E7B0072F81B /* XHEmotion.h */, + F7B9E7EE1A4D5E7B0072F81B /* XHEmotion.m */, + F7B9E7EF1A4D5E7B0072F81B /* XHEmotionManager.h */, + F7B9E7F01A4D5E7B0072F81B /* XHEmotionManager.m */, + F7B9E7F11A4D5E7B0072F81B /* XHMessage.h */, + F7B9E7F21A4D5E7B0072F81B /* XHMessage.m */, + F7B9E7F31A4D5E7B0072F81B /* XHMessageModel.h */, + F7B9E7F41A4D5E7B0072F81B /* XHShareMenuItem.h */, + F7B9E7F51A4D5E7B0072F81B /* XHShareMenuItem.m */, + ); + path = Models; + sourceTree = ""; + }; + F7B9E7F61A4D5E7B0072F81B /* Vendor */ = { + isa = PBXGroup; + children = ( + F7B9E7F71A4D5E7B0072F81B /* FLAnimatedImageView */, + F7B9E7FC1A4D5E7B0072F81B /* LKBadgeView */, + F7B9E7FF1A4D5E7B0072F81B /* SECoreTextView */, + ); + path = Vendor; + sourceTree = ""; + }; + F7B9E7F71A4D5E7B0072F81B /* FLAnimatedImageView */ = { + isa = PBXGroup; + children = ( + F7B9E7F81A4D5E7B0072F81B /* FLAnimatedImage.h */, + F7B9E7F91A4D5E7B0072F81B /* FLAnimatedImage.m */, + F7B9E7FA1A4D5E7B0072F81B /* FLAnimatedImageView.h */, + F7B9E7FB1A4D5E7B0072F81B /* FLAnimatedImageView.m */, + ); + path = FLAnimatedImageView; + sourceTree = ""; + }; + F7B9E7FC1A4D5E7B0072F81B /* LKBadgeView */ = { + isa = PBXGroup; + children = ( + F7B9E7FD1A4D5E7B0072F81B /* LKBadgeView.h */, + F7B9E7FE1A4D5E7B0072F81B /* LKBadgeView.m */, + ); + path = LKBadgeView; + sourceTree = ""; + }; + F7B9E7FF1A4D5E7B0072F81B /* SECoreTextView */ = { + isa = PBXGroup; + children = ( + F7B9E8021A4D5E7B0072F81B /* SECompatibility.h */, + F7B9E8031A4D5E7B0072F81B /* SECompatibility.m */, + F7B9E8041A4D5E7B0072F81B /* SEConstants.h */, + F7B9E8051A4D5E7B0072F81B /* SEConstants.m */, + F7B9E8061A4D5E7B0072F81B /* SELineLayout.h */, + F7B9E8071A4D5E7B0072F81B /* SELineLayout.m */, + F7B9E8081A4D5E7B0072F81B /* SELinkText.h */, + F7B9E8091A4D5E7B0072F81B /* SELinkText.m */, + F7B9E80A1A4D5E7B0072F81B /* SESelectionGrabber.h */, + F7B9E80B1A4D5E7B0072F81B /* SESelectionGrabber.m */, + F7B9E80C1A4D5E7B0072F81B /* SETextAttachment.h */, + F7B9E80D1A4D5E7B0072F81B /* SETextAttachment.m */, + F7B9E80E1A4D5E7B0072F81B /* SETextEditingCaret.h */, + F7B9E80F1A4D5E7B0072F81B /* SETextEditingCaret.m */, + F7B9E8101A4D5E7B0072F81B /* SETextGeometry.h */, + F7B9E8111A4D5E7B0072F81B /* SETextGeometry.m */, + F7B9E8121A4D5E7B0072F81B /* SETextInput.h */, + F7B9E8131A4D5E7B0072F81B /* SETextInput.m */, + F7B9E8141A4D5E7B0072F81B /* SETextLayout.h */, + F7B9E8151A4D5E7B0072F81B /* SETextLayout.m */, + F7B9E8161A4D5E7B0072F81B /* SETextMagnifierCaret.h */, + F7B9E8171A4D5E7B0072F81B /* SETextMagnifierCaret.m */, + F7B9E8181A4D5E7B0072F81B /* SETextMagnifierRanged.h */, + F7B9E8191A4D5E7B0072F81B /* SETextMagnifierRanged.m */, + F7B9E81A1A4D5E7B0072F81B /* SETextSelection.h */, + F7B9E81B1A4D5E7B0072F81B /* SETextSelection.m */, + F7B9E81C1A4D5E7B0072F81B /* SETextSelectionView.h */, + F7B9E81D1A4D5E7B0072F81B /* SETextSelectionView.m */, + F7B9E81E1A4D5E7B0072F81B /* SETextView.h */, + F7B9E81F1A4D5E7B0072F81B /* SETextView.m */, + ); + path = SECoreTextView; + sourceTree = ""; + }; + F7B9E8201A4D5E7B0072F81B /* Views */ = { + isa = PBXGroup; + children = ( + F7B9E8211A4D5E7B0072F81B /* BaseTableViewCell */, + F7B9E8241A4D5E7B0072F81B /* MessageContentViews */, + F7B9E82D1A4D5E7B0072F81B /* MessageInputView */, + F7B9E8341A4D5E7B0072F81B /* MessageMenuViews */, + ); + path = Views; + sourceTree = ""; + }; + F7B9E8211A4D5E7B0072F81B /* BaseTableViewCell */ = { + isa = PBXGroup; + children = ( + F7B9E8221A4D5E7B0072F81B /* XHBaseTableViewCell.h */, + F7B9E8231A4D5E7B0072F81B /* XHBaseTableViewCell.m */, + ); + path = BaseTableViewCell; + sourceTree = ""; + }; + F7B9E8241A4D5E7B0072F81B /* MessageContentViews */ = { + isa = PBXGroup; + children = ( + F7B9E8251A4D5E7B0072F81B /* XHBubblePhotoImageView.h */, + F7B9E8261A4D5E7B0072F81B /* XHBubblePhotoImageView.m */, + F7B9E8271A4D5E7B0072F81B /* XHMessageBubbleView.h */, + F7B9E8281A4D5E7B0072F81B /* XHMessageBubbleView.m */, + F7B9E8291A4D5E7B0072F81B /* XHMessageTableView.h */, + F7B9E82A1A4D5E7B0072F81B /* XHMessageTableView.m */, + F7B9E82B1A4D5E7B0072F81B /* XHMessageTableViewCell.h */, + F7B9E82C1A4D5E7B0072F81B /* XHMessageTableViewCell.m */, + ); + path = MessageContentViews; + sourceTree = ""; + }; + F7B9E82D1A4D5E7B0072F81B /* MessageInputView */ = { + isa = PBXGroup; + children = ( + F7B9E82E1A4D5E7B0072F81B /* XHMessageInputView.h */, + F7B9E82F1A4D5E7B0072F81B /* XHMessageInputView.m */, + F7B9E8301A4D5E7B0072F81B /* XHMessageTextView.h */, + F7B9E8311A4D5E7B0072F81B /* XHMessageTextView.m */, + F7B9E8321A4D5E7B0072F81B /* XHVoiceRecordHUD.h */, + F7B9E8331A4D5E7B0072F81B /* XHVoiceRecordHUD.m */, + ); + path = MessageInputView; + sourceTree = ""; + }; + F7B9E8341A4D5E7B0072F81B /* MessageMenuViews */ = { + isa = PBXGroup; + children = ( + F7B9E8351A4D5E7B0072F81B /* XHEmotionCollectionViewCell.h */, + F7B9E8361A4D5E7B0072F81B /* XHEmotionCollectionViewCell.m */, + F7B9E8371A4D5E7B0072F81B /* XHEmotionCollectionViewFlowLayout.h */, + F7B9E8381A4D5E7B0072F81B /* XHEmotionCollectionViewFlowLayout.m */, + F7B9E8391A4D5E7B0072F81B /* XHEmotionManagerView.h */, + F7B9E83A1A4D5E7B0072F81B /* XHEmotionManagerView.m */, + F7B9E83B1A4D5E7B0072F81B /* XHEmotionSectionBar.h */, + F7B9E83C1A4D5E7B0072F81B /* XHEmotionSectionBar.m */, + F7B9E83D1A4D5E7B0072F81B /* XHShareMenuView.h */, + F7B9E83E1A4D5E7B0072F81B /* XHShareMenuView.m */, + ); + path = MessageMenuViews; + sourceTree = ""; + }; + F7B9E9961A4D60380072F81B /* Resources */ = { + isa = PBXGroup; + children = ( + F7B9E93C1A4D60380072F81B /* avator@2x.png */, + F7B9E9491A4D60380072F81B /* MessageDisplayKitString.strings */, + F7B9E94A1A4D60380072F81B /* face@2x.png */, + F7B9E94B1A4D60380072F81B /* face_HL@2x.png */, + F7B9E94C1A4D60380072F81B /* Fav_Cell_Loc@2x.png */, + F7B9E94F1A4D60380072F81B /* input-bar-flat.png */, + F7B9E9501A4D60380072F81B /* input-bar-flat@2x.png */, + F7B9E9551A4D60380072F81B /* MessageVideoPlay@2x.png */, + F7B9E9571A4D60380072F81B /* msg_chat_voice_unread.png */, + F7B9E9581A4D60380072F81B /* msg_chat_voice_unread@2x.png */, + E499F58F1B43BE0000E45C84 /* keyboard_HL@2x.png */, + E499F5901B43BE0000E45C84 /* keyboard@2x.png */, + F7B9E9591A4D60380072F81B /* multiMedia@2x.png */, + F7B9E95A1A4D60380072F81B /* multiMedia_HL@2x.png */, + F7B9E95D1A4D60380072F81B /* placeholderImage@2x.png */, + F7B9E95E1A4D60380072F81B /* ReceiverVoiceNodePlaying000@2x.png */, + F7B9E95F1A4D60380072F81B /* ReceiverVoiceNodePlaying001@2x.png */, + F7B9E9601A4D60380072F81B /* ReceiverVoiceNodePlaying002@2x.png */, + F7B9E9611A4D60380072F81B /* ReceiverVoiceNodePlaying003@2x.png */, + F7B9E9621A4D60380072F81B /* ReceiverVoiceNodePlaying@2x.png */, + F7B9E9631A4D60380072F81B /* RecordCancel@2x.png */, + F7B9E9641A4D60380072F81B /* RecordingBkg@2x.png */, + F7B9E9651A4D60380072F81B /* RecordingSignal001@2x.png */, + F7B9E9661A4D60380072F81B /* RecordingSignal002@2x.png */, + F7B9E9671A4D60380072F81B /* RecordingSignal003@2x.png */, + F7B9E9681A4D60380072F81B /* RecordingSignal004@2x.png */, + F7B9E9691A4D60380072F81B /* RecordingSignal005@2x.png */, + F7B9E96A1A4D60380072F81B /* RecordingSignal006@2x.png */, + F7B9E96B1A4D60380072F81B /* RecordingSignal007@2x.png */, + F7B9E96C1A4D60380072F81B /* RecordingSignal008@2x.png */, + F7B9E96E1A4D60380072F81B /* SECoreTextView.bundle */, + F7B9E97F1A4D60380072F81B /* SenderVoiceNodePlaying000@2x.png */, + F7B9E9801A4D60380072F81B /* SenderVoiceNodePlaying001@2x.png */, + F7B9E9811A4D60380072F81B /* SenderVoiceNodePlaying002@2x.png */, + F7B9E9821A4D60380072F81B /* SenderVoiceNodePlaying003@2x.png */, + F7B9E9831A4D60380072F81B /* SenderVoiceNodePlaying@2x.png */, + F7B9E98E1A4D60380072F81B /* voice@2x.png */, + F7B9E98F1A4D60380072F81B /* voice_HL@2x.png */, + F7B9E9901A4D60380072F81B /* VoiceBtn_Black@2x.png */, + F7B9E9911A4D60380072F81B /* VoiceBtn_BlackHL@2x.png */, + F7B9E9931A4D60380072F81B /* weChatBubble_Receiving_Solid@2x.png */, + F7B9E9951A4D60380072F81B /* weChatBubble_Sending_Solid@2x.png */, + ); + path = Resources; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + F751C2091A4C3E5000743ECB /* MessageDisplayKitLib */ = { + isa = PBXNativeTarget; + buildConfigurationList = F751C21E1A4C3E5000743ECB /* Build configuration list for PBXNativeTarget "MessageDisplayKitLib" */; + buildPhases = ( + F751C2061A4C3E5000743ECB /* Sources */, + F751C2071A4C3E5000743ECB /* Frameworks */, + F751C2081A4C3E5000743ECB /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = MessageDisplayKitLib; + productName = MessageDisplayKitLib; + productReference = F751C20A1A4C3E5000743ECB /* libMessageDisplayKitLib.a */; + productType = "com.apple.product-type.library.static"; + }; + F751C2141A4C3E5000743ECB /* MessageDisplayKitLibTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = F751C2211A4C3E5000743ECB /* Build configuration list for PBXNativeTarget "MessageDisplayKitLibTests" */; + buildPhases = ( + F751C2111A4C3E5000743ECB /* Sources */, + F751C2121A4C3E5000743ECB /* Frameworks */, + F751C2131A4C3E5000743ECB /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + F751C2181A4C3E5000743ECB /* PBXTargetDependency */, + ); + name = MessageDisplayKitLibTests; + productName = MessageDisplayKitLibTests; + productReference = F751C2151A4C3E5000743ECB /* MessageDisplayKitLibTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + F751C2021A4C3E5000743ECB /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0610; + ORGANIZATIONNAME = "iOS软件开发工程师 曾宪华 热衷于简洁的UI QQ:543413507 http://www.pailixiu.com/blog http://www.pailixiu.com/Jack/personal."; + TargetAttributes = { + F751C2091A4C3E5000743ECB = { + CreatedOnToolsVersion = 6.1.1; + }; + F751C2141A4C3E5000743ECB = { + CreatedOnToolsVersion = 6.1.1; + }; + }; + }; + buildConfigurationList = F751C2051A4C3E5000743ECB /* Build configuration list for PBXProject "MessageDisplayKitLib" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + "zh-Hans", + ); + mainGroup = F751C2011A4C3E5000743ECB; + productRefGroup = F751C20B1A4C3E5000743ECB /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + F751C2091A4C3E5000743ECB /* MessageDisplayKitLib */, + F751C2141A4C3E5000743ECB /* MessageDisplayKitLibTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + F751C2131A4C3E5000743ECB /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + F751C2061A4C3E5000743ECB /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F7B9E8511A4D5E7B0072F81B /* XHDisplayLocationViewController.m in Sources */, + F7B9E85F1A4D5E7B0072F81B /* XHEmotion.m in Sources */, + F7B9E8481A4D5E7B0072F81B /* UIView+XHRemoteImage.m in Sources */, + F7B9E8781A4D5E7B0072F81B /* XHMessageBubbleView.m in Sources */, + F7B9E85E1A4D5E7B0072F81B /* XHAnnotation.m in Sources */, + F7B9E8471A4D5E7B0072F81B /* UIScrollView+XHkeyboardControl.m in Sources */, + F7B9E87A1A4D5E7B0072F81B /* XHMessageTableViewCell.m in Sources */, + F7B9E87D1A4D5E7B0072F81B /* XHVoiceRecordHUD.m in Sources */, + F7B9E84C1A4D5E7B0072F81B /* XHMessageBubbleHelper.m in Sources */, + F7B9E8411A4D5E7B0072F81B /* NSString+XHMD5.m in Sources */, + F7B9E8611A4D5E7B0072F81B /* XHMessage.m in Sources */, + F7B9E8641A4D5E7B0072F81B /* FLAnimatedImageView.m in Sources */, + F7B9E8691A4D5E7B0072F81B /* SELineLayout.m in Sources */, + F7B9E8631A4D5E7B0072F81B /* FLAnimatedImage.m in Sources */, + F7B9E8711A4D5E7B0072F81B /* SETextMagnifierCaret.m in Sources */, + F7B9E8441A4D5E7B0072F81B /* UIImage+RoundedCorner.m in Sources */, + F7B9E84F1A4D5E7B0072F81B /* XHVoiceRecordHelper.m in Sources */, + F7B9E8461A4D5E7B0072F81B /* UIImage+XHRounded.m in Sources */, + F7B9E8761A4D5E7B0072F81B /* XHBaseTableViewCell.m in Sources */, + F7B9E8571A4D5E7B0072F81B /* XHHTTPClient.m in Sources */, + F7B9E87B1A4D5E7B0072F81B /* XHMessageInputView.m in Sources */, + F7B9E86A1A4D5E7B0072F81B /* SELinkText.m in Sources */, + F7B9E8791A4D5E7B0072F81B /* XHMessageTableView.m in Sources */, + F7B9E8601A4D5E7B0072F81B /* XHEmotionManager.m in Sources */, + F7B9E8431A4D5E7B0072F81B /* UIImage+Resize.m in Sources */, + F7B9E8621A4D5E7B0072F81B /* XHShareMenuItem.m in Sources */, + F7B9E8501A4D5E7B0072F81B /* XHDisplayEmotionViewController.m in Sources */, + F7B9E8591A4D5E7B0072F81B /* XHMessageAvatarFactory.m in Sources */, + F7B9E84A1A4D5E7B0072F81B /* XHCaptureHelper.m in Sources */, + F7B9E8401A4D5E7B0072F81B /* NSString+MessageInputView.m in Sources */, + F7B9E8811A4D5E7B0072F81B /* XHEmotionSectionBar.m in Sources */, + F7B9E8561A4D5E7B0072F81B /* XHFileAttribute.m in Sources */, + F7B9E86D1A4D5E7B0072F81B /* SETextEditingCaret.m in Sources */, + F7B9E86E1A4D5E7B0072F81B /* SETextGeometry.m in Sources */, + F7B9E84D1A4D5E7B0072F81B /* XHPhotographyHelper.m in Sources */, + F7B9E8541A4D5E7B0072F81B /* XHMessageTableViewController.m in Sources */, + F7B9E87C1A4D5E7B0072F81B /* XHMessageTextView.m in Sources */, + F7B9E8581A4D5E7B0072F81B /* XHOperationNetworkKit.m in Sources */, + F7B9E87F1A4D5E7B0072F81B /* XHEmotionCollectionViewFlowLayout.m in Sources */, + F7B9E8751A4D5E7B0072F81B /* SETextView.m in Sources */, + F7B9E85C1A4D5E7B0072F81B /* XHMessageVoiceFactory.m in Sources */, + F7B9E8451A4D5E7B0072F81B /* UIImage+Utility.m in Sources */, + F7B9E86C1A4D5E7B0072F81B /* SETextAttachment.m in Sources */, + F7B9E8741A4D5E7B0072F81B /* SETextSelectionView.m in Sources */, + F7B9E8531A4D5E7B0072F81B /* XHDisplayTextViewController.m in Sources */, + F7B9E8551A4D5E7B0072F81B /* XHCacheManager.m in Sources */, + F7B9E8421A4D5E7B0072F81B /* UIImage+Alpha.m in Sources */, + F7B9E85D1A4D5E7B0072F81B /* XHVideoOutputSampleBufferFactory.m in Sources */, + F7B9E86F1A4D5E7B0072F81B /* SETextInput.m in Sources */, + F7B9E8731A4D5E7B0072F81B /* SETextSelection.m in Sources */, + F7B9E8651A4D5E7B0072F81B /* LKBadgeView.m in Sources */, + F7B9E8821A4D5E7B0072F81B /* XHShareMenuView.m in Sources */, + F7B9E84B1A4D5E7B0072F81B /* XHLocationHelper.m in Sources */, + E466FA521B42F43300EE02A6 /* XHConfigurationHelper.m in Sources */, + F7B9E84E1A4D5E7B0072F81B /* XHVoiceCommonHelper.m in Sources */, + F7B9E87E1A4D5E7B0072F81B /* XHEmotionCollectionViewCell.m in Sources */, + F7B9E85B1A4D5E7B0072F81B /* XHMessageVideoConverPhotoFactory.m in Sources */, + F7B9E8681A4D5E7B0072F81B /* SEConstants.m in Sources */, + F7B9E8521A4D5E7B0072F81B /* XHDisplayMediaViewController.m in Sources */, + F7B9E85A1A4D5E7B0072F81B /* XHMessageBubbleFactory.m in Sources */, + F7B9E8671A4D5E7B0072F81B /* SECompatibility.m in Sources */, + F7B9E86B1A4D5E7B0072F81B /* SESelectionGrabber.m in Sources */, + F7B9E8721A4D5E7B0072F81B /* SETextMagnifierRanged.m in Sources */, + F7B9E8801A4D5E7B0072F81B /* XHEmotionManagerView.m in Sources */, + F7B9E8491A4D5E7B0072F81B /* XHAudioPlayerHelper.m in Sources */, + F7B9E8701A4D5E7B0072F81B /* SETextLayout.m in Sources */, + F7B9E8771A4D5E7B0072F81B /* XHBubblePhotoImageView.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F751C2111A4C3E5000743ECB /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + F751C2181A4C3E5000743ECB /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = F751C2091A4C3E5000743ECB /* MessageDisplayKitLib */; + targetProxy = F751C2171A4C3E5000743ECB /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + F7B9E9491A4D60380072F81B /* MessageDisplayKitString.strings */ = { + isa = PBXVariantGroup; + children = ( + F7B9E9471A4D60380072F81B /* en */, + F7B9E9481A4D60380072F81B /* zh-Hans */, + ); + name = MessageDisplayKitString.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + F751C21C1A4C3E5000743ECB /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + }; + name = Debug; + }; + F751C21D1A4C3E5000743ECB /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + COPY_PHASE_STRIP = YES; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + F751C21F1A4C3E5000743ECB /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + GCC_PREFIX_HEADER = "$(SRCROOT)/MessageDisplayKitLib/MessageDisplayKitLib-Prefix.pch"; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + F751C2201A4C3E5000743ECB /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Distribution"; + GCC_PREFIX_HEADER = "$(SRCROOT)/MessageDisplayKitLib/MessageDisplayKitLib-Prefix.pch"; + OTHER_LDFLAGS = "-ObjC"; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Release; + }; + F751C2221A4C3E5000743ECB /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Developer"; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + INFOPLIST_FILE = MessageDisplayKitLibTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + F751C2231A4C3E5000743ECB /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_IDENTITY = "iPhone Distribution"; + FRAMEWORK_SEARCH_PATHS = ( + "$(SDKROOT)/Developer/Library/Frameworks", + "$(inherited)", + ); + INFOPLIST_FILE = MessageDisplayKitLibTests/Info.plist; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + F751C2051A4C3E5000743ECB /* Build configuration list for PBXProject "MessageDisplayKitLib" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F751C21C1A4C3E5000743ECB /* Debug */, + F751C21D1A4C3E5000743ECB /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F751C21E1A4C3E5000743ECB /* Build configuration list for PBXNativeTarget "MessageDisplayKitLib" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F751C21F1A4C3E5000743ECB /* Debug */, + F751C2201A4C3E5000743ECB /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F751C2211A4C3E5000743ECB /* Build configuration list for PBXNativeTarget "MessageDisplayKitLibTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F751C2221A4C3E5000743ECB /* Debug */, + F751C2231A4C3E5000743ECB /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = F751C2021A4C3E5000743ECB /* Project object */; +} diff --git a/Example/MessageDisplayKitLib/MessageDisplayKitLib/MessageDisplayKitLib-Prefix.pch b/Example/MessageDisplayKitLib/MessageDisplayKitLib/MessageDisplayKitLib-Prefix.pch new file mode 100644 index 0000000..ee8e18b --- /dev/null +++ b/Example/MessageDisplayKitLib/MessageDisplayKitLib/MessageDisplayKitLib-Prefix.pch @@ -0,0 +1,20 @@ +// +// MessageDisplayKitLib-Prefix.pch +// MessageDisplayKitLib +// +// Created by HUAJIE on 14/12/25. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import + +#ifndef __IPHONE_6_0 +#warning "This project uses features only available in iOS SDK 6.0 and later." +#endif + +#ifdef __OBJC__ + #import + #import + +#endif + diff --git a/Example/MessageDisplayExample/MessageDisplayExampleTests/MessageDisplayExampleTests-Info.plist b/Example/MessageDisplayKitLib/MessageDisplayKitLibTests/Info.plist similarity index 78% rename from Example/MessageDisplayExample/MessageDisplayExampleTests/MessageDisplayExampleTests-Info.plist rename to Example/MessageDisplayKitLib/MessageDisplayKitLibTests/Info.plist index 7873a4f..19e90a2 100644 --- a/Example/MessageDisplayExample/MessageDisplayExampleTests/MessageDisplayExampleTests-Info.plist +++ b/Example/MessageDisplayKitLib/MessageDisplayKitLibTests/Info.plist @@ -5,11 +5,13 @@ CFBundleDevelopmentRegion en CFBundleExecutable - ${EXECUTABLE_NAME} + $(EXECUTABLE_NAME) CFBundleIdentifier - com.HUAJIE.${PRODUCT_NAME:rfc1034identifier} + com.HUAJIE.$(PRODUCT_NAME:rfc1034identifier) CFBundleInfoDictionaryVersion 6.0 + CFBundleName + $(PRODUCT_NAME) CFBundlePackageType BNDL CFBundleShortVersionString diff --git a/Example/MessageDisplayKitStoryBoradExample/MessageDisplayKitStoryBoradExample.xcodeproj/project.pbxproj b/Example/MessageDisplayKitStoryBoradExample/MessageDisplayKitStoryBoradExample.xcodeproj/project.pbxproj index 0ee1fa2..14b09ae 100644 --- a/Example/MessageDisplayKitStoryBoradExample/MessageDisplayKitStoryBoradExample.xcodeproj/project.pbxproj +++ b/Example/MessageDisplayKitStoryBoradExample/MessageDisplayKitStoryBoradExample.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 7053E71D1B42F2C300DE808D /* keyboard_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7053E71B1B42F2C300DE808D /* keyboard_HL@2x.png */; }; + 7053E71E1B42F2C300DE808D /* keyboard@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 7053E71C1B42F2C300DE808D /* keyboard@2x.png */; }; 74180C77190F496E00A35C82 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 74180C76190F496E00A35C82 /* Foundation.framework */; }; 74180C79190F496E00A35C82 /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 74180C78190F496E00A35C82 /* CoreGraphics.framework */; }; 74180C7B190F496E00A35C82 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 74180C7A190F496E00A35C82 /* UIKit.framework */; }; @@ -22,82 +24,94 @@ 74180CA3190F496E00A35C82 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 74180CA1190F496E00A35C82 /* InfoPlist.strings */; }; 74180CA5190F496E00A35C82 /* MessageDisplayKitStoryBoradExampleTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 74180CA4190F496E00A35C82 /* MessageDisplayKitStoryBoradExampleTests.m */; }; 74180CE9190F54C100A35C82 /* XHDemoWeChatMessageTableViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 74180CE8190F54C100A35C82 /* XHDemoWeChatMessageTableViewController.m */; }; - 74180CEE190F560700A35C82 /* MessageDisplayFramework.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 74180CED190F560700A35C82 /* MessageDisplayFramework.framework */; }; - 744FBDD01915FFD500FB4A65 /* Default-568h@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 744FBDCE1915FFD500FB4A65 /* Default-568h@2x.png */; }; - 744FBDD11915FFD500FB4A65 /* Default@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 744FBDCF1915FFD500FB4A65 /* Default@2x.png */; }; - 749019BE191D39850049AFF9 /* avator@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 749019B8191D39850049AFF9 /* avator@2x.png */; }; - 749019C1191D39850049AFF9 /* IMG_1555.MOV in Resources */ = {isa = PBXBuildFile; fileRef = 749019BB191D39850049AFF9 /* IMG_1555.MOV */; }; - 749019C2191D39850049AFF9 /* placeholderImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 749019BC191D39850049AFF9 /* placeholderImage@2x.png */; }; - 749019C3191D39850049AFF9 /* TableViewBackgroundImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 749019BD191D39850049AFF9 /* TableViewBackgroundImage@2x.png */; }; - 74E5E9FC192210E20084BCFA /* MessageDisplayKitString.strings in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9B5192210E20084BCFA /* MessageDisplayKitString.strings */; }; - 74E5E9FD192210E20084BCFA /* face@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9B7192210E20084BCFA /* face@2x.png */; }; - 74E5E9FE192210E20084BCFA /* face_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9B8192210E20084BCFA /* face_HL@2x.png */; }; - 74E5E9FF192210E20084BCFA /* Fav_Cell_Loc@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9B9192210E20084BCFA /* Fav_Cell_Loc@2x.png */; }; - 74E5EA00192210E20084BCFA /* input-bar-background.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9BA192210E20084BCFA /* input-bar-background.png */; }; - 74E5EA01192210E20084BCFA /* input-bar-background@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9BB192210E20084BCFA /* input-bar-background@2x.png */; }; - 74E5EA02192210E20084BCFA /* input-bar-flat.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9BC192210E20084BCFA /* input-bar-flat.png */; }; - 74E5EA03192210E20084BCFA /* input-bar-flat@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9BD192210E20084BCFA /* input-bar-flat@2x.png */; }; - 74E5EA04192210E20084BCFA /* input-field-cover.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9BE192210E20084BCFA /* input-field-cover.png */; }; - 74E5EA05192210E20084BCFA /* input-field-cover@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9BF192210E20084BCFA /* input-field-cover@2x.png */; }; - 74E5EA06192210E20084BCFA /* keyborad@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9C0192210E20084BCFA /* keyborad@2x.png */; }; - 74E5EA07192210E20084BCFA /* keyborad_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9C1192210E20084BCFA /* keyborad_HL@2x.png */; }; - 74E5EA08192210E20084BCFA /* MessageVideoPlay@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9C2192210E20084BCFA /* MessageVideoPlay@2x.png */; }; - 74E5EA09192210E20084BCFA /* multiMedia@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9C3192210E20084BCFA /* multiMedia@2x.png */; }; - 74E5EA0A192210E20084BCFA /* multiMedia_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9C4192210E20084BCFA /* multiMedia_HL@2x.png */; }; - 74E5EA0B192210E20084BCFA /* ReceiverVoiceNodePlaying000@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9C5192210E20084BCFA /* ReceiverVoiceNodePlaying000@2x.png */; }; - 74E5EA0C192210E20084BCFA /* ReceiverVoiceNodePlaying001@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9C6192210E20084BCFA /* ReceiverVoiceNodePlaying001@2x.png */; }; - 74E5EA0D192210E20084BCFA /* ReceiverVoiceNodePlaying002@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9C7192210E20084BCFA /* ReceiverVoiceNodePlaying002@2x.png */; }; - 74E5EA0E192210E20084BCFA /* ReceiverVoiceNodePlaying003@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9C8192210E20084BCFA /* ReceiverVoiceNodePlaying003@2x.png */; }; - 74E5EA0F192210E20084BCFA /* ReceiverVoiceNodePlaying@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9C9192210E20084BCFA /* ReceiverVoiceNodePlaying@2x.png */; }; - 74E5EA10192210E20084BCFA /* RecordCancel@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9CA192210E20084BCFA /* RecordCancel@2x.png */; }; - 74E5EA11192210E20084BCFA /* RecordingBkg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9CB192210E20084BCFA /* RecordingBkg@2x.png */; }; - 74E5EA12192210E20084BCFA /* RecordingSignal001@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9CC192210E20084BCFA /* RecordingSignal001@2x.png */; }; - 74E5EA13192210E20084BCFA /* RecordingSignal002@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9CD192210E20084BCFA /* RecordingSignal002@2x.png */; }; - 74E5EA14192210E20084BCFA /* RecordingSignal003@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9CE192210E20084BCFA /* RecordingSignal003@2x.png */; }; - 74E5EA15192210E20084BCFA /* RecordingSignal004@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9CF192210E20084BCFA /* RecordingSignal004@2x.png */; }; - 74E5EA16192210E20084BCFA /* RecordingSignal005@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9D0192210E20084BCFA /* RecordingSignal005@2x.png */; }; - 74E5EA17192210E20084BCFA /* RecordingSignal006@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9D1192210E20084BCFA /* RecordingSignal006@2x.png */; }; - 74E5EA18192210E20084BCFA /* RecordingSignal007@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9D2192210E20084BCFA /* RecordingSignal007@2x.png */; }; - 74E5EA19192210E20084BCFA /* RecordingSignal008@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9D3192210E20084BCFA /* RecordingSignal008@2x.png */; }; - 74E5EA1A192210E20084BCFA /* section0_emotion0@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9D4192210E20084BCFA /* section0_emotion0@2x.png */; }; - 74E5EA1B192210E20084BCFA /* section0_emotion10@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9D5192210E20084BCFA /* section0_emotion10@2x.png */; }; - 74E5EA1C192210E20084BCFA /* section0_emotion11@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9D6192210E20084BCFA /* section0_emotion11@2x.png */; }; - 74E5EA1D192210E20084BCFA /* section0_emotion12@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9D7192210E20084BCFA /* section0_emotion12@2x.png */; }; - 74E5EA1E192210E20084BCFA /* section0_emotion13@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9D8192210E20084BCFA /* section0_emotion13@2x.png */; }; - 74E5EA1F192210E20084BCFA /* section0_emotion14@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9D9192210E20084BCFA /* section0_emotion14@2x.png */; }; - 74E5EA20192210E20084BCFA /* section0_emotion15@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9DA192210E20084BCFA /* section0_emotion15@2x.png */; }; - 74E5EA21192210E20084BCFA /* section0_emotion1@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9DB192210E20084BCFA /* section0_emotion1@2x.png */; }; - 74E5EA22192210E20084BCFA /* section0_emotion2@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9DC192210E20084BCFA /* section0_emotion2@2x.png */; }; - 74E5EA23192210E20084BCFA /* section0_emotion3@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9DD192210E20084BCFA /* section0_emotion3@2x.png */; }; - 74E5EA24192210E20084BCFA /* section0_emotion4@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9DE192210E20084BCFA /* section0_emotion4@2x.png */; }; - 74E5EA25192210E20084BCFA /* section0_emotion5@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9DF192210E20084BCFA /* section0_emotion5@2x.png */; }; - 74E5EA26192210E20084BCFA /* section0_emotion6@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9E0192210E20084BCFA /* section0_emotion6@2x.png */; }; - 74E5EA27192210E20084BCFA /* section0_emotion7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9E1192210E20084BCFA /* section0_emotion7@2x.png */; }; - 74E5EA28192210E20084BCFA /* section0_emotion8@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9E2192210E20084BCFA /* section0_emotion8@2x.png */; }; - 74E5EA29192210E20084BCFA /* section0_emotion9@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9E3192210E20084BCFA /* section0_emotion9@2x.png */; }; - 74E5EA2A192210E20084BCFA /* SenderVoiceNodePlaying000@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9E4192210E20084BCFA /* SenderVoiceNodePlaying000@2x.png */; }; - 74E5EA2B192210E20084BCFA /* SenderVoiceNodePlaying001@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9E5192210E20084BCFA /* SenderVoiceNodePlaying001@2x.png */; }; - 74E5EA2C192210E20084BCFA /* SenderVoiceNodePlaying002@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9E6192210E20084BCFA /* SenderVoiceNodePlaying002@2x.png */; }; - 74E5EA2D192210E20084BCFA /* SenderVoiceNodePlaying003@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9E7192210E20084BCFA /* SenderVoiceNodePlaying003@2x.png */; }; - 74E5EA2E192210E20084BCFA /* SenderVoiceNodePlaying@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9E8192210E20084BCFA /* SenderVoiceNodePlaying@2x.png */; }; - 74E5EA2F192210E20084BCFA /* sharemore_friendcard@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9E9192210E20084BCFA /* sharemore_friendcard@2x.png */; }; - 74E5EA30192210E20084BCFA /* sharemore_location@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9EA192210E20084BCFA /* sharemore_location@2x.png */; }; - 74E5EA31192210E20084BCFA /* sharemore_myfav@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9EB192210E20084BCFA /* sharemore_myfav@2x.png */; }; - 74E5EA32192210E20084BCFA /* sharemore_openapi@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9EC192210E20084BCFA /* sharemore_openapi@2x.png */; }; - 74E5EA33192210E20084BCFA /* sharemore_pic@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9ED192210E20084BCFA /* sharemore_pic@2x.png */; }; - 74E5EA34192210E20084BCFA /* sharemore_video@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9EE192210E20084BCFA /* sharemore_video@2x.png */; }; - 74E5EA35192210E20084BCFA /* sharemore_videovoip@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9EF192210E20084BCFA /* sharemore_videovoip@2x.png */; }; - 74E5EA36192210E20084BCFA /* sharemore_voiceinput@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9F0192210E20084BCFA /* sharemore_voiceinput@2x.png */; }; - 74E5EA37192210E20084BCFA /* sharemore_voipvoice@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9F1192210E20084BCFA /* sharemore_voipvoice@2x.png */; }; - 74E5EA38192210E20084BCFA /* sharemore_wxtalk@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9F2192210E20084BCFA /* sharemore_wxtalk@2x.png */; }; - 74E5EA39192210E20084BCFA /* voice@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9F3192210E20084BCFA /* voice@2x.png */; }; - 74E5EA3A192210E20084BCFA /* voice_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9F4192210E20084BCFA /* voice_HL@2x.png */; }; - 74E5EA3B192210E20084BCFA /* VoiceBtn_Black@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9F5192210E20084BCFA /* VoiceBtn_Black@2x.png */; }; - 74E5EA3C192210E20084BCFA /* VoiceBtn_BlackHL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9F6192210E20084BCFA /* VoiceBtn_BlackHL@2x.png */; }; - 74E5EA3D192210E20084BCFA /* weChatBubble_Receiving_Cavern@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9F7192210E20084BCFA /* weChatBubble_Receiving_Cavern@2x.png */; }; - 74E5EA3E192210E20084BCFA /* weChatBubble_Receiving_Solid@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9F8192210E20084BCFA /* weChatBubble_Receiving_Solid@2x.png */; }; - 74E5EA3F192210E20084BCFA /* weChatBubble_Sending_Cavern@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9F9192210E20084BCFA /* weChatBubble_Sending_Cavern@2x.png */; }; - 74E5EA40192210E20084BCFA /* weChatBubble_Sending_Solid@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 74E5E9FA192210E20084BCFA /* weChatBubble_Sending_Solid@2x.png */; }; + E4EE9B011B97611800866998 /* emotion0.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AD41B97611700866998 /* emotion0.gif */; }; + E4EE9B021B97611800866998 /* emotion1.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AD51B97611700866998 /* emotion1.gif */; }; + E4EE9B031B97611800866998 /* emotion10.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AD61B97611700866998 /* emotion10.gif */; }; + E4EE9B041B97611800866998 /* emotion11.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AD71B97611700866998 /* emotion11.gif */; }; + E4EE9B051B97611800866998 /* emotion12.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AD81B97611700866998 /* emotion12.gif */; }; + E4EE9B061B97611800866998 /* emotion13.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AD91B97611800866998 /* emotion13.gif */; }; + E4EE9B071B97611800866998 /* emotion14.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9ADA1B97611800866998 /* emotion14.gif */; }; + E4EE9B081B97611800866998 /* emotion15.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9ADB1B97611800866998 /* emotion15.gif */; }; + E4EE9B091B97611800866998 /* emotion16.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9ADC1B97611800866998 /* emotion16.gif */; }; + E4EE9B0A1B97611800866998 /* emotion2.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9ADD1B97611800866998 /* emotion2.gif */; }; + E4EE9B0B1B97611800866998 /* emotion3.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9ADE1B97611800866998 /* emotion3.gif */; }; + E4EE9B0C1B97611800866998 /* emotion4.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9ADF1B97611800866998 /* emotion4.gif */; }; + E4EE9B0D1B97611800866998 /* emotion5.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AE01B97611800866998 /* emotion5.gif */; }; + E4EE9B0E1B97611800866998 /* emotion6.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AE11B97611800866998 /* emotion6.gif */; }; + E4EE9B0F1B97611800866998 /* emotion7.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AE21B97611800866998 /* emotion7.gif */; }; + E4EE9B101B97611800866998 /* emotion8.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AE31B97611800866998 /* emotion8.gif */; }; + E4EE9B111B97611800866998 /* emotion9.gif in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AE41B97611800866998 /* emotion9.gif */; }; + E4EE9B121B97611800866998 /* SearchIcon@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AE51B97611800866998 /* SearchIcon@2x.png */; }; + E4EE9B131B97611800866998 /* section0_emotion0@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AE61B97611800866998 /* section0_emotion0@2x.png */; }; + E4EE9B141B97611800866998 /* section0_emotion1@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AE71B97611800866998 /* section0_emotion1@2x.png */; }; + E4EE9B151B97611800866998 /* section0_emotion2@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AE81B97611800866998 /* section0_emotion2@2x.png */; }; + E4EE9B161B97611800866998 /* section0_emotion3@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AE91B97611800866998 /* section0_emotion3@2x.png */; }; + E4EE9B171B97611800866998 /* section0_emotion4@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AEA1B97611800866998 /* section0_emotion4@2x.png */; }; + E4EE9B181B97611800866998 /* section0_emotion5@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AEB1B97611800866998 /* section0_emotion5@2x.png */; }; + E4EE9B191B97611800866998 /* section0_emotion6@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AEC1B97611800866998 /* section0_emotion6@2x.png */; }; + E4EE9B1A1B97611800866998 /* section0_emotion7@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AED1B97611800866998 /* section0_emotion7@2x.png */; }; + E4EE9B1B1B97611800866998 /* section0_emotion8@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AEE1B97611800866998 /* section0_emotion8@2x.png */; }; + E4EE9B1C1B97611800866998 /* section0_emotion9@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AEF1B97611800866998 /* section0_emotion9@2x.png */; }; + E4EE9B1D1B97611800866998 /* section0_emotion10@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AF01B97611800866998 /* section0_emotion10@2x.png */; }; + E4EE9B1E1B97611800866998 /* section0_emotion11@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AF11B97611800866998 /* section0_emotion11@2x.png */; }; + E4EE9B1F1B97611800866998 /* section0_emotion12@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AF21B97611800866998 /* section0_emotion12@2x.png */; }; + E4EE9B201B97611800866998 /* section0_emotion13@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AF31B97611800866998 /* section0_emotion13@2x.png */; }; + E4EE9B211B97611800866998 /* section0_emotion14@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AF41B97611800866998 /* section0_emotion14@2x.png */; }; + E4EE9B221B97611800866998 /* section0_emotion15@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AF51B97611800866998 /* section0_emotion15@2x.png */; }; + E4EE9B231B97611800866998 /* sharemore_friendcard@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AF61B97611800866998 /* sharemore_friendcard@2x.png */; }; + E4EE9B241B97611800866998 /* sharemore_location@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AF71B97611800866998 /* sharemore_location@2x.png */; }; + E4EE9B251B97611800866998 /* sharemore_myfav@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AF81B97611800866998 /* sharemore_myfav@2x.png */; }; + E4EE9B261B97611800866998 /* sharemore_openapi@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AF91B97611800866998 /* sharemore_openapi@2x.png */; }; + E4EE9B271B97611800866998 /* sharemore_pic@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AFA1B97611800866998 /* sharemore_pic@2x.png */; }; + E4EE9B281B97611800866998 /* sharemore_video@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AFB1B97611800866998 /* sharemore_video@2x.png */; }; + E4EE9B291B97611800866998 /* sharemore_videovoip@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AFC1B97611800866998 /* sharemore_videovoip@2x.png */; }; + E4EE9B2A1B97611800866998 /* sharemore_voiceinput@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AFD1B97611800866998 /* sharemore_voiceinput@2x.png */; }; + E4EE9B2B1B97611800866998 /* sharemore_voipvoice@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AFE1B97611800866998 /* sharemore_voipvoice@2x.png */; }; + E4EE9B2C1B97611800866998 /* sharemore_wxtalk@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9AFF1B97611800866998 /* sharemore_wxtalk@2x.png */; }; + E4EE9B2D1B97611800866998 /* TableViewBackgroundImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9B001B97611800866998 /* TableViewBackgroundImage@2x.png */; }; + E4EE9B2F1B97614F00866998 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E4EE9B2E1B97614F00866998 /* Images.xcassets */; }; + F7220AE91A52694B00DBDEE7 /* MessageDisplayKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F7E396BC1A4D4363003AB670 /* MessageDisplayKit.framework */; }; + F7220AEA1A52694B00DBDEE7 /* MessageDisplayKit.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = F7E396BC1A4D4363003AB670 /* MessageDisplayKit.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; + F7B9E9F61A4D60440072F81B /* avator@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9991A4D60440072F81B /* avator@2x.png */; }; + F7B9EA011A4D60440072F81B /* MessageDisplayKitString.strings in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9A61A4D60440072F81B /* MessageDisplayKitString.strings */; }; + F7B9EA021A4D60440072F81B /* face@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9A71A4D60440072F81B /* face@2x.png */; }; + F7B9EA031A4D60440072F81B /* face_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9A81A4D60440072F81B /* face_HL@2x.png */; }; + F7B9EA041A4D60440072F81B /* Fav_Cell_Loc@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9A91A4D60440072F81B /* Fav_Cell_Loc@2x.png */; }; + F7B9EA071A4D60440072F81B /* input-bar-flat.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9AC1A4D60440072F81B /* input-bar-flat.png */; }; + F7B9EA081A4D60440072F81B /* input-bar-flat@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9AD1A4D60440072F81B /* input-bar-flat@2x.png */; }; + F7B9EA0D1A4D60440072F81B /* MessageVideoPlay@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9B21A4D60440072F81B /* MessageVideoPlay@2x.png */; }; + F7B9EA0F1A4D60440072F81B /* msg_chat_voice_unread.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9B41A4D60440072F81B /* msg_chat_voice_unread.png */; }; + F7B9EA101A4D60440072F81B /* msg_chat_voice_unread@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9B51A4D60440072F81B /* msg_chat_voice_unread@2x.png */; }; + F7B9EA111A4D60440072F81B /* multiMedia@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9B61A4D60440072F81B /* multiMedia@2x.png */; }; + F7B9EA121A4D60440072F81B /* multiMedia_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9B71A4D60440072F81B /* multiMedia_HL@2x.png */; }; + F7B9EA151A4D60440072F81B /* placeholderImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9BA1A4D60440072F81B /* placeholderImage@2x.png */; }; + F7B9EA161A4D60440072F81B /* ReceiverVoiceNodePlaying000@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9BB1A4D60440072F81B /* ReceiverVoiceNodePlaying000@2x.png */; }; + F7B9EA171A4D60440072F81B /* ReceiverVoiceNodePlaying001@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9BC1A4D60440072F81B /* ReceiverVoiceNodePlaying001@2x.png */; }; + F7B9EA181A4D60440072F81B /* ReceiverVoiceNodePlaying002@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9BD1A4D60440072F81B /* ReceiverVoiceNodePlaying002@2x.png */; }; + F7B9EA191A4D60440072F81B /* ReceiverVoiceNodePlaying003@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9BE1A4D60440072F81B /* ReceiverVoiceNodePlaying003@2x.png */; }; + F7B9EA1A1A4D60440072F81B /* ReceiverVoiceNodePlaying@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9BF1A4D60440072F81B /* ReceiverVoiceNodePlaying@2x.png */; }; + F7B9EA1B1A4D60440072F81B /* RecordCancel@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9C01A4D60440072F81B /* RecordCancel@2x.png */; }; + F7B9EA1C1A4D60440072F81B /* RecordingBkg@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9C11A4D60440072F81B /* RecordingBkg@2x.png */; }; + F7B9EA1D1A4D60440072F81B /* RecordingSignal001@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9C21A4D60440072F81B /* RecordingSignal001@2x.png */; }; + F7B9EA1E1A4D60440072F81B /* RecordingSignal002@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9C31A4D60440072F81B /* RecordingSignal002@2x.png */; }; + F7B9EA1F1A4D60440072F81B /* RecordingSignal003@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9C41A4D60440072F81B /* RecordingSignal003@2x.png */; }; + F7B9EA201A4D60440072F81B /* RecordingSignal004@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9C51A4D60440072F81B /* RecordingSignal004@2x.png */; }; + F7B9EA211A4D60440072F81B /* RecordingSignal005@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9C61A4D60440072F81B /* RecordingSignal005@2x.png */; }; + F7B9EA221A4D60440072F81B /* RecordingSignal006@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9C71A4D60440072F81B /* RecordingSignal006@2x.png */; }; + F7B9EA231A4D60440072F81B /* RecordingSignal007@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9C81A4D60440072F81B /* RecordingSignal007@2x.png */; }; + F7B9EA241A4D60440072F81B /* RecordingSignal008@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9C91A4D60440072F81B /* RecordingSignal008@2x.png */; }; + F7B9EA261A4D60440072F81B /* SECoreTextView.bundle in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9CB1A4D60440072F81B /* SECoreTextView.bundle */; }; + F7B9EA371A4D60440072F81B /* SenderVoiceNodePlaying000@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9DC1A4D60440072F81B /* SenderVoiceNodePlaying000@2x.png */; }; + F7B9EA381A4D60440072F81B /* SenderVoiceNodePlaying001@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9DD1A4D60440072F81B /* SenderVoiceNodePlaying001@2x.png */; }; + F7B9EA391A4D60440072F81B /* SenderVoiceNodePlaying002@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9DE1A4D60440072F81B /* SenderVoiceNodePlaying002@2x.png */; }; + F7B9EA3A1A4D60440072F81B /* SenderVoiceNodePlaying003@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9DF1A4D60440072F81B /* SenderVoiceNodePlaying003@2x.png */; }; + F7B9EA3B1A4D60440072F81B /* SenderVoiceNodePlaying@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9E01A4D60440072F81B /* SenderVoiceNodePlaying@2x.png */; }; + F7B9EA461A4D60440072F81B /* voice@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9EB1A4D60440072F81B /* voice@2x.png */; }; + F7B9EA471A4D60440072F81B /* voice_HL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9EC1A4D60440072F81B /* voice_HL@2x.png */; }; + F7B9EA481A4D60440072F81B /* VoiceBtn_Black@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9ED1A4D60440072F81B /* VoiceBtn_Black@2x.png */; }; + F7B9EA491A4D60440072F81B /* VoiceBtn_BlackHL@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9EE1A4D60440072F81B /* VoiceBtn_BlackHL@2x.png */; }; + F7B9EA4B1A4D60440072F81B /* weChatBubble_Receiving_Solid@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9F01A4D60440072F81B /* weChatBubble_Receiving_Solid@2x.png */; }; + F7B9EA4D1A4D60440072F81B /* weChatBubble_Sending_Solid@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = F7B9E9F21A4D60440072F81B /* weChatBubble_Sending_Solid@2x.png */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -110,7 +124,23 @@ }; /* End PBXContainerItemProxy section */ +/* Begin PBXCopyFilesBuildPhase section */ + F7220AEB1A52694B00DBDEE7 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + F7220AEA1A52694B00DBDEE7 /* MessageDisplayKit.framework in Embed Frameworks */, + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + /* Begin PBXFileReference section */ + 7053E71B1B42F2C300DE808D /* keyboard_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyboard_HL@2x.png"; sourceTree = ""; }; + 7053E71C1B42F2C300DE808D /* keyboard@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyboard@2x.png"; sourceTree = ""; }; 74180C73190F496E00A35C82 /* MessageDisplayKitStoryBoradExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MessageDisplayKitStoryBoradExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 74180C76190F496E00A35C82 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 74180C78190F496E00A35C82 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; @@ -132,83 +162,94 @@ 74180CA4190F496E00A35C82 /* MessageDisplayKitStoryBoradExampleTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = MessageDisplayKitStoryBoradExampleTests.m; sourceTree = ""; }; 74180CE7190F54C100A35C82 /* XHDemoWeChatMessageTableViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XHDemoWeChatMessageTableViewController.h; sourceTree = ""; }; 74180CE8190F54C100A35C82 /* XHDemoWeChatMessageTableViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = XHDemoWeChatMessageTableViewController.m; sourceTree = ""; }; - 74180CED190F560700A35C82 /* MessageDisplayFramework.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MessageDisplayFramework.framework; path = "../../../../../../../Users/qtone-1/Library/Developer/Xcode/DerivedData/MessageDisplayKitWorkSpace-gnbhcevmgruvfqgvjvaecxmpgjha/Build/Products/Release-iphoneos/MessageDisplayFramework.framework"; sourceTree = ""; }; - 744FBDCE1915FFD500FB4A65 /* Default-568h@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default-568h@2x.png"; sourceTree = ""; }; - 744FBDCF1915FFD500FB4A65 /* Default@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Default@2x.png"; sourceTree = ""; }; - 749019B8191D39850049AFF9 /* avator@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "avator@2x.png"; sourceTree = ""; }; - 749019BB191D39850049AFF9 /* IMG_1555.MOV */ = {isa = PBXFileReference; lastKnownFileType = video.quicktime; path = IMG_1555.MOV; sourceTree = ""; }; - 749019BC191D39850049AFF9 /* placeholderImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "placeholderImage@2x.png"; sourceTree = ""; }; - 749019BD191D39850049AFF9 /* TableViewBackgroundImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "TableViewBackgroundImage@2x.png"; sourceTree = ""; }; - 74E5E9B6192210E20084BCFA /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/MessageDisplayKitString.strings; sourceTree = ""; }; - 74E5E9B7192210E20084BCFA /* face@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "face@2x.png"; sourceTree = ""; }; - 74E5E9B8192210E20084BCFA /* face_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "face_HL@2x.png"; sourceTree = ""; }; - 74E5E9B9192210E20084BCFA /* Fav_Cell_Loc@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Fav_Cell_Loc@2x.png"; sourceTree = ""; }; - 74E5E9BA192210E20084BCFA /* input-bar-background.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-bar-background.png"; sourceTree = ""; }; - 74E5E9BB192210E20084BCFA /* input-bar-background@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-bar-background@2x.png"; sourceTree = ""; }; - 74E5E9BC192210E20084BCFA /* input-bar-flat.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-bar-flat.png"; sourceTree = ""; }; - 74E5E9BD192210E20084BCFA /* input-bar-flat@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-bar-flat@2x.png"; sourceTree = ""; }; - 74E5E9BE192210E20084BCFA /* input-field-cover.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-field-cover.png"; sourceTree = ""; }; - 74E5E9BF192210E20084BCFA /* input-field-cover@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-field-cover@2x.png"; sourceTree = ""; }; - 74E5E9C0192210E20084BCFA /* keyborad@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyborad@2x.png"; sourceTree = ""; }; - 74E5E9C1192210E20084BCFA /* keyborad_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "keyborad_HL@2x.png"; sourceTree = ""; }; - 74E5E9C2192210E20084BCFA /* MessageVideoPlay@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MessageVideoPlay@2x.png"; sourceTree = ""; }; - 74E5E9C3192210E20084BCFA /* multiMedia@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "multiMedia@2x.png"; sourceTree = ""; }; - 74E5E9C4192210E20084BCFA /* multiMedia_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "multiMedia_HL@2x.png"; sourceTree = ""; }; - 74E5E9C5192210E20084BCFA /* ReceiverVoiceNodePlaying000@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying000@2x.png"; sourceTree = ""; }; - 74E5E9C6192210E20084BCFA /* ReceiverVoiceNodePlaying001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying001@2x.png"; sourceTree = ""; }; - 74E5E9C7192210E20084BCFA /* ReceiverVoiceNodePlaying002@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying002@2x.png"; sourceTree = ""; }; - 74E5E9C8192210E20084BCFA /* ReceiverVoiceNodePlaying003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying003@2x.png"; sourceTree = ""; }; - 74E5E9C9192210E20084BCFA /* ReceiverVoiceNodePlaying@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying@2x.png"; sourceTree = ""; }; - 74E5E9CA192210E20084BCFA /* RecordCancel@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordCancel@2x.png"; sourceTree = ""; }; - 74E5E9CB192210E20084BCFA /* RecordingBkg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingBkg@2x.png"; sourceTree = ""; }; - 74E5E9CC192210E20084BCFA /* RecordingSignal001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal001@2x.png"; sourceTree = ""; }; - 74E5E9CD192210E20084BCFA /* RecordingSignal002@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal002@2x.png"; sourceTree = ""; }; - 74E5E9CE192210E20084BCFA /* RecordingSignal003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal003@2x.png"; sourceTree = ""; }; - 74E5E9CF192210E20084BCFA /* RecordingSignal004@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal004@2x.png"; sourceTree = ""; }; - 74E5E9D0192210E20084BCFA /* RecordingSignal005@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal005@2x.png"; sourceTree = ""; }; - 74E5E9D1192210E20084BCFA /* RecordingSignal006@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal006@2x.png"; sourceTree = ""; }; - 74E5E9D2192210E20084BCFA /* RecordingSignal007@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal007@2x.png"; sourceTree = ""; }; - 74E5E9D3192210E20084BCFA /* RecordingSignal008@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal008@2x.png"; sourceTree = ""; }; - 74E5E9D4192210E20084BCFA /* section0_emotion0@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion0@2x.png"; sourceTree = ""; }; - 74E5E9D5192210E20084BCFA /* section0_emotion10@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion10@2x.png"; sourceTree = ""; }; - 74E5E9D6192210E20084BCFA /* section0_emotion11@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion11@2x.png"; sourceTree = ""; }; - 74E5E9D7192210E20084BCFA /* section0_emotion12@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion12@2x.png"; sourceTree = ""; }; - 74E5E9D8192210E20084BCFA /* section0_emotion13@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion13@2x.png"; sourceTree = ""; }; - 74E5E9D9192210E20084BCFA /* section0_emotion14@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion14@2x.png"; sourceTree = ""; }; - 74E5E9DA192210E20084BCFA /* section0_emotion15@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion15@2x.png"; sourceTree = ""; }; - 74E5E9DB192210E20084BCFA /* section0_emotion1@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion1@2x.png"; sourceTree = ""; }; - 74E5E9DC192210E20084BCFA /* section0_emotion2@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion2@2x.png"; sourceTree = ""; }; - 74E5E9DD192210E20084BCFA /* section0_emotion3@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion3@2x.png"; sourceTree = ""; }; - 74E5E9DE192210E20084BCFA /* section0_emotion4@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion4@2x.png"; sourceTree = ""; }; - 74E5E9DF192210E20084BCFA /* section0_emotion5@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion5@2x.png"; sourceTree = ""; }; - 74E5E9E0192210E20084BCFA /* section0_emotion6@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion6@2x.png"; sourceTree = ""; }; - 74E5E9E1192210E20084BCFA /* section0_emotion7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion7@2x.png"; sourceTree = ""; }; - 74E5E9E2192210E20084BCFA /* section0_emotion8@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion8@2x.png"; sourceTree = ""; }; - 74E5E9E3192210E20084BCFA /* section0_emotion9@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion9@2x.png"; sourceTree = ""; }; - 74E5E9E4192210E20084BCFA /* SenderVoiceNodePlaying000@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying000@2x.png"; sourceTree = ""; }; - 74E5E9E5192210E20084BCFA /* SenderVoiceNodePlaying001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying001@2x.png"; sourceTree = ""; }; - 74E5E9E6192210E20084BCFA /* SenderVoiceNodePlaying002@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying002@2x.png"; sourceTree = ""; }; - 74E5E9E7192210E20084BCFA /* SenderVoiceNodePlaying003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying003@2x.png"; sourceTree = ""; }; - 74E5E9E8192210E20084BCFA /* SenderVoiceNodePlaying@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying@2x.png"; sourceTree = ""; }; - 74E5E9E9192210E20084BCFA /* sharemore_friendcard@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_friendcard@2x.png"; sourceTree = ""; }; - 74E5E9EA192210E20084BCFA /* sharemore_location@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_location@2x.png"; sourceTree = ""; }; - 74E5E9EB192210E20084BCFA /* sharemore_myfav@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_myfav@2x.png"; sourceTree = ""; }; - 74E5E9EC192210E20084BCFA /* sharemore_openapi@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_openapi@2x.png"; sourceTree = ""; }; - 74E5E9ED192210E20084BCFA /* sharemore_pic@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_pic@2x.png"; sourceTree = ""; }; - 74E5E9EE192210E20084BCFA /* sharemore_video@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_video@2x.png"; sourceTree = ""; }; - 74E5E9EF192210E20084BCFA /* sharemore_videovoip@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_videovoip@2x.png"; sourceTree = ""; }; - 74E5E9F0192210E20084BCFA /* sharemore_voiceinput@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_voiceinput@2x.png"; sourceTree = ""; }; - 74E5E9F1192210E20084BCFA /* sharemore_voipvoice@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_voipvoice@2x.png"; sourceTree = ""; }; - 74E5E9F2192210E20084BCFA /* sharemore_wxtalk@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_wxtalk@2x.png"; sourceTree = ""; }; - 74E5E9F3192210E20084BCFA /* voice@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "voice@2x.png"; sourceTree = ""; }; - 74E5E9F4192210E20084BCFA /* voice_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "voice_HL@2x.png"; sourceTree = ""; }; - 74E5E9F5192210E20084BCFA /* VoiceBtn_Black@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceBtn_Black@2x.png"; sourceTree = ""; }; - 74E5E9F6192210E20084BCFA /* VoiceBtn_BlackHL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceBtn_BlackHL@2x.png"; sourceTree = ""; }; - 74E5E9F7192210E20084BCFA /* weChatBubble_Receiving_Cavern@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weChatBubble_Receiving_Cavern@2x.png"; sourceTree = ""; }; - 74E5E9F8192210E20084BCFA /* weChatBubble_Receiving_Solid@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weChatBubble_Receiving_Solid@2x.png"; sourceTree = ""; }; - 74E5E9F9192210E20084BCFA /* weChatBubble_Sending_Cavern@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weChatBubble_Sending_Cavern@2x.png"; sourceTree = ""; }; - 74E5E9FA192210E20084BCFA /* weChatBubble_Sending_Solid@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weChatBubble_Sending_Solid@2x.png"; sourceTree = ""; }; - 74E5E9FB192210E20084BCFA /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MessageDisplayKitString.strings"; sourceTree = ""; }; + E4EE9AD41B97611700866998 /* emotion0.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion0.gif; sourceTree = ""; }; + E4EE9AD51B97611700866998 /* emotion1.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion1.gif; sourceTree = ""; }; + E4EE9AD61B97611700866998 /* emotion10.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion10.gif; sourceTree = ""; }; + E4EE9AD71B97611700866998 /* emotion11.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion11.gif; sourceTree = ""; }; + E4EE9AD81B97611700866998 /* emotion12.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion12.gif; sourceTree = ""; }; + E4EE9AD91B97611800866998 /* emotion13.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion13.gif; sourceTree = ""; }; + E4EE9ADA1B97611800866998 /* emotion14.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion14.gif; sourceTree = ""; }; + E4EE9ADB1B97611800866998 /* emotion15.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion15.gif; sourceTree = ""; }; + E4EE9ADC1B97611800866998 /* emotion16.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion16.gif; sourceTree = ""; }; + E4EE9ADD1B97611800866998 /* emotion2.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion2.gif; sourceTree = ""; }; + E4EE9ADE1B97611800866998 /* emotion3.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion3.gif; sourceTree = ""; }; + E4EE9ADF1B97611800866998 /* emotion4.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion4.gif; sourceTree = ""; }; + E4EE9AE01B97611800866998 /* emotion5.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion5.gif; sourceTree = ""; }; + E4EE9AE11B97611800866998 /* emotion6.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion6.gif; sourceTree = ""; }; + E4EE9AE21B97611800866998 /* emotion7.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion7.gif; sourceTree = ""; }; + E4EE9AE31B97611800866998 /* emotion8.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion8.gif; sourceTree = ""; }; + E4EE9AE41B97611800866998 /* emotion9.gif */ = {isa = PBXFileReference; lastKnownFileType = image.gif; path = emotion9.gif; sourceTree = ""; }; + E4EE9AE51B97611800866998 /* SearchIcon@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SearchIcon@2x.png"; sourceTree = ""; }; + E4EE9AE61B97611800866998 /* section0_emotion0@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion0@2x.png"; sourceTree = ""; }; + E4EE9AE71B97611800866998 /* section0_emotion1@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion1@2x.png"; sourceTree = ""; }; + E4EE9AE81B97611800866998 /* section0_emotion2@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion2@2x.png"; sourceTree = ""; }; + E4EE9AE91B97611800866998 /* section0_emotion3@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion3@2x.png"; sourceTree = ""; }; + E4EE9AEA1B97611800866998 /* section0_emotion4@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion4@2x.png"; sourceTree = ""; }; + E4EE9AEB1B97611800866998 /* section0_emotion5@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion5@2x.png"; sourceTree = ""; }; + E4EE9AEC1B97611800866998 /* section0_emotion6@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion6@2x.png"; sourceTree = ""; }; + E4EE9AED1B97611800866998 /* section0_emotion7@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion7@2x.png"; sourceTree = ""; }; + E4EE9AEE1B97611800866998 /* section0_emotion8@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion8@2x.png"; sourceTree = ""; }; + E4EE9AEF1B97611800866998 /* section0_emotion9@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion9@2x.png"; sourceTree = ""; }; + E4EE9AF01B97611800866998 /* section0_emotion10@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion10@2x.png"; sourceTree = ""; }; + E4EE9AF11B97611800866998 /* section0_emotion11@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion11@2x.png"; sourceTree = ""; }; + E4EE9AF21B97611800866998 /* section0_emotion12@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion12@2x.png"; sourceTree = ""; }; + E4EE9AF31B97611800866998 /* section0_emotion13@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion13@2x.png"; sourceTree = ""; }; + E4EE9AF41B97611800866998 /* section0_emotion14@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion14@2x.png"; sourceTree = ""; }; + E4EE9AF51B97611800866998 /* section0_emotion15@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "section0_emotion15@2x.png"; sourceTree = ""; }; + E4EE9AF61B97611800866998 /* sharemore_friendcard@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_friendcard@2x.png"; sourceTree = ""; }; + E4EE9AF71B97611800866998 /* sharemore_location@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_location@2x.png"; sourceTree = ""; }; + E4EE9AF81B97611800866998 /* sharemore_myfav@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_myfav@2x.png"; sourceTree = ""; }; + E4EE9AF91B97611800866998 /* sharemore_openapi@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_openapi@2x.png"; sourceTree = ""; }; + E4EE9AFA1B97611800866998 /* sharemore_pic@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_pic@2x.png"; sourceTree = ""; }; + E4EE9AFB1B97611800866998 /* sharemore_video@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_video@2x.png"; sourceTree = ""; }; + E4EE9AFC1B97611800866998 /* sharemore_videovoip@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_videovoip@2x.png"; sourceTree = ""; }; + E4EE9AFD1B97611800866998 /* sharemore_voiceinput@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_voiceinput@2x.png"; sourceTree = ""; }; + E4EE9AFE1B97611800866998 /* sharemore_voipvoice@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_voipvoice@2x.png"; sourceTree = ""; }; + E4EE9AFF1B97611800866998 /* sharemore_wxtalk@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "sharemore_wxtalk@2x.png"; sourceTree = ""; }; + E4EE9B001B97611800866998 /* TableViewBackgroundImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "TableViewBackgroundImage@2x.png"; sourceTree = ""; }; + E4EE9B2E1B97614F00866998 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; + F7B9E9991A4D60440072F81B /* avator@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "avator@2x.png"; sourceTree = ""; }; + F7B9E9A41A4D60440072F81B /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/MessageDisplayKitString.strings; sourceTree = ""; }; + F7B9E9A51A4D60440072F81B /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MessageDisplayKitString.strings"; sourceTree = ""; }; + F7B9E9A71A4D60440072F81B /* face@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "face@2x.png"; sourceTree = ""; }; + F7B9E9A81A4D60440072F81B /* face_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "face_HL@2x.png"; sourceTree = ""; }; + F7B9E9A91A4D60440072F81B /* Fav_Cell_Loc@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Fav_Cell_Loc@2x.png"; sourceTree = ""; }; + F7B9E9AC1A4D60440072F81B /* input-bar-flat.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-bar-flat.png"; sourceTree = ""; }; + F7B9E9AD1A4D60440072F81B /* input-bar-flat@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "input-bar-flat@2x.png"; sourceTree = ""; }; + F7B9E9B21A4D60440072F81B /* MessageVideoPlay@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "MessageVideoPlay@2x.png"; sourceTree = ""; }; + F7B9E9B41A4D60440072F81B /* msg_chat_voice_unread.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = msg_chat_voice_unread.png; sourceTree = ""; }; + F7B9E9B51A4D60440072F81B /* msg_chat_voice_unread@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "msg_chat_voice_unread@2x.png"; sourceTree = ""; }; + F7B9E9B61A4D60440072F81B /* multiMedia@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "multiMedia@2x.png"; sourceTree = ""; }; + F7B9E9B71A4D60440072F81B /* multiMedia_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "multiMedia_HL@2x.png"; sourceTree = ""; }; + F7B9E9BA1A4D60440072F81B /* placeholderImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "placeholderImage@2x.png"; sourceTree = ""; }; + F7B9E9BB1A4D60440072F81B /* ReceiverVoiceNodePlaying000@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying000@2x.png"; sourceTree = ""; }; + F7B9E9BC1A4D60440072F81B /* ReceiverVoiceNodePlaying001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying001@2x.png"; sourceTree = ""; }; + F7B9E9BD1A4D60440072F81B /* ReceiverVoiceNodePlaying002@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying002@2x.png"; sourceTree = ""; }; + F7B9E9BE1A4D60440072F81B /* ReceiverVoiceNodePlaying003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying003@2x.png"; sourceTree = ""; }; + F7B9E9BF1A4D60440072F81B /* ReceiverVoiceNodePlaying@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "ReceiverVoiceNodePlaying@2x.png"; sourceTree = ""; }; + F7B9E9C01A4D60440072F81B /* RecordCancel@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordCancel@2x.png"; sourceTree = ""; }; + F7B9E9C11A4D60440072F81B /* RecordingBkg@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingBkg@2x.png"; sourceTree = ""; }; + F7B9E9C21A4D60440072F81B /* RecordingSignal001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal001@2x.png"; sourceTree = ""; }; + F7B9E9C31A4D60440072F81B /* RecordingSignal002@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal002@2x.png"; sourceTree = ""; }; + F7B9E9C41A4D60440072F81B /* RecordingSignal003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal003@2x.png"; sourceTree = ""; }; + F7B9E9C51A4D60440072F81B /* RecordingSignal004@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal004@2x.png"; sourceTree = ""; }; + F7B9E9C61A4D60440072F81B /* RecordingSignal005@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal005@2x.png"; sourceTree = ""; }; + F7B9E9C71A4D60440072F81B /* RecordingSignal006@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal006@2x.png"; sourceTree = ""; }; + F7B9E9C81A4D60440072F81B /* RecordingSignal007@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal007@2x.png"; sourceTree = ""; }; + F7B9E9C91A4D60440072F81B /* RecordingSignal008@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "RecordingSignal008@2x.png"; sourceTree = ""; }; + F7B9E9CB1A4D60440072F81B /* SECoreTextView.bundle */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.plug-in"; path = SECoreTextView.bundle; sourceTree = ""; }; + F7B9E9DC1A4D60440072F81B /* SenderVoiceNodePlaying000@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying000@2x.png"; sourceTree = ""; }; + F7B9E9DD1A4D60440072F81B /* SenderVoiceNodePlaying001@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying001@2x.png"; sourceTree = ""; }; + F7B9E9DE1A4D60440072F81B /* SenderVoiceNodePlaying002@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying002@2x.png"; sourceTree = ""; }; + F7B9E9DF1A4D60440072F81B /* SenderVoiceNodePlaying003@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying003@2x.png"; sourceTree = ""; }; + F7B9E9E01A4D60440072F81B /* SenderVoiceNodePlaying@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "SenderVoiceNodePlaying@2x.png"; sourceTree = ""; }; + F7B9E9EB1A4D60440072F81B /* voice@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "voice@2x.png"; sourceTree = ""; }; + F7B9E9EC1A4D60440072F81B /* voice_HL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "voice_HL@2x.png"; sourceTree = ""; }; + F7B9E9ED1A4D60440072F81B /* VoiceBtn_Black@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceBtn_Black@2x.png"; sourceTree = ""; }; + F7B9E9EE1A4D60440072F81B /* VoiceBtn_BlackHL@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "VoiceBtn_BlackHL@2x.png"; sourceTree = ""; }; + F7B9E9F01A4D60440072F81B /* weChatBubble_Receiving_Solid@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weChatBubble_Receiving_Solid@2x.png"; sourceTree = ""; }; + F7B9E9F21A4D60440072F81B /* weChatBubble_Sending_Solid@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "weChatBubble_Sending_Solid@2x.png"; sourceTree = ""; }; + F7E396BC1A4D4363003AB670 /* MessageDisplayKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; path = MessageDisplayKit.framework; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -217,8 +258,8 @@ buildActionMask = 2147483647; files = ( 74180C79190F496E00A35C82 /* CoreGraphics.framework in Frameworks */, + F7220AE91A52694B00DBDEE7 /* MessageDisplayKit.framework in Frameworks */, 74180C7B190F496E00A35C82 /* UIKit.framework in Frameworks */, - 74180CEE190F560700A35C82 /* MessageDisplayFramework.framework in Frameworks */, 74180C77190F496E00A35C82 /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; @@ -269,7 +310,7 @@ 74180C7C190F496E00A35C82 /* MessageDisplayKitStoryBoradExample */ = { isa = PBXGroup; children = ( - 74180CEC190F55EB00A35C82 /* Vendor */, + F7E396BB1A4D4363003AB670 /* Vendor */, 74180C85190F496E00A35C82 /* AppDelegate.h */, 74180C86190F496E00A35C82 /* AppDelegate.m */, 74180C88190F496E00A35C82 /* Main_iPhone.storyboard */, @@ -278,6 +319,7 @@ 74180C8F190F496E00A35C82 /* ViewController.m */, 74180CE7190F54C100A35C82 /* XHDemoWeChatMessageTableViewController.h */, 74180CE8190F54C100A35C82 /* XHDemoWeChatMessageTableViewController.m */, + E4EE9B2E1B97614F00866998 /* Images.xcassets */, 74180C7D190F496E00A35C82 /* Supporting Files */, ); path = MessageDisplayKitStoryBoradExample; @@ -286,9 +328,35 @@ 74180C7D190F496E00A35C82 /* Supporting Files */ = { isa = PBXGroup; children = ( - 749019B7191D39850049AFF9 /* ExampleResources */, - 744FBDCE1915FFD500FB4A65 /* Default-568h@2x.png */, - 744FBDCF1915FFD500FB4A65 /* Default@2x.png */, + E4EE9AD31B97611700866998 /* emoticons */, + E4EE9AE51B97611800866998 /* SearchIcon@2x.png */, + E4EE9AE61B97611800866998 /* section0_emotion0@2x.png */, + E4EE9AE71B97611800866998 /* section0_emotion1@2x.png */, + E4EE9AE81B97611800866998 /* section0_emotion2@2x.png */, + E4EE9AE91B97611800866998 /* section0_emotion3@2x.png */, + E4EE9AEA1B97611800866998 /* section0_emotion4@2x.png */, + E4EE9AEB1B97611800866998 /* section0_emotion5@2x.png */, + E4EE9AEC1B97611800866998 /* section0_emotion6@2x.png */, + E4EE9AED1B97611800866998 /* section0_emotion7@2x.png */, + E4EE9AEE1B97611800866998 /* section0_emotion8@2x.png */, + E4EE9AEF1B97611800866998 /* section0_emotion9@2x.png */, + E4EE9AF01B97611800866998 /* section0_emotion10@2x.png */, + E4EE9AF11B97611800866998 /* section0_emotion11@2x.png */, + E4EE9AF21B97611800866998 /* section0_emotion12@2x.png */, + E4EE9AF31B97611800866998 /* section0_emotion13@2x.png */, + E4EE9AF41B97611800866998 /* section0_emotion14@2x.png */, + E4EE9AF51B97611800866998 /* section0_emotion15@2x.png */, + E4EE9AF61B97611800866998 /* sharemore_friendcard@2x.png */, + E4EE9AF71B97611800866998 /* sharemore_location@2x.png */, + E4EE9AF81B97611800866998 /* sharemore_myfav@2x.png */, + E4EE9AF91B97611800866998 /* sharemore_openapi@2x.png */, + E4EE9AFA1B97611800866998 /* sharemore_pic@2x.png */, + E4EE9AFB1B97611800866998 /* sharemore_video@2x.png */, + E4EE9AFC1B97611800866998 /* sharemore_videovoip@2x.png */, + E4EE9AFD1B97611800866998 /* sharemore_voiceinput@2x.png */, + E4EE9AFE1B97611800866998 /* sharemore_voipvoice@2x.png */, + E4EE9AFF1B97611800866998 /* sharemore_wxtalk@2x.png */, + E4EE9B001B97611800866998 /* TableViewBackgroundImage@2x.png */, 74180C7E190F496E00A35C82 /* MessageDisplayKitStoryBoradExample-Info.plist */, 74180C7F190F496E00A35C82 /* InfoPlist.strings */, 74180C82190F496E00A35C82 /* main.m */, @@ -315,102 +383,87 @@ name = "Supporting Files"; sourceTree = ""; }; - 74180CEC190F55EB00A35C82 /* Vendor */ = { + E4EE9AD31B97611700866998 /* emoticons */ = { isa = PBXGroup; children = ( - 74E5E9B4192210E20084BCFA /* Resources */, - 74180CED190F560700A35C82 /* MessageDisplayFramework.framework */, - ); - path = Vendor; + E4EE9AD41B97611700866998 /* emotion0.gif */, + E4EE9AD51B97611700866998 /* emotion1.gif */, + E4EE9AD61B97611700866998 /* emotion10.gif */, + E4EE9AD71B97611700866998 /* emotion11.gif */, + E4EE9AD81B97611700866998 /* emotion12.gif */, + E4EE9AD91B97611800866998 /* emotion13.gif */, + E4EE9ADA1B97611800866998 /* emotion14.gif */, + E4EE9ADB1B97611800866998 /* emotion15.gif */, + E4EE9ADC1B97611800866998 /* emotion16.gif */, + E4EE9ADD1B97611800866998 /* emotion2.gif */, + E4EE9ADE1B97611800866998 /* emotion3.gif */, + E4EE9ADF1B97611800866998 /* emotion4.gif */, + E4EE9AE01B97611800866998 /* emotion5.gif */, + E4EE9AE11B97611800866998 /* emotion6.gif */, + E4EE9AE21B97611800866998 /* emotion7.gif */, + E4EE9AE31B97611800866998 /* emotion8.gif */, + E4EE9AE41B97611800866998 /* emotion9.gif */, + ); + path = emoticons; sourceTree = ""; }; - 749019B7191D39850049AFF9 /* ExampleResources */ = { + F7B9E9F31A4D60440072F81B /* Resources */ = { isa = PBXGroup; children = ( - 749019B8191D39850049AFF9 /* avator@2x.png */, - 749019BB191D39850049AFF9 /* IMG_1555.MOV */, - 749019BC191D39850049AFF9 /* placeholderImage@2x.png */, - 749019BD191D39850049AFF9 /* TableViewBackgroundImage@2x.png */, + F7B9E9991A4D60440072F81B /* avator@2x.png */, + F7B9E9A61A4D60440072F81B /* MessageDisplayKitString.strings */, + F7B9E9A71A4D60440072F81B /* face@2x.png */, + F7B9E9A81A4D60440072F81B /* face_HL@2x.png */, + 7053E71C1B42F2C300DE808D /* keyboard@2x.png */, + 7053E71B1B42F2C300DE808D /* keyboard_HL@2x.png */, + F7B9E9A91A4D60440072F81B /* Fav_Cell_Loc@2x.png */, + F7B9E9AC1A4D60440072F81B /* input-bar-flat.png */, + F7B9E9AD1A4D60440072F81B /* input-bar-flat@2x.png */, + F7B9E9B21A4D60440072F81B /* MessageVideoPlay@2x.png */, + F7B9E9B41A4D60440072F81B /* msg_chat_voice_unread.png */, + F7B9E9B51A4D60440072F81B /* msg_chat_voice_unread@2x.png */, + F7B9E9B61A4D60440072F81B /* multiMedia@2x.png */, + F7B9E9B71A4D60440072F81B /* multiMedia_HL@2x.png */, + F7B9E9BA1A4D60440072F81B /* placeholderImage@2x.png */, + F7B9E9BB1A4D60440072F81B /* ReceiverVoiceNodePlaying000@2x.png */, + F7B9E9BC1A4D60440072F81B /* ReceiverVoiceNodePlaying001@2x.png */, + F7B9E9BD1A4D60440072F81B /* ReceiverVoiceNodePlaying002@2x.png */, + F7B9E9BE1A4D60440072F81B /* ReceiverVoiceNodePlaying003@2x.png */, + F7B9E9BF1A4D60440072F81B /* ReceiverVoiceNodePlaying@2x.png */, + F7B9E9C01A4D60440072F81B /* RecordCancel@2x.png */, + F7B9E9C11A4D60440072F81B /* RecordingBkg@2x.png */, + F7B9E9C21A4D60440072F81B /* RecordingSignal001@2x.png */, + F7B9E9C31A4D60440072F81B /* RecordingSignal002@2x.png */, + F7B9E9C41A4D60440072F81B /* RecordingSignal003@2x.png */, + F7B9E9C51A4D60440072F81B /* RecordingSignal004@2x.png */, + F7B9E9C61A4D60440072F81B /* RecordingSignal005@2x.png */, + F7B9E9C71A4D60440072F81B /* RecordingSignal006@2x.png */, + F7B9E9C81A4D60440072F81B /* RecordingSignal007@2x.png */, + F7B9E9C91A4D60440072F81B /* RecordingSignal008@2x.png */, + F7B9E9CB1A4D60440072F81B /* SECoreTextView.bundle */, + F7B9E9DC1A4D60440072F81B /* SenderVoiceNodePlaying000@2x.png */, + F7B9E9DD1A4D60440072F81B /* SenderVoiceNodePlaying001@2x.png */, + F7B9E9DE1A4D60440072F81B /* SenderVoiceNodePlaying002@2x.png */, + F7B9E9DF1A4D60440072F81B /* SenderVoiceNodePlaying003@2x.png */, + F7B9E9E01A4D60440072F81B /* SenderVoiceNodePlaying@2x.png */, + F7B9E9EB1A4D60440072F81B /* voice@2x.png */, + F7B9E9EC1A4D60440072F81B /* voice_HL@2x.png */, + F7B9E9ED1A4D60440072F81B /* VoiceBtn_Black@2x.png */, + F7B9E9EE1A4D60440072F81B /* VoiceBtn_BlackHL@2x.png */, + F7B9E9F01A4D60440072F81B /* weChatBubble_Receiving_Solid@2x.png */, + F7B9E9F21A4D60440072F81B /* weChatBubble_Sending_Solid@2x.png */, ); - name = ExampleResources; - path = ../../MessageDisplayExample/MessageDisplayExample/ExampleResources; + name = Resources; + path = ../../../../MessageDisplayKit/Resources; sourceTree = ""; }; - 74E5E9B4192210E20084BCFA /* Resources */ = { + F7E396BB1A4D4363003AB670 /* Vendor */ = { isa = PBXGroup; children = ( - 74E5E9B5192210E20084BCFA /* MessageDisplayKitString.strings */, - 74E5E9B7192210E20084BCFA /* face@2x.png */, - 74E5E9B8192210E20084BCFA /* face_HL@2x.png */, - 74E5E9B9192210E20084BCFA /* Fav_Cell_Loc@2x.png */, - 74E5E9BA192210E20084BCFA /* input-bar-background.png */, - 74E5E9BB192210E20084BCFA /* input-bar-background@2x.png */, - 74E5E9BC192210E20084BCFA /* input-bar-flat.png */, - 74E5E9BD192210E20084BCFA /* input-bar-flat@2x.png */, - 74E5E9BE192210E20084BCFA /* input-field-cover.png */, - 74E5E9BF192210E20084BCFA /* input-field-cover@2x.png */, - 74E5E9C0192210E20084BCFA /* keyborad@2x.png */, - 74E5E9C1192210E20084BCFA /* keyborad_HL@2x.png */, - 74E5E9C2192210E20084BCFA /* MessageVideoPlay@2x.png */, - 74E5E9C3192210E20084BCFA /* multiMedia@2x.png */, - 74E5E9C4192210E20084BCFA /* multiMedia_HL@2x.png */, - 74E5E9C5192210E20084BCFA /* ReceiverVoiceNodePlaying000@2x.png */, - 74E5E9C6192210E20084BCFA /* ReceiverVoiceNodePlaying001@2x.png */, - 74E5E9C7192210E20084BCFA /* ReceiverVoiceNodePlaying002@2x.png */, - 74E5E9C8192210E20084BCFA /* ReceiverVoiceNodePlaying003@2x.png */, - 74E5E9C9192210E20084BCFA /* ReceiverVoiceNodePlaying@2x.png */, - 74E5E9CA192210E20084BCFA /* RecordCancel@2x.png */, - 74E5E9CB192210E20084BCFA /* RecordingBkg@2x.png */, - 74E5E9CC192210E20084BCFA /* RecordingSignal001@2x.png */, - 74E5E9CD192210E20084BCFA /* RecordingSignal002@2x.png */, - 74E5E9CE192210E20084BCFA /* RecordingSignal003@2x.png */, - 74E5E9CF192210E20084BCFA /* RecordingSignal004@2x.png */, - 74E5E9D0192210E20084BCFA /* RecordingSignal005@2x.png */, - 74E5E9D1192210E20084BCFA /* RecordingSignal006@2x.png */, - 74E5E9D2192210E20084BCFA /* RecordingSignal007@2x.png */, - 74E5E9D3192210E20084BCFA /* RecordingSignal008@2x.png */, - 74E5E9D4192210E20084BCFA /* section0_emotion0@2x.png */, - 74E5E9D5192210E20084BCFA /* section0_emotion10@2x.png */, - 74E5E9D6192210E20084BCFA /* section0_emotion11@2x.png */, - 74E5E9D7192210E20084BCFA /* section0_emotion12@2x.png */, - 74E5E9D8192210E20084BCFA /* section0_emotion13@2x.png */, - 74E5E9D9192210E20084BCFA /* section0_emotion14@2x.png */, - 74E5E9DA192210E20084BCFA /* section0_emotion15@2x.png */, - 74E5E9DB192210E20084BCFA /* section0_emotion1@2x.png */, - 74E5E9DC192210E20084BCFA /* section0_emotion2@2x.png */, - 74E5E9DD192210E20084BCFA /* section0_emotion3@2x.png */, - 74E5E9DE192210E20084BCFA /* section0_emotion4@2x.png */, - 74E5E9DF192210E20084BCFA /* section0_emotion5@2x.png */, - 74E5E9E0192210E20084BCFA /* section0_emotion6@2x.png */, - 74E5E9E1192210E20084BCFA /* section0_emotion7@2x.png */, - 74E5E9E2192210E20084BCFA /* section0_emotion8@2x.png */, - 74E5E9E3192210E20084BCFA /* section0_emotion9@2x.png */, - 74E5E9E4192210E20084BCFA /* SenderVoiceNodePlaying000@2x.png */, - 74E5E9E5192210E20084BCFA /* SenderVoiceNodePlaying001@2x.png */, - 74E5E9E6192210E20084BCFA /* SenderVoiceNodePlaying002@2x.png */, - 74E5E9E7192210E20084BCFA /* SenderVoiceNodePlaying003@2x.png */, - 74E5E9E8192210E20084BCFA /* SenderVoiceNodePlaying@2x.png */, - 74E5E9E9192210E20084BCFA /* sharemore_friendcard@2x.png */, - 74E5E9EA192210E20084BCFA /* sharemore_location@2x.png */, - 74E5E9EB192210E20084BCFA /* sharemore_myfav@2x.png */, - 74E5E9EC192210E20084BCFA /* sharemore_openapi@2x.png */, - 74E5E9ED192210E20084BCFA /* sharemore_pic@2x.png */, - 74E5E9EE192210E20084BCFA /* sharemore_video@2x.png */, - 74E5E9EF192210E20084BCFA /* sharemore_videovoip@2x.png */, - 74E5E9F0192210E20084BCFA /* sharemore_voiceinput@2x.png */, - 74E5E9F1192210E20084BCFA /* sharemore_voipvoice@2x.png */, - 74E5E9F2192210E20084BCFA /* sharemore_wxtalk@2x.png */, - 74E5E9F3192210E20084BCFA /* voice@2x.png */, - 74E5E9F4192210E20084BCFA /* voice_HL@2x.png */, - 74E5E9F5192210E20084BCFA /* VoiceBtn_Black@2x.png */, - 74E5E9F6192210E20084BCFA /* VoiceBtn_BlackHL@2x.png */, - 74E5E9F7192210E20084BCFA /* weChatBubble_Receiving_Cavern@2x.png */, - 74E5E9F8192210E20084BCFA /* weChatBubble_Receiving_Solid@2x.png */, - 74E5E9F9192210E20084BCFA /* weChatBubble_Sending_Cavern@2x.png */, - 74E5E9FA192210E20084BCFA /* weChatBubble_Sending_Solid@2x.png */, + F7E396BC1A4D4363003AB670 /* MessageDisplayKit.framework */, + F7B9E9F31A4D60440072F81B /* Resources */, ); - name = Resources; - path = ../../../../MessageDisplayKit/Resources; + path = Vendor; sourceTree = ""; }; /* End PBXGroup section */ @@ -423,6 +476,7 @@ 74180C6F190F496E00A35C82 /* Sources */, 74180C70190F496E00A35C82 /* Frameworks */, 74180C71190F496E00A35C82 /* Resources */, + F7220AEB1A52694B00DBDEE7 /* Embed Frameworks */, ); buildRules = ( ); @@ -490,84 +544,97 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( - 74E5EA18192210E20084BCFA /* RecordingSignal007@2x.png in Resources */, - 74E5EA1F192210E20084BCFA /* section0_emotion14@2x.png in Resources */, - 74E5EA3C192210E20084BCFA /* VoiceBtn_BlackHL@2x.png in Resources */, - 74E5EA16192210E20084BCFA /* RecordingSignal005@2x.png in Resources */, - 74E5EA3A192210E20084BCFA /* voice_HL@2x.png in Resources */, + F7B9EA101A4D60440072F81B /* msg_chat_voice_unread@2x.png in Resources */, + E4EE9B251B97611800866998 /* sharemore_myfav@2x.png in Resources */, + F7B9EA221A4D60440072F81B /* RecordingSignal006@2x.png in Resources */, + F7B9EA191A4D60440072F81B /* ReceiverVoiceNodePlaying003@2x.png in Resources */, + E4EE9B121B97611800866998 /* SearchIcon@2x.png in Resources */, + E4EE9B1B1B97611800866998 /* section0_emotion8@2x.png in Resources */, + F7B9EA1F1A4D60440072F81B /* RecordingSignal003@2x.png in Resources */, + E4EE9B1E1B97611800866998 /* section0_emotion11@2x.png in Resources */, + E4EE9B181B97611800866998 /* section0_emotion5@2x.png in Resources */, 74180C8D190F496E00A35C82 /* Main_iPad.storyboard in Resources */, - 74E5EA1C192210E20084BCFA /* section0_emotion11@2x.png in Resources */, - 74E5E9FD192210E20084BCFA /* face@2x.png in Resources */, - 74E5EA22192210E20084BCFA /* section0_emotion2@2x.png in Resources */, - 74E5E9FC192210E20084BCFA /* MessageDisplayKitString.strings in Resources */, - 744FBDD01915FFD500FB4A65 /* Default-568h@2x.png in Resources */, - 749019C3191D39850049AFF9 /* TableViewBackgroundImage@2x.png in Resources */, - 74E5EA26192210E20084BCFA /* section0_emotion6@2x.png in Resources */, - 74E5EA17192210E20084BCFA /* RecordingSignal006@2x.png in Resources */, - 74E5EA2A192210E20084BCFA /* SenderVoiceNodePlaying000@2x.png in Resources */, - 74E5EA0A192210E20084BCFA /* multiMedia_HL@2x.png in Resources */, - 74E5EA21192210E20084BCFA /* section0_emotion1@2x.png in Resources */, - 74E5EA01192210E20084BCFA /* input-bar-background@2x.png in Resources */, - 74E5EA32192210E20084BCFA /* sharemore_openapi@2x.png in Resources */, - 74E5EA15192210E20084BCFA /* RecordingSignal004@2x.png in Resources */, - 74E5EA0E192210E20084BCFA /* ReceiverVoiceNodePlaying003@2x.png in Resources */, - 74E5EA08192210E20084BCFA /* MessageVideoPlay@2x.png in Resources */, + F7B9EA1C1A4D60440072F81B /* RecordingBkg@2x.png in Resources */, + F7B9EA4B1A4D60440072F81B /* weChatBubble_Receiving_Solid@2x.png in Resources */, + E4EE9B011B97611800866998 /* emotion0.gif in Resources */, + F7B9EA031A4D60440072F81B /* face_HL@2x.png in Resources */, + E4EE9B2A1B97611800866998 /* sharemore_voiceinput@2x.png in Resources */, + E4EE9B0E1B97611800866998 /* emotion6.gif in Resources */, + E4EE9B2F1B97614F00866998 /* Images.xcassets in Resources */, + F7B9EA081A4D60440072F81B /* input-bar-flat@2x.png in Resources */, + F7B9EA161A4D60440072F81B /* ReceiverVoiceNodePlaying000@2x.png in Resources */, + E4EE9B1C1B97611800866998 /* section0_emotion9@2x.png in Resources */, + E4EE9B161B97611800866998 /* section0_emotion3@2x.png in Resources */, 74180C8A190F496E00A35C82 /* Main_iPhone.storyboard in Resources */, - 74E5EA11192210E20084BCFA /* RecordingBkg@2x.png in Resources */, - 74E5EA1B192210E20084BCFA /* section0_emotion10@2x.png in Resources */, - 74E5EA2B192210E20084BCFA /* SenderVoiceNodePlaying001@2x.png in Resources */, - 74E5EA24192210E20084BCFA /* section0_emotion4@2x.png in Resources */, - 74E5EA1E192210E20084BCFA /* section0_emotion13@2x.png in Resources */, - 74E5EA23192210E20084BCFA /* section0_emotion3@2x.png in Resources */, - 74E5EA09192210E20084BCFA /* multiMedia@2x.png in Resources */, - 74E5EA19192210E20084BCFA /* RecordingSignal008@2x.png in Resources */, - 74E5EA35192210E20084BCFA /* sharemore_videovoip@2x.png in Resources */, - 74E5EA2D192210E20084BCFA /* SenderVoiceNodePlaying003@2x.png in Resources */, - 74E5E9FE192210E20084BCFA /* face_HL@2x.png in Resources */, - 74E5EA06192210E20084BCFA /* keyborad@2x.png in Resources */, - 74E5EA3F192210E20084BCFA /* weChatBubble_Sending_Cavern@2x.png in Resources */, - 74E5EA1D192210E20084BCFA /* section0_emotion12@2x.png in Resources */, - 74E5EA27192210E20084BCFA /* section0_emotion7@2x.png in Resources */, - 74E5EA2F192210E20084BCFA /* sharemore_friendcard@2x.png in Resources */, - 74E5EA0D192210E20084BCFA /* ReceiverVoiceNodePlaying002@2x.png in Resources */, - 74E5EA14192210E20084BCFA /* RecordingSignal003@2x.png in Resources */, - 74E5EA20192210E20084BCFA /* section0_emotion15@2x.png in Resources */, - 74E5EA31192210E20084BCFA /* sharemore_myfav@2x.png in Resources */, - 74E5EA3B192210E20084BCFA /* VoiceBtn_Black@2x.png in Resources */, - 74E5EA37192210E20084BCFA /* sharemore_voipvoice@2x.png in Resources */, - 74E5EA07192210E20084BCFA /* keyborad_HL@2x.png in Resources */, - 74E5E9FF192210E20084BCFA /* Fav_Cell_Loc@2x.png in Resources */, - 74E5EA29192210E20084BCFA /* section0_emotion9@2x.png in Resources */, - 74E5EA03192210E20084BCFA /* input-bar-flat@2x.png in Resources */, - 74E5EA2C192210E20084BCFA /* SenderVoiceNodePlaying002@2x.png in Resources */, - 74E5EA33192210E20084BCFA /* sharemore_pic@2x.png in Resources */, - 74E5EA0F192210E20084BCFA /* ReceiverVoiceNodePlaying@2x.png in Resources */, - 74E5EA12192210E20084BCFA /* RecordingSignal001@2x.png in Resources */, + F7B9E9F61A4D60440072F81B /* avator@2x.png in Resources */, + F7B9EA231A4D60440072F81B /* RecordingSignal007@2x.png in Resources */, + F7B9EA4D1A4D60440072F81B /* weChatBubble_Sending_Solid@2x.png in Resources */, + F7B9EA1A1A4D60440072F81B /* ReceiverVoiceNodePlaying@2x.png in Resources */, + E4EE9B021B97611800866998 /* emotion1.gif in Resources */, + E4EE9B111B97611800866998 /* emotion9.gif in Resources */, + E4EE9B0F1B97611800866998 /* emotion7.gif in Resources */, + E4EE9B071B97611800866998 /* emotion14.gif in Resources */, + F7B9EA1D1A4D60440072F81B /* RecordingSignal001@2x.png in Resources */, + E4EE9B291B97611800866998 /* sharemore_videovoip@2x.png in Resources */, + F7B9EA121A4D60440072F81B /* multiMedia_HL@2x.png in Resources */, 74180C81190F496E00A35C82 /* InfoPlist.strings in Resources */, - 74E5EA25192210E20084BCFA /* section0_emotion5@2x.png in Resources */, - 74E5EA0C192210E20084BCFA /* ReceiverVoiceNodePlaying001@2x.png in Resources */, - 74E5EA10192210E20084BCFA /* RecordCancel@2x.png in Resources */, - 74E5EA00192210E20084BCFA /* input-bar-background.png in Resources */, - 74E5EA28192210E20084BCFA /* section0_emotion8@2x.png in Resources */, - 74E5EA36192210E20084BCFA /* sharemore_voiceinput@2x.png in Resources */, - 74E5EA04192210E20084BCFA /* input-field-cover.png in Resources */, - 74E5EA30192210E20084BCFA /* sharemore_location@2x.png in Resources */, - 74E5EA38192210E20084BCFA /* sharemore_wxtalk@2x.png in Resources */, - 74E5EA3D192210E20084BCFA /* weChatBubble_Receiving_Cavern@2x.png in Resources */, - 74E5EA39192210E20084BCFA /* voice@2x.png in Resources */, - 74E5EA02192210E20084BCFA /* input-bar-flat.png in Resources */, - 74E5EA3E192210E20084BCFA /* weChatBubble_Receiving_Solid@2x.png in Resources */, - 74E5EA40192210E20084BCFA /* weChatBubble_Sending_Solid@2x.png in Resources */, - 749019C2191D39850049AFF9 /* placeholderImage@2x.png in Resources */, - 744FBDD11915FFD500FB4A65 /* Default@2x.png in Resources */, - 749019BE191D39850049AFF9 /* avator@2x.png in Resources */, - 74E5EA13192210E20084BCFA /* RecordingSignal002@2x.png in Resources */, - 74E5EA2E192210E20084BCFA /* SenderVoiceNodePlaying@2x.png in Resources */, - 74E5EA34192210E20084BCFA /* sharemore_video@2x.png in Resources */, - 749019C1191D39850049AFF9 /* IMG_1555.MOV in Resources */, - 74E5EA0B192210E20084BCFA /* ReceiverVoiceNodePlaying000@2x.png in Resources */, - 74E5EA1A192210E20084BCFA /* section0_emotion0@2x.png in Resources */, - 74E5EA05192210E20084BCFA /* input-field-cover@2x.png in Resources */, + F7B9EA381A4D60440072F81B /* SenderVoiceNodePlaying001@2x.png in Resources */, + F7B9EA461A4D60440072F81B /* voice@2x.png in Resources */, + F7B9EA261A4D60440072F81B /* SECoreTextView.bundle in Resources */, + E4EE9B141B97611800866998 /* section0_emotion1@2x.png in Resources */, + F7B9EA021A4D60440072F81B /* face@2x.png in Resources */, + F7B9EA011A4D60440072F81B /* MessageDisplayKitString.strings in Resources */, + F7B9EA041A4D60440072F81B /* Fav_Cell_Loc@2x.png in Resources */, + E4EE9B151B97611800866998 /* section0_emotion2@2x.png in Resources */, + 7053E71E1B42F2C300DE808D /* keyboard@2x.png in Resources */, + F7B9EA391A4D60440072F81B /* SenderVoiceNodePlaying002@2x.png in Resources */, + E4EE9B171B97611800866998 /* section0_emotion4@2x.png in Resources */, + F7B9EA171A4D60440072F81B /* ReceiverVoiceNodePlaying001@2x.png in Resources */, + E4EE9B0D1B97611800866998 /* emotion5.gif in Resources */, + E4EE9B101B97611800866998 /* emotion8.gif in Resources */, + E4EE9B1F1B97611800866998 /* section0_emotion12@2x.png in Resources */, + E4EE9B2B1B97611800866998 /* sharemore_voipvoice@2x.png in Resources */, + E4EE9B131B97611800866998 /* section0_emotion0@2x.png in Resources */, + F7B9EA481A4D60440072F81B /* VoiceBtn_Black@2x.png in Resources */, + E4EE9B231B97611800866998 /* sharemore_friendcard@2x.png in Resources */, + F7B9EA1E1A4D60440072F81B /* RecordingSignal002@2x.png in Resources */, + E4EE9B1D1B97611800866998 /* section0_emotion10@2x.png in Resources */, + F7B9EA211A4D60440072F81B /* RecordingSignal005@2x.png in Resources */, + E4EE9B091B97611800866998 /* emotion16.gif in Resources */, + E4EE9B041B97611800866998 /* emotion11.gif in Resources */, + F7B9EA0F1A4D60440072F81B /* msg_chat_voice_unread.png in Resources */, + E4EE9B191B97611800866998 /* section0_emotion6@2x.png in Resources */, + E4EE9B1A1B97611800866998 /* section0_emotion7@2x.png in Resources */, + F7B9EA111A4D60440072F81B /* multiMedia@2x.png in Resources */, + E4EE9B211B97611800866998 /* section0_emotion14@2x.png in Resources */, + F7B9EA0D1A4D60440072F81B /* MessageVideoPlay@2x.png in Resources */, + E4EE9B0B1B97611800866998 /* emotion3.gif in Resources */, + E4EE9B201B97611800866998 /* section0_emotion13@2x.png in Resources */, + E4EE9B2C1B97611800866998 /* sharemore_wxtalk@2x.png in Resources */, + E4EE9B0C1B97611800866998 /* emotion4.gif in Resources */, + E4EE9B281B97611800866998 /* sharemore_video@2x.png in Resources */, + F7B9EA491A4D60440072F81B /* VoiceBtn_BlackHL@2x.png in Resources */, + E4EE9B221B97611800866998 /* section0_emotion15@2x.png in Resources */, + E4EE9B051B97611800866998 /* emotion12.gif in Resources */, + E4EE9B261B97611800866998 /* sharemore_openapi@2x.png in Resources */, + F7B9EA3A1A4D60440072F81B /* SenderVoiceNodePlaying003@2x.png in Resources */, + E4EE9B241B97611800866998 /* sharemore_location@2x.png in Resources */, + F7B9EA151A4D60440072F81B /* placeholderImage@2x.png in Resources */, + E4EE9B271B97611800866998 /* sharemore_pic@2x.png in Resources */, + F7B9EA471A4D60440072F81B /* voice_HL@2x.png in Resources */, + E4EE9B0A1B97611800866998 /* emotion2.gif in Resources */, + F7B9EA181A4D60440072F81B /* ReceiverVoiceNodePlaying002@2x.png in Resources */, + F7B9EA071A4D60440072F81B /* input-bar-flat.png in Resources */, + E4EE9B2D1B97611800866998 /* TableViewBackgroundImage@2x.png in Resources */, + F7B9EA241A4D60440072F81B /* RecordingSignal008@2x.png in Resources */, + F7B9EA201A4D60440072F81B /* RecordingSignal004@2x.png in Resources */, + E4EE9B061B97611800866998 /* emotion13.gif in Resources */, + F7B9EA1B1A4D60440072F81B /* RecordCancel@2x.png in Resources */, + F7B9EA371A4D60440072F81B /* SenderVoiceNodePlaying000@2x.png in Resources */, + E4EE9B031B97611800866998 /* emotion10.gif in Resources */, + E4EE9B081B97611800866998 /* emotion15.gif in Resources */, + 7053E71D1B42F2C300DE808D /* keyboard_HL@2x.png in Resources */, + F7B9EA3B1A4D60440072F81B /* SenderVoiceNodePlaying@2x.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -644,11 +711,11 @@ name = InfoPlist.strings; sourceTree = ""; }; - 74E5E9B5192210E20084BCFA /* MessageDisplayKitString.strings */ = { + F7B9E9A61A4D60440072F81B /* MessageDisplayKitString.strings */ = { isa = PBXVariantGroup; children = ( - 74E5E9B6192210E20084BCFA /* en */, - 74E5E9FB192210E20084BCFA /* zh-Hans */, + F7B9E9A41A4D60440072F81B /* en */, + F7B9E9A51A4D60440072F81B /* zh-Hans */, ); name = MessageDisplayKitString.strings; sourceTree = ""; @@ -688,7 +755,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.1; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; @@ -721,7 +788,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 7.1; + IPHONEOS_DEPLOYMENT_TARGET = 6.0; SDKROOT = iphoneos; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; @@ -733,11 +800,15 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - FRAMEWORK_SEARCH_PATHS = "$(inherited)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/MessageDisplayKitStoryBoradExample/Vendor", + ); GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "MessageDisplayKitStoryBoradExample/MessageDisplayKitStoryBoradExample-Prefix.pch"; INFOPLIST_FILE = "MessageDisplayKitStoryBoradExample/MessageDisplayKitStoryBoradExample-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 6.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( "-all_load", "-ObjC", @@ -752,11 +823,15 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; - FRAMEWORK_SEARCH_PATHS = "$(inherited)"; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/MessageDisplayKitStoryBoradExample/Vendor", + ); GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "MessageDisplayKitStoryBoradExample/MessageDisplayKitStoryBoradExample-Prefix.pch"; INFOPLIST_FILE = "MessageDisplayKitStoryBoradExample/MessageDisplayKitStoryBoradExample-Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 6.0; + LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; OTHER_LDFLAGS = ( "-all_load", "-ObjC", diff --git a/Example/MessageDisplayKitStoryBoradExample/MessageDisplayKitStoryBoradExample/AppDelegate.h b/Example/MessageDisplayKitStoryBoradExample/MessageDisplayKitStoryBoradExample/AppDelegate.h index 20d49bc..c6174ab 100644 --- a/Example/MessageDisplayKitStoryBoradExample/MessageDisplayKitStoryBoradExample/AppDelegate.h +++ b/Example/MessageDisplayKitStoryBoradExample/MessageDisplayKitStoryBoradExample/AppDelegate.h @@ -2,8 +2,8 @@ // AppDelegate.h // MessageDisplayKitStoryBoradExample // -// Created by qtone-1 on 14-4-29. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-29. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/Example/MessageDisplayKitStoryBoradExample/MessageDisplayKitStoryBoradExample/AppDelegate.m b/Example/MessageDisplayKitStoryBoradExample/MessageDisplayKitStoryBoradExample/AppDelegate.m index aab7c82..f2fd6c6 100644 --- a/Example/MessageDisplayKitStoryBoradExample/MessageDisplayKitStoryBoradExample/AppDelegate.m +++ b/Example/MessageDisplayKitStoryBoradExample/MessageDisplayKitStoryBoradExample/AppDelegate.m @@ -2,8 +2,8 @@ // AppDelegate.m // MessageDisplayKitStoryBoradExample // -// Created by qtone-1 on 14-4-29. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-29. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "AppDelegate.h" diff --git a/Example/MessageDisplayKitStoryBoradExample/MessageDisplayKitStoryBoradExample/Base.lproj/Main_iPad.storyboard b/Example/MessageDisplayKitStoryBoradExample/MessageDisplayKitStoryBoradExample/Base.lproj/Main_iPad.storyboard index 38d8868..77ead38 100644 --- a/Example/MessageDisplayKitStoryBoradExample/MessageDisplayKitStoryBoradExample/Base.lproj/Main_iPad.storyboard +++ b/Example/MessageDisplayKitStoryBoradExample/MessageDisplayKitStoryBoradExample/Base.lproj/Main_iPad.storyboard @@ -1,8 +1,8 @@ - + - - + + @@ -19,7 +19,6 @@ - + - - - - - - - + + + + + + + + - - + + - + - + + + - + + + + + diff --git a/MessageDisplayKit/Classes/Vendor/MultiSelectTableViewController/UIView+Convenience.h b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/MultiSelectTableViewController/UIView+Convenience.h similarity index 100% rename from MessageDisplayKit/Classes/Vendor/MultiSelectTableViewController/UIView+Convenience.h rename to Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/MultiSelectTableViewController/UIView+Convenience.h diff --git a/MessageDisplayKit/Classes/Vendor/MultiSelectTableViewController/UIView+Convenience.m b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/MultiSelectTableViewController/UIView+Convenience.m similarity index 100% rename from MessageDisplayKit/Classes/Vendor/MultiSelectTableViewController/UIView+Convenience.m rename to Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/MultiSelectTableViewController/UIView+Convenience.m diff --git a/MessageDisplayKit/Classes/Vendor/XHImageViewer/XHImageViewer.h b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHImageViewer/XHImageViewer.h similarity index 68% rename from MessageDisplayKit/Classes/Vendor/XHImageViewer/XHImageViewer.h rename to Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHImageViewer/XHImageViewer.h index d9bc0d5..94632b6 100644 --- a/MessageDisplayKit/Classes/Vendor/XHImageViewer/XHImageViewer.h +++ b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHImageViewer/XHImageViewer.h @@ -3,7 +3,7 @@ // XHImageViewer // // Created by 曾 宪华 on 14-2-17. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Vendor/XHImageViewer/XHImageViewer.m b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHImageViewer/XHImageViewer.m similarity index 97% rename from MessageDisplayKit/Classes/Vendor/XHImageViewer/XHImageViewer.m rename to Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHImageViewer/XHImageViewer.m index 0e11e65..e3396e3 100644 --- a/MessageDisplayKit/Classes/Vendor/XHImageViewer/XHImageViewer.m +++ b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHImageViewer/XHImageViewer.m @@ -3,7 +3,7 @@ // XHImageViewer // // Created by 曾 宪华 on 14-2-17. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHImageViewer.h" diff --git a/MessageDisplayKit/Classes/Vendor/XHImageViewer/XHViewState.h b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHImageViewer/XHViewState.h similarity index 64% rename from MessageDisplayKit/Classes/Vendor/XHImageViewer/XHViewState.h rename to Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHImageViewer/XHViewState.h index e5028f4..f90d5e2 100644 --- a/MessageDisplayKit/Classes/Vendor/XHImageViewer/XHViewState.h +++ b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHImageViewer/XHViewState.h @@ -3,7 +3,7 @@ // XHImageViewer // // Created by 曾 宪华 on 14-2-17. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Vendor/XHImageViewer/XHViewState.m b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHImageViewer/XHViewState.m similarity index 76% rename from MessageDisplayKit/Classes/Vendor/XHImageViewer/XHViewState.m rename to Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHImageViewer/XHViewState.m index 5fb3885..9b0826c 100644 --- a/MessageDisplayKit/Classes/Vendor/XHImageViewer/XHViewState.m +++ b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHImageViewer/XHViewState.m @@ -3,7 +3,7 @@ // XHImageViewer // // Created by 曾 宪华 on 14-2-17. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHViewState.h" diff --git a/MessageDisplayKit/Classes/Vendor/XHImageViewer/XHZoomingImageView.h b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHImageViewer/XHZoomingImageView.h similarity index 59% rename from MessageDisplayKit/Classes/Vendor/XHImageViewer/XHZoomingImageView.h rename to Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHImageViewer/XHZoomingImageView.h index a32bd3b..5d714d0 100644 --- a/MessageDisplayKit/Classes/Vendor/XHImageViewer/XHZoomingImageView.h +++ b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHImageViewer/XHZoomingImageView.h @@ -3,7 +3,7 @@ // XHImageViewer // // Created by 曾 宪华 on 14-2-17. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Vendor/XHImageViewer/XHZoomingImageView.m b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHImageViewer/XHZoomingImageView.m similarity index 94% rename from MessageDisplayKit/Classes/Vendor/XHImageViewer/XHZoomingImageView.m rename to Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHImageViewer/XHZoomingImageView.m index dbb9a47..754b099 100644 --- a/MessageDisplayKit/Classes/Vendor/XHImageViewer/XHZoomingImageView.m +++ b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHImageViewer/XHZoomingImageView.m @@ -3,7 +3,7 @@ // XHImageViewer // // Created by 曾 宪华 on 14-2-17. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHZoomingImageView.h" diff --git a/MessageDisplayKit/Classes/Vendor/XHPathCover/XHPathCover.h b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHPathCover/XHPathCover.h similarity index 89% rename from MessageDisplayKit/Classes/Vendor/XHPathCover/XHPathCover.h rename to Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHPathCover/XHPathCover.h index dcfcd1c..bdf5e81 100644 --- a/MessageDisplayKit/Classes/Vendor/XHPathCover/XHPathCover.h +++ b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHPathCover/XHPathCover.h @@ -3,7 +3,7 @@ // XHPathCover // // Created by 曾 宪华 on 14-2-7. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Vendor/XHPathCover/XHPathCover.m b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHPathCover/XHPathCover.m similarity index 98% rename from MessageDisplayKit/Classes/Vendor/XHPathCover/XHPathCover.m rename to Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHPathCover/XHPathCover.m index 090f30e..b6d2032 100644 --- a/MessageDisplayKit/Classes/Vendor/XHPathCover/XHPathCover.m +++ b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHPathCover/XHPathCover.m @@ -3,7 +3,7 @@ // XHPathCover // // Created by 曾 宪华 on 14-2-7. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHPathCover.h" diff --git a/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHPathCover/XHSoundManager.h b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHPathCover/XHSoundManager.h new file mode 100644 index 0000000..26a068c --- /dev/null +++ b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHPathCover/XHSoundManager.h @@ -0,0 +1,17 @@ +// +// XHSoundManager.h +// XHPathCover +// +// Created by 曾 宪华 on 14-2-7. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import + +@interface XHSoundManager : NSObject + ++ (instancetype)sharedInstance; + +- (void)playRefreshSound; + +@end diff --git a/MessageDisplayKit/Classes/Vendor/XHPathCover/XHSoundManager.m b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHPathCover/XHSoundManager.m similarity index 76% rename from MessageDisplayKit/Classes/Vendor/XHPathCover/XHSoundManager.m rename to Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHPathCover/XHSoundManager.m index a21a400..355c152 100644 --- a/MessageDisplayKit/Classes/Vendor/XHPathCover/XHSoundManager.m +++ b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHPathCover/XHSoundManager.m @@ -3,7 +3,7 @@ // XHPathCover // // Created by 曾 宪华 on 14-2-7. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHSoundManager.h" diff --git a/MessageDisplayKit/Classes/Vendor/XHPathCover/XHWaterDropRefresh.h b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHPathCover/XHWaterDropRefresh.h similarity index 73% rename from MessageDisplayKit/Classes/Vendor/XHPathCover/XHWaterDropRefresh.h rename to Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHPathCover/XHWaterDropRefresh.h index 14282d5..367f079 100644 --- a/MessageDisplayKit/Classes/Vendor/XHPathCover/XHWaterDropRefresh.h +++ b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHPathCover/XHWaterDropRefresh.h @@ -3,7 +3,7 @@ // XHPathCover // // Created by 曾 宪华 on 14-2-7. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Vendor/XHPathCover/XHWaterDropRefresh.m b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHPathCover/XHWaterDropRefresh.m similarity index 96% rename from MessageDisplayKit/Classes/Vendor/XHPathCover/XHWaterDropRefresh.m rename to Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHPathCover/XHWaterDropRefresh.m index 124fdf5..ff7d9b1 100644 --- a/MessageDisplayKit/Classes/Vendor/XHPathCover/XHWaterDropRefresh.m +++ b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHPathCover/XHWaterDropRefresh.m @@ -3,7 +3,7 @@ // XHPathCover // // Created by 曾 宪华 on 14-2-7. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHWaterDropRefresh.h" diff --git a/MessageDisplayKit/Classes/Views/RefreshViews/XHLoadMoreView.h b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHRefreshControl/XHLoadMoreView.h similarity index 56% rename from MessageDisplayKit/Classes/Views/RefreshViews/XHLoadMoreView.h rename to Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHRefreshControl/XHLoadMoreView.h index 9fdb2dd..65b1070 100644 --- a/MessageDisplayKit/Classes/Views/RefreshViews/XHLoadMoreView.h +++ b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHRefreshControl/XHLoadMoreView.h @@ -3,7 +3,7 @@ // MessageDisplayExample // // Created by 曾 宪华 on 14-6-6. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Views/RefreshViews/XHLoadMoreView.m b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHRefreshControl/XHLoadMoreView.m similarity index 91% rename from MessageDisplayKit/Classes/Views/RefreshViews/XHLoadMoreView.m rename to Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHRefreshControl/XHLoadMoreView.m index 5617e4f..878fba4 100644 --- a/MessageDisplayKit/Classes/Views/RefreshViews/XHLoadMoreView.m +++ b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHRefreshControl/XHLoadMoreView.m @@ -3,7 +3,7 @@ // MessageDisplayExample // // Created by 曾 宪华 on 14-6-6. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHLoadMoreView.h" diff --git a/MessageDisplayKit/Classes/Views/RefreshViews/XHRefreshCircleView.h b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHRefreshControl/XHRefreshCircleView.h similarity index 77% rename from MessageDisplayKit/Classes/Views/RefreshViews/XHRefreshCircleView.h rename to Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHRefreshControl/XHRefreshCircleView.h index 748f238..ff7f598 100644 --- a/MessageDisplayKit/Classes/Views/RefreshViews/XHRefreshCircleView.h +++ b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHRefreshControl/XHRefreshCircleView.h @@ -3,7 +3,7 @@ // MessageDisplayExample // // Created by 曾 宪华 on 14-6-6. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Views/RefreshViews/XHRefreshCircleView.m b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHRefreshControl/XHRefreshCircleView.m similarity index 88% rename from MessageDisplayKit/Classes/Views/RefreshViews/XHRefreshCircleView.m rename to Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHRefreshControl/XHRefreshCircleView.m index 63ec354..db3cb42 100644 --- a/MessageDisplayKit/Classes/Views/RefreshViews/XHRefreshCircleView.m +++ b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHRefreshControl/XHRefreshCircleView.m @@ -3,7 +3,7 @@ // MessageDisplayExample // // Created by 曾 宪华 on 14-6-6. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHRefreshCircleView.h" diff --git a/MessageDisplayKit/Classes/Views/RefreshViews/XHRefreshControl.h b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHRefreshControl/XHRefreshControl.h similarity index 91% rename from MessageDisplayKit/Classes/Views/RefreshViews/XHRefreshControl.h rename to Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHRefreshControl/XHRefreshControl.h index 1a17be4..4eaf497 100644 --- a/MessageDisplayKit/Classes/Views/RefreshViews/XHRefreshControl.h +++ b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHRefreshControl/XHRefreshControl.h @@ -3,10 +3,11 @@ // MessageDisplayExample // // Created by 曾 宪华 on 14-6-6. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import +#import // 需要大量的delegate用于外部做定制 // 必须实现的delegate diff --git a/MessageDisplayKit/Classes/Views/RefreshViews/XHRefreshControl.m b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHRefreshControl/XHRefreshControl.m similarity index 98% rename from MessageDisplayKit/Classes/Views/RefreshViews/XHRefreshControl.m rename to Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHRefreshControl/XHRefreshControl.m index 384b1f8..3141062 100644 --- a/MessageDisplayKit/Classes/Views/RefreshViews/XHRefreshControl.m +++ b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHRefreshControl/XHRefreshControl.m @@ -3,7 +3,7 @@ // MessageDisplayExample // // Created by 曾 宪华 on 14-6-6. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHRefreshControl.h" diff --git a/MessageDisplayKit/Classes/Views/RefreshViews/XHRefreshView.h b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHRefreshControl/XHRefreshView.h similarity index 59% rename from MessageDisplayKit/Classes/Views/RefreshViews/XHRefreshView.h rename to Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHRefreshControl/XHRefreshView.h index 3c625b6..1fb4814 100644 --- a/MessageDisplayKit/Classes/Views/RefreshViews/XHRefreshView.h +++ b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHRefreshControl/XHRefreshView.h @@ -3,7 +3,7 @@ // MessageDisplayExample // // Created by 曾 宪华 on 14-6-6. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Views/RefreshViews/XHRefreshView.m b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHRefreshControl/XHRefreshView.m similarity index 88% rename from MessageDisplayKit/Classes/Views/RefreshViews/XHRefreshView.m rename to Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHRefreshControl/XHRefreshView.m index 101b258..dc0e1f8 100644 --- a/MessageDisplayKit/Classes/Views/RefreshViews/XHRefreshView.m +++ b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/Vendor/XHRefreshControl/XHRefreshView.m @@ -3,7 +3,7 @@ // MessageDisplayExample // // Created by 曾 宪华 on 14-6-6. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHRefreshView.h" diff --git a/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/main.m b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/main.m new file mode 100644 index 0000000..89b744d --- /dev/null +++ b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExample/main.m @@ -0,0 +1,16 @@ +// +// main.m +// MessageDisplayKitWeChatExample +// +// Created by HUAJIE on 14/12/26. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import +#import "AppDelegate.h" + +int main(int argc, char * argv[]) { + @autoreleasepool { + return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); + } +} diff --git a/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExampleTests/Info.plist b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExampleTests/Info.plist new file mode 100644 index 0000000..19e90a2 --- /dev/null +++ b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExampleTests/Info.plist @@ -0,0 +1,24 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + com.HUAJIE.$(PRODUCT_NAME:rfc1034identifier) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExampleTests/MessageDisplayKitWeChatExampleTests.m b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExampleTests/MessageDisplayKitWeChatExampleTests.m new file mode 100644 index 0000000..b9cba07 --- /dev/null +++ b/Example/MessageDisplayKitWeChatExample/MessageDisplayKitWeChatExampleTests/MessageDisplayKitWeChatExampleTests.m @@ -0,0 +1,40 @@ +// +// MessageDisplayKitWeChatExampleTests.m +// MessageDisplayKitWeChatExampleTests +// +// Created by HUAJIE on 14/12/26. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import +#import + +@interface MessageDisplayKitWeChatExampleTests : XCTestCase + +@end + +@implementation MessageDisplayKitWeChatExampleTests + +- (void)setUp { + [super setUp]; + // Put setup code here. This method is called before the invocation of each test method in the class. +} + +- (void)tearDown { + // Put teardown code here. This method is called after the invocation of each test method in the class. + [super tearDown]; +} + +- (void)testExample { + // This is an example of a functional test case. + XCTAssert(YES, @"Pass"); +} + +- (void)testPerformanceExample { + // This is an example of a performance test case. + [self measureBlock:^{ + // Put the code you want to measure the time of here. + }]; +} + +@end diff --git a/Example/MessageDisplayKitWorkSpace.xcworkspace/contents.xcworkspacedata b/Example/MessageDisplayKitWorkSpace.xcworkspace/contents.xcworkspacedata index 9b09b88..15f0671 100644 --- a/Example/MessageDisplayKitWorkSpace.xcworkspace/contents.xcworkspacedata +++ b/Example/MessageDisplayKitWorkSpace.xcworkspace/contents.xcworkspacedata @@ -1,6 +1,12 @@ + + + + @@ -8,6 +14,9 @@ location = "group:MessageDisplayKitStoryBoradExample/MessageDisplayKitStoryBoradExample.xcodeproj"> + location = "group:MessageDisplayKit/MessageDisplayKit.xcodeproj"> + + diff --git a/MessageDisplayKit.podspec b/MessageDisplayKit.podspec index ecab5b7..e7d8d62 100644 --- a/MessageDisplayKit.podspec +++ b/MessageDisplayKit.podspec @@ -1,11 +1,11 @@ Pod::Spec.new do |s| s.name = "MessageDisplayKit" - s.version = "0.2.7" - s.summary = "An IM App like WeChat App has to send text, pictures, audio, video, location messaging, managing address book, more interesting features." + s.version = "5.4" + s.summary = "An IM App like WeChat App has to send text, pictures, audio, video, location messaging, managing address book, more interesting features. " s.homepage = "https://github.com/xhzengAIB/MessageDisplayKit" s.license = "MIT" s.authors = { "Jack" => "xhzengAIB@gmail.com" } - s.source = { :git => "https://github.com/xhzengAIB/MessageDisplayKit.git", :tag => "v0.2.7" } + s.source = { :git => "https://github.com/xhzengAIB/MessageDisplayKit.git", :tag => "5.4" } s.frameworks = 'Foundation', 'CoreGraphics', 'UIKit', 'MobileCoreServices', 'AVFoundation', 'CoreLocation', 'MediaPlayer', 'CoreMedia', 'CoreText', 'AudioToolbox' s.platform = :ios, '6.0' s.source_files = 'MessageDisplayKit/Classes/**/*.{h,m}' diff --git a/MessageDisplayKit/Classes/Categorys/NSString/NSString+MessageInputView.h b/MessageDisplayKit/Classes/Categorys/NSString/NSString+MessageInputView.h index 727cdaf..0e7528c 100644 --- a/MessageDisplayKit/Classes/Categorys/NSString/NSString+MessageInputView.h +++ b/MessageDisplayKit/Classes/Categorys/NSString/NSString+MessageInputView.h @@ -2,8 +2,8 @@ // NSString+MessageInputView.h // MessageDisplayExample // -// Created by qtone-1 on 14-4-24. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Categorys/NSString/NSString+MessageInputView.m b/MessageDisplayKit/Classes/Categorys/NSString/NSString+MessageInputView.m index 0858138..84418dd 100644 --- a/MessageDisplayKit/Classes/Categorys/NSString/NSString+MessageInputView.m +++ b/MessageDisplayKit/Classes/Categorys/NSString/NSString+MessageInputView.m @@ -2,8 +2,8 @@ // NSString+MessageInputView.m // MessageDisplayExample // -// Created by qtone-1 on 14-4-24. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "NSString+MessageInputView.h" diff --git a/MessageDisplayKit/Classes/Categorys/NSString/NSString+XHMD5.h b/MessageDisplayKit/Classes/Categorys/NSString/NSString+XHMD5.h index 1e64d18..5f9841b 100644 --- a/MessageDisplayKit/Classes/Categorys/NSString/NSString+XHMD5.h +++ b/MessageDisplayKit/Classes/Categorys/NSString/NSString+XHMD5.h @@ -3,11 +3,13 @@ // XHImageViewer // // Created by 曾 宪华 on 14-2-18. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import @interface NSString (XHMD5) + - (NSString *)MD5Hash; + @end diff --git a/MessageDisplayKit/Classes/Categorys/NSString/NSString+XHMD5.m b/MessageDisplayKit/Classes/Categorys/NSString/NSString+XHMD5.m index 10e1e17..fd46454 100644 --- a/MessageDisplayKit/Classes/Categorys/NSString/NSString+XHMD5.m +++ b/MessageDisplayKit/Classes/Categorys/NSString/NSString+XHMD5.m @@ -3,7 +3,7 @@ // XHImageViewer // // Created by 曾 宪华 on 14-2-18. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "NSString+XHMD5.h" diff --git a/MessageDisplayKit/Classes/Categorys/UIImage/UIImage+Utility.h b/MessageDisplayKit/Classes/Categorys/UIImage/UIImage+Utility.h index 5ed233f..1f42aeb 100644 --- a/MessageDisplayKit/Classes/Categorys/UIImage/UIImage+Utility.h +++ b/MessageDisplayKit/Classes/Categorys/UIImage/UIImage+Utility.h @@ -3,12 +3,14 @@ // XHImageViewer // // Created by 曾 宪华 on 14-2-18. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import @interface UIImage (Utility) + + (UIImage *)fastImageWithData:(NSData *)data; + (UIImage *)fastImageWithContentsOfFile:(NSString *)path; + @end diff --git a/MessageDisplayKit/Classes/Categorys/UIImage/UIImage+Utility.m b/MessageDisplayKit/Classes/Categorys/UIImage/UIImage+Utility.m index b2b9597..0bc409a 100644 --- a/MessageDisplayKit/Classes/Categorys/UIImage/UIImage+Utility.m +++ b/MessageDisplayKit/Classes/Categorys/UIImage/UIImage+Utility.m @@ -3,7 +3,7 @@ // XHImageViewer // // Created by 曾 宪华 on 14-2-18. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "UIImage+Utility.h" diff --git a/MessageDisplayKit/Classes/Categorys/UIImage/UIImage+XHAnimatedFaceGif.h b/MessageDisplayKit/Classes/Categorys/UIImage/UIImage+XHAnimatedFaceGif.h deleted file mode 100644 index 8e87cad..0000000 --- a/MessageDisplayKit/Classes/Categorys/UIImage/UIImage+XHAnimatedFaceGif.h +++ /dev/null @@ -1,35 +0,0 @@ -// -// UIImage+XHAnimatedFaceGif.h -// MessageDisplayExample -// -// Created by qtone-1 on 14-5-2. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import - -@interface UIImage (XHAnimatedFaceGif) - -/* - UIImage *animation = [UIImage animatedImageWithAnimatedGIFData:theData]; - - I interpret `theData` as a GIF. I create an animated `UIImage` using the source images in the GIF. - - The GIF stores a separate duration for each frame, in units of centiseconds (hundredths of a second). However, a `UIImage` only has a single, total `duration` property, which is a floating-point number. - - To handle this mismatch, I add each source image (from the GIF) to `animation` a varying number of times to match the ratios between the frame durations in the GIF. - - For example, suppose the GIF contains three frames. Frame 0 has duration 3. Frame 1 has duration 9. Frame 2 has duration 15. I divide each duration by the greatest common denominator of all the durations, which is 3, and add each frame the resulting number of times. Thus `animation` will contain frame 0 3/3 = 1 time, then frame 1 9/3 = 3 times, then frame 2 15/3 = 5 times. I set `animation.duration` to (3+9+15)/100 = 0.27 seconds. - */ -+ (UIImage *)animatedImageWithAnimatedGIFData:(NSData *)theData; - -/* - UIImage *image = [UIImage animatedImageWithAnimatedGIFURL:theURL]; - - I interpret the contents of `theURL` as a GIF. I create an animated `UIImage` using the source images in the GIF. - - I operate exactly like `+[UIImage animatedImageWithAnimatedGIFData:]`, except that I read the data from `theURL`. If `theURL` is not a `file:` URL, you probably want to call me on a background thread or GCD queue to avoid blocking the main thread. - */ -+ (UIImage *)animatedImageWithAnimatedGIFURL:(NSURL *)theURL; - -@end diff --git a/MessageDisplayKit/Classes/Categorys/UIImage/UIImage+XHAnimatedFaceGif.m b/MessageDisplayKit/Classes/Categorys/UIImage/UIImage+XHAnimatedFaceGif.m deleted file mode 100644 index 668d829..0000000 --- a/MessageDisplayKit/Classes/Categorys/UIImage/UIImage+XHAnimatedFaceGif.m +++ /dev/null @@ -1,128 +0,0 @@ -// -// UIImage+XHAnimatedFaceGif.m -// MessageDisplayExample -// -// Created by qtone-1 on 14-5-2. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import "UIImage+XHAnimatedFaceGif.h" -#import - -#if __has_feature(objc_arc) -#define toCF (__bridge CFTypeRef) -#define fromCF (__bridge id) -#else -#define toCF (CFTypeRef) -#define fromCF (id) -#endif - - -@implementation UIImage (XHAnimatedFaceGif) - -static int delayCentisecondsForImageAtIndex(CGImageSourceRef const source, size_t const i) { - int delayCentiseconds = 1; - CFDictionaryRef const properties = CGImageSourceCopyPropertiesAtIndex(source, i, NULL); - if (properties) { - CFDictionaryRef const gifProperties = CFDictionaryGetValue(properties, kCGImagePropertyGIFDictionary); - if (gifProperties) { - NSNumber *number = fromCF CFDictionaryGetValue(gifProperties, kCGImagePropertyGIFUnclampedDelayTime); - if (number == NULL || [number doubleValue] == 0) { - number = fromCF CFDictionaryGetValue(gifProperties, kCGImagePropertyGIFDelayTime); - } - if ([number doubleValue] > 0) { - // Even though the GIF stores the delay as an integer number of centiseconds, ImageIO “helpfully” converts that to seconds for us. - delayCentiseconds = (int)lrint([number doubleValue] * 100); - } - } - CFRelease(properties); - } - return delayCentiseconds; -} - -static void createImagesAndDelays(CGImageSourceRef source, size_t count, CGImageRef imagesOut[count], int delayCentisecondsOut[count]) { - for (size_t i = 0; i < count; ++i) { - imagesOut[i] = CGImageSourceCreateImageAtIndex(source, i, NULL); - delayCentisecondsOut[i] = delayCentisecondsForImageAtIndex(source, i); - } -} - -static int sum(size_t const count, int const *const values) { - int theSum = 0; - for (size_t i = 0; i < count; ++i) { - theSum += values[i]; - } - return theSum; -} - -static int pairGCD(int a, int b) { - if (a < b) - return pairGCD(b, a); - while (true) { - int const r = a % b; - if (r == 0) - return b; - a = b; - b = r; - } -} - -static int vectorGCD(size_t const count, int const *const values) { - int gcd = values[0]; - for (size_t i = 1; i < count; ++i) { - // Note that after I process the first few elements of the vector, `gcd` will probably be smaller than any remaining element. By passing the smaller value as the second argument to `pairGCD`, I avoid making it swap the arguments. - gcd = pairGCD(values[i], gcd); - } - return gcd; -} - -static NSArray *frameArray(size_t const count, CGImageRef const images[count], int const delayCentiseconds[count], int const totalDurationCentiseconds) { - int const gcd = vectorGCD(count, delayCentiseconds); - size_t const frameCount = totalDurationCentiseconds / gcd; - UIImage *frames[frameCount]; - for (size_t i = 0, f = 0; i < count; ++i) { - UIImage *const frame = [UIImage imageWithCGImage:images[i]]; - for (size_t j = delayCentiseconds[i] / gcd; j > 0; --j) { - frames[f++] = frame; - } - } - return [NSArray arrayWithObjects:frames count:frameCount]; -} - -static void releaseImages(size_t const count, CGImageRef const images[count]) { - for (size_t i = 0; i < count; ++i) { - CGImageRelease(images[i]); - } -} - -static UIImage *animatedImageWithAnimatedGIFImageSource(CGImageSourceRef const source) { - size_t const count = CGImageSourceGetCount(source); - CGImageRef images[count]; - int delayCentiseconds[count]; // in centiseconds - createImagesAndDelays(source, count, images, delayCentiseconds); - int const totalDurationCentiseconds = sum(count, delayCentiseconds); - NSArray *const frames = frameArray(count, images, delayCentiseconds, totalDurationCentiseconds); - UIImage *const animation = [UIImage animatedImageWithImages:frames duration:(NSTimeInterval)totalDurationCentiseconds / 100.0]; - releaseImages(count, images); - return animation; -} - -static UIImage *animatedImageWithAnimatedGIFReleasingImageSource(CGImageSourceRef CF_RELEASES_ARGUMENT source) { - if (source) { - UIImage *const image = animatedImageWithAnimatedGIFImageSource(source); - CFRelease(source); - return image; - } else { - return nil; - } -} - -+ (UIImage *)animatedImageWithAnimatedGIFData:(NSData *)data { - return animatedImageWithAnimatedGIFReleasingImageSource(CGImageSourceCreateWithData(toCF data, NULL)); -} - -+ (UIImage *)animatedImageWithAnimatedGIFURL:(NSURL *)url { - return animatedImageWithAnimatedGIFReleasingImageSource(CGImageSourceCreateWithURL(toCF url, NULL)); -} - -@end diff --git a/MessageDisplayKit/Classes/Categorys/UIImage/UIImage+XHRounded.h b/MessageDisplayKit/Classes/Categorys/UIImage/UIImage+XHRounded.h index 054103a..379f8f7 100644 --- a/MessageDisplayKit/Classes/Categorys/UIImage/UIImage+XHRounded.h +++ b/MessageDisplayKit/Classes/Categorys/UIImage/UIImage+XHRounded.h @@ -2,8 +2,8 @@ // UIImage+XHRounded.h // MessageDisplayExample // -// Created by qtone-1 on 14-4-25. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-25. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Categorys/UIImage/UIImage+XHRounded.m b/MessageDisplayKit/Classes/Categorys/UIImage/UIImage+XHRounded.m index 5b22d31..06cfa5d 100644 --- a/MessageDisplayKit/Classes/Categorys/UIImage/UIImage+XHRounded.m +++ b/MessageDisplayKit/Classes/Categorys/UIImage/UIImage+XHRounded.m @@ -2,8 +2,8 @@ // UIImage+XHRounded.m // MessageDisplayExample // -// Created by qtone-1 on 14-4-25. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-25. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "UIImage+XHRounded.h" diff --git a/MessageDisplayKit/Classes/Categorys/UIScrollView/UIScrollView+XHkeyboardControl.h b/MessageDisplayKit/Classes/Categorys/UIScrollView/UIScrollView+XHkeyboardControl.h index b9b805d..c80c7e6 100644 --- a/MessageDisplayKit/Classes/Categorys/UIScrollView/UIScrollView+XHkeyboardControl.h +++ b/MessageDisplayKit/Classes/Categorys/UIScrollView/UIScrollView+XHkeyboardControl.h @@ -2,8 +2,8 @@ // UIScrollView+XHkeyboardControl.h // MessageDisplayExample // -// Created by qtone-1 on 14-4-24. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import @@ -15,7 +15,7 @@ typedef void(^KeyboardDidShowBlock)(BOOL didShowed); typedef void(^KeyboardDidScrollToPointBlock)(CGPoint point); typedef void(^KeyboardWillSnapBackToPointBlock)(CGPoint point); -typedef void(^KeyboardWillChangeBlock)(CGRect keyboardRect, UIViewAnimationOptions options, double duration, BOOL showKeyborad); +typedef void(^KeyboardWillChangeBlock)(CGRect keyboardRect, UIViewAnimationOptions options, double duration, BOOL showKeyboard); @interface UIScrollView (XHkeyboardControl) diff --git a/MessageDisplayKit/Classes/Categorys/UIScrollView/UIScrollView+XHkeyboardControl.m b/MessageDisplayKit/Classes/Categorys/UIScrollView/UIScrollView+XHkeyboardControl.m index 7bf11b9..f7a334b 100644 --- a/MessageDisplayKit/Classes/Categorys/UIScrollView/UIScrollView+XHkeyboardControl.m +++ b/MessageDisplayKit/Classes/Categorys/UIScrollView/UIScrollView+XHkeyboardControl.m @@ -2,8 +2,8 @@ // UIScrollView+XHkeyboardControl.m // MessageDisplayExample // -// Created by qtone-1 on 14-4-24. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "UIScrollView+XHkeyboardControl.h" diff --git a/MessageDisplayKit/Classes/Categorys/UIView/UIView+XHRemoteImage.h b/MessageDisplayKit/Classes/Categorys/UIView/UIView+XHRemoteImage.h index bda8ad5..50a920f 100644 --- a/MessageDisplayKit/Classes/Categorys/UIView/UIView+XHRemoteImage.h +++ b/MessageDisplayKit/Classes/Categorys/UIView/UIView+XHRemoteImage.h @@ -3,11 +3,11 @@ // MessageDisplayExample // // Created by 曾 宪华 on 14-5-30. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import -#import "XHMessageAvatorFactory.h" +#import "XHMessageAvatarFactory.h" typedef NS_ENUM(NSInteger, UIImageViewURLDownloadState) { UIImageViewURLDownloadStateUnknown = 0, @@ -26,7 +26,7 @@ typedef NS_ENUM(NSInteger, UIImageViewURLDownloadState) { @property (nonatomic, readonly) UIImageViewURLDownloadState loadingState; // -@property (nonatomic, assign) XHMessageAvatorType messageAvatorType; +@property (nonatomic, assign) XHMessageAvatarType messageAvatarType; // UI @property (nonatomic, strong) UIView *loadingView; diff --git a/MessageDisplayKit/Classes/Categorys/UIView/UIView+XHRemoteImage.m b/MessageDisplayKit/Classes/Categorys/UIView/UIView+XHRemoteImage.m index cf0667c..fd05005 100644 --- a/MessageDisplayKit/Classes/Categorys/UIView/UIView+XHRemoteImage.m +++ b/MessageDisplayKit/Classes/Categorys/UIView/UIView+XHRemoteImage.m @@ -3,7 +3,7 @@ // MessageDisplayExample // // Created by 曾 宪华 on 14-5-30. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "UIView+XHRemoteImage.h" @@ -18,7 +18,7 @@ const char* const kXHActivityIndicatorViewKey = "XHActivityIndicatorViewKey"; -const char* const kXHMessageAvatorTypeKey = "XHMessageAvatorTypeKey"; +const char* const kXHMessageAvatarTypeKey = "XHMessageAvatarTypeKey"; #define kXHActivityIndicatorViewSize 35 @@ -66,12 +66,12 @@ - (UIActivityIndicatorView *)activityIndicatorView { return objc_getAssociatedObject(self, kXHActivityIndicatorViewKey); } -- (void)setMessageAvatorType:(XHMessageAvatorType)messageAvatorType { - objc_setAssociatedObject(self, &kXHMessageAvatorTypeKey, [NSNumber numberWithInteger:messageAvatorType], OBJC_ASSOCIATION_RETAIN_NONATOMIC); +- (void)setMessageAvatarType:(XHMessageAvatarType)messageAvatarType { + objc_setAssociatedObject(self, &kXHMessageAvatarTypeKey, [NSNumber numberWithInteger:messageAvatarType], OBJC_ASSOCIATION_RETAIN_NONATOMIC); } -- (XHMessageAvatorType)messageAvatorType { - return (XHMessageAvatorType)([objc_getAssociatedObject(self, &kXHMessageAvatorTypeKey) integerValue]); +- (XHMessageAvatarType)messageAvatarType { + return (XHMessageAvatarType)([objc_getAssociatedObject(self, &kXHMessageAvatarTypeKey) integerValue]); } - (NSURL*)url { @@ -166,6 +166,9 @@ - (void)setDefaultLoadingView { #pragma mark - Setup Image - (void)setupImage:(UIImage *)image { + if (!image) { + return; + } if ([self isKindOfClass:[UIButton class]]) { UIButton *currentButton = (UIButton *)self; [currentButton setImage:image forState:UIControlStateNormal]; @@ -246,8 +249,8 @@ - (void)loadWithCompletionBlock:(void(^)(UIImage *image, NSURL *url, NSError *er __weak typeof(self) weakSelf = self; dispatch_async(self.cachingQueue, ^{ UIImage *cacheImage = [XHCacheManager imageWithURL:weakSelf.url storeMemoryCache:YES]; - if (weakSelf.messageAvatorType != XHMessageAvatorTypeNormal) { - cacheImage = [XHMessageAvatorFactory avatarImageNamed:cacheImage messageAvatorType:weakSelf.messageAvatorType]; + if (weakSelf.messageAvatarType != XHMessageAvatarTypeNormal) { + cacheImage = [XHMessageAvatarFactory avatarImageNamed:cacheImage messageAvatarType:weakSelf.messageAvatarType]; } if (cacheImage) { [weakSelf setImage:cacheImage forURL:weakSelf.url]; @@ -284,8 +287,8 @@ - (UIImage *)didFinishDownloadWithData:(NSData *)data forURL:(NSURL *)url error: [self cachingImageData:data url:url]; } UIImage *image = [UIImage imageWithData:data]; - if (self.messageAvatorType != XHMessageAvatorTypeNormal) { - image = [XHMessageAvatorFactory avatarImageNamed:image messageAvatorType:self.messageAvatorType]; + if (self.messageAvatarType != XHMessageAvatarTypeNormal) { + image = [XHMessageAvatarFactory avatarImageNamed:image messageAvatarType:self.messageAvatarType]; } if([url isEqual:self.url]) { if(error) { diff --git a/MessageDisplayKit/Classes/Common/XHCaptureHelper.h b/MessageDisplayKit/Classes/Common/XHCaptureHelper.h index 8e62b50..460c919 100644 --- a/MessageDisplayKit/Classes/Common/XHCaptureHelper.h +++ b/MessageDisplayKit/Classes/Common/XHCaptureHelper.h @@ -3,7 +3,7 @@ // MessageDisplayExample // // Created by 曾 宪华 on 14-5-25. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Common/XHCaptureHelper.m b/MessageDisplayKit/Classes/Common/XHCaptureHelper.m index fc9f988..49a03ba 100644 --- a/MessageDisplayKit/Classes/Common/XHCaptureHelper.m +++ b/MessageDisplayKit/Classes/Common/XHCaptureHelper.m @@ -3,7 +3,7 @@ // MessageDisplayExample // // Created by 曾 宪华 on 14-5-25. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHCaptureHelper.h" diff --git a/MessageDisplayKit/Classes/Common/XHConfigurationHelper.h b/MessageDisplayKit/Classes/Common/XHConfigurationHelper.h new file mode 100644 index 0000000..1b66e28 --- /dev/null +++ b/MessageDisplayKit/Classes/Common/XHConfigurationHelper.h @@ -0,0 +1,62 @@ +// +// XHConfigurationHelper.h +// MessageDisplayKit +// +// Created by Jack_iMac on 15/6/30. +// Copyright (c) 2015年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import + +// (Input Tool Bar Style Key) +extern NSString *kXHMessageInputViewVoiceNormalImageNameKey; +extern NSString *kXHMessageInputViewVoiceHLImageNameKey; +extern NSString *kXHMessageInputViewVoiceHolderImageNameKey; +extern NSString *kXHMessageInputViewVoiceHolderHLImageNameKey; +extern NSString *kXHMessageInputViewExtensionNormalImageNameKey; +extern NSString *kXHMessageInputViewExtensionHLImageNameKey; +extern NSString *kXHMessageInputViewKeyboardNormalImageNameKey; +extern NSString *kXHMessageInputViewKeyboardHLImageNameKey; +extern NSString *kXHMessageInputViewEmotionNormalImageNameKey; +extern NSString *kXHMessageInputViewEmotionHLImageNameKey; +extern NSString *kXHMessageInputViewBackgroundImageNameKey; +extern NSString *kXHMessageInputViewBackgroundColorKey; +extern NSString *kXHMessageInputViewBorderColorKey; +extern NSString *kXHMessageInputViewBorderWidthKey; +extern NSString *kXHMessageInputViewCornerRadiusKey; +extern NSString *kXHMessageInputViewPlaceHolderTextColorKey; +extern NSString *kXHMessageInputViewPlaceHolderKey; +extern NSString *kXHMessageInputViewTextColorKey; + + +// (Message Table Style Key) +extern NSString *kXHMessageTablePlaceholderImageNameKey; +extern NSString *kXHMessageTableReceivingSolidImageNameKey; +extern NSString *kXHMessageTableSendingSolidImageNameKey; +extern NSString *kXHMessageTableVoiceUnreadImageNameKey; +extern NSString *kXHMessageTableAvatarPalceholderImageNameKey; +extern NSString *kXHMessageTableTimestampBackgroundColorKey; +extern NSString *kXHMessageTableTimestampTextColorKey; +extern NSString *kXHMessageTableAvatarTypeKey; // XHMessageAvatarType for NSNumber, if kXHMessageTableCustomLoadAvatarNetworImageKey is YES, kXHMessageTableAvatarTypeKey is invalid +extern NSString *kXHMessageTableCustomLoadAvatarNetworImageKey; // for NSNumber(BOOL) + +// 优先控制MDK的UI控件样式,比如输入框的按钮图 +@interface XHConfigurationHelper : NSObject + +@property (nonatomic, strong, readonly) NSArray *popMenuTitles; + +@property (nonatomic, strong, readonly) NSDictionary *messageInputViewStyle; + +@property (nonatomic, strong, readonly) NSDictionary *messageTableStyle; + ++ (instancetype)appearance; + +- (void)setupPopMenuTitles:(NSArray *)popMenuTitles; + +// The key from (Input Tool Bar Style Key) +- (void)setupMessageInputViewStyle:(NSDictionary *)messageInputViewStyle; + +// The key from (Message Table Style Key) +- (void)setupMessageTableStyle:(NSDictionary *)messageTableStyle; + +@end diff --git a/MessageDisplayKit/Classes/Common/XHConfigurationHelper.m b/MessageDisplayKit/Classes/Common/XHConfigurationHelper.m new file mode 100644 index 0000000..df7a140 --- /dev/null +++ b/MessageDisplayKit/Classes/Common/XHConfigurationHelper.m @@ -0,0 +1,86 @@ +// +// XHConfigurationHelper.m +// MessageDisplayKit +// +// Created by Jack_iMac on 15/6/30. +// Copyright (c) 2015年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import "XHConfigurationHelper.h" + +// (Input Tool Bar Style Key) +NSString *kXHMessageInputViewVoiceNormalImageNameKey = @"com.HUAJIE.MDK.XHMessageInputViewVoiceNormalImageNameKey"; +NSString *kXHMessageInputViewVoiceHLImageNameKey = @"com.HUAJIE.MDK.XHMessageInputViewVoiceHLImageNameKey"; +NSString *kXHMessageInputViewVoiceHolderImageNameKey = @"com.HUAJIE.MDK.XHMessageInputViewVoiceHolderImageNameKey"; +NSString *kXHMessageInputViewVoiceHolderHLImageNameKey = @"com.HUAJIE.MDK.XHMessageInputViewVoiceHolderHLImageNameKey"; +NSString *kXHMessageInputViewExtensionNormalImageNameKey = @"com.HUAJIE.MDK.XHMessageInputViewExtensionNormalImageNameKey"; +NSString *kXHMessageInputViewExtensionHLImageNameKey = @"com.HUAJIE.MDK.XHMessageInputViewExtensionHLImageNameKey"; +NSString *kXHMessageInputViewKeyboardNormalImageNameKey = @"com.HUAJIE.MDK.XHMessageInputViewKeyboardNormalImageNameKey"; +NSString *kXHMessageInputViewKeyboardHLImageNameKey = @"com.HUAJIE.MDK.XHMessageInputViewKeyboardHLImageNameKey"; +NSString *kXHMessageInputViewEmotionNormalImageNameKey = @"com.HUAJIE.MDK.XHMessageInputViewEmotionNormalImageNameKey"; +NSString *kXHMessageInputViewEmotionHLImageNameKey = @"com.HUAJIE.MDK.XHMessageInputViewEmotionHLImageNameKey"; +NSString *kXHMessageInputViewBackgroundImageNameKey = @"com.HUAJIE.MDK.XHMessageInputViewBackgroundImageNameKey"; +NSString *kXHMessageInputViewBackgroundColorKey = @"com.HUAJIE.MDK.XHMessageInputViewBackgroundColorKey"; +NSString *kXHMessageInputViewBorderColorKey = @"com.HUAJIE.MDK.XHMessageInputViewBorderColorKey"; +NSString *kXHMessageInputViewBorderWidthKey = @"com.HUAJIE.MDK.XHMessageInputViewBorderWidthKey"; +NSString *kXHMessageInputViewCornerRadiusKey = @"com.HUAJIE.MDK.XHMessageInputViewCornerRadiusKey"; +NSString *kXHMessageInputViewPlaceHolderTextColorKey = @"com.HUAJIE.MDK.XHMessageInputViewPlaceHolderTextColorKey"; +NSString *kXHMessageInputViewPlaceHolderKey = @"com.HUAJIE.MDK.XHMessageInputViewPlaceHolderKey"; +NSString *kXHMessageInputViewTextColorKey = @"com.HUAJIE.MDK.XHMessageInputViewTextColorKey"; + +// (Message Table Style Key) +NSString *kXHMessageTablePlaceholderImageNameKey = @"com.HUAJIE.MDK.XHMessageTablePlaceholderImageNameKey"; +NSString *kXHMessageTableReceivingSolidImageNameKey = @"com.HUAJIE.MDK.XHMessageTableReceivingSolidImageNameKey"; +NSString *kXHMessageTableSendingSolidImageNameKey = @"com.HUAJIE.MDK.XHMessageTableSendingSolidImageNameKey"; +NSString *kXHMessageTableVoiceUnreadImageNameKey = @"com.HUAJIE.MDK.XHMessageTableVoiceUnreadImageNameKey"; +NSString *kXHMessageTableAvatarPalceholderImageNameKey = @"com.HUAJIE.MDK.XHMessageTableAvatarPalceholderImageNameKey"; +NSString *kXHMessageTableTimestampBackgroundColorKey = @"com.HUAJIE.MDK.XHMessageTableTimestampBackgroundColorKey"; +NSString *kXHMessageTableTimestampTextColorKey = @"com.HUAJIE.MDK.XHMessageTableTimestampTextColorKey"; +NSString *kXHMessageTableAvatarTypeKey = @"com.HUAJIE.MDK.XHMessageTableAvatarTypeKey"; +NSString *kXHMessageTableCustomLoadAvatarNetworImageKey = @"com.HUAJIE.MDK.XHMessageTableCustomLoadAvatarNetworImageKey"; + +@interface XHConfigurationHelper () + +@property (nonatomic, strong, readwrite) NSArray *popMenuTitles; + +@property (nonatomic, strong, readwrite) NSDictionary *messageInputViewStyle; + +@property (nonatomic, strong, readwrite) NSDictionary *messageTableStyle; + +@end + +@implementation XHConfigurationHelper + ++ (instancetype)appearance { + static XHConfigurationHelper *configurationHelper = nil; + static dispatch_once_t onceToken; + dispatch_once(&onceToken, ^{ + configurationHelper = [[XHConfigurationHelper alloc] init]; + }); + return configurationHelper; +} + +- (instancetype)init { + self = [super init]; + if (self) { + self.popMenuTitles = @[NSLocalizedStringFromTable(@"copy", @"MessageDisplayKitString", @"复制文本消息"), + NSLocalizedStringFromTable(@"transpond", @"MessageDisplayKitString", @"转发"), + NSLocalizedStringFromTable(@"favorites", @"MessageDisplayKitString", @"收藏"), + NSLocalizedStringFromTable(@"more", @"MessageDisplayKitString", @"更多"),]; + } + return self; +} + +- (void)setupPopMenuTitles:(NSArray *)popMenuTitles { + self.popMenuTitles = popMenuTitles; +} + +- (void)setupMessageInputViewStyle:(NSDictionary *)messageInputViewStyle { + self.messageInputViewStyle = messageInputViewStyle; +} + +- (void)setupMessageTableStyle:(NSDictionary *)messageTableStyle { + self.messageTableStyle = messageTableStyle; +} + +@end diff --git a/MessageDisplayKit/Classes/Common/XHLocationHelper.h b/MessageDisplayKit/Classes/Common/XHLocationHelper.h index b3f93fb..d759dbf 100644 --- a/MessageDisplayKit/Classes/Common/XHLocationHelper.h +++ b/MessageDisplayKit/Classes/Common/XHLocationHelper.h @@ -2,8 +2,8 @@ // XHLocationHelper.h // MessageDisplayExample // -// Created by qtone-1 on 14-5-8. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-8. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Common/XHLocationHelper.m b/MessageDisplayKit/Classes/Common/XHLocationHelper.m index ab5f841..dcf6dc0 100644 --- a/MessageDisplayKit/Classes/Common/XHLocationHelper.m +++ b/MessageDisplayKit/Classes/Common/XHLocationHelper.m @@ -2,8 +2,8 @@ // XHLocationHelper.m // MessageDisplayExample // -// Created by qtone-1 on 14-5-8. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-8. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHLocationHelper.h" diff --git a/MessageDisplayKit/Classes/Common/XHMessageBubbleHelper.h b/MessageDisplayKit/Classes/Common/XHMessageBubbleHelper.h index 0295c17..b4fa0e4 100644 --- a/MessageDisplayKit/Classes/Common/XHMessageBubbleHelper.h +++ b/MessageDisplayKit/Classes/Common/XHMessageBubbleHelper.h @@ -3,7 +3,7 @@ // MessageDisplayExample // // Created by 曾 宪华 on 14-6-2. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Common/XHMessageBubbleHelper.m b/MessageDisplayKit/Classes/Common/XHMessageBubbleHelper.m index 3fcff5c..331f647 100644 --- a/MessageDisplayKit/Classes/Common/XHMessageBubbleHelper.m +++ b/MessageDisplayKit/Classes/Common/XHMessageBubbleHelper.m @@ -3,7 +3,7 @@ // MessageDisplayExample // // Created by 曾 宪华 on 14-6-2. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHMessageBubbleHelper.h" diff --git a/MessageDisplayKit/Classes/Common/XHPhotographyHelper.h b/MessageDisplayKit/Classes/Common/XHPhotographyHelper.h index ba07ff5..6b5fa32 100644 --- a/MessageDisplayKit/Classes/Common/XHPhotographyHelper.h +++ b/MessageDisplayKit/Classes/Common/XHPhotographyHelper.h @@ -2,8 +2,8 @@ // XHPhotographyHelper.h // MessageDisplayExample // -// Created by qtone-1 on 14-5-3. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-3. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Common/XHPhotographyHelper.m b/MessageDisplayKit/Classes/Common/XHPhotographyHelper.m index 2945ec6..701687e 100644 --- a/MessageDisplayKit/Classes/Common/XHPhotographyHelper.m +++ b/MessageDisplayKit/Classes/Common/XHPhotographyHelper.m @@ -2,8 +2,8 @@ // XHPhotographyHelper.m // MessageDisplayExample // -// Created by qtone-1 on 14-5-3. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-3. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHPhotographyHelper.h" diff --git a/MessageDisplayKit/Classes/Common/XHVoiceCommonHelper.h b/MessageDisplayKit/Classes/Common/XHVoiceCommonHelper.h index 3c67b38..29b25fd 100644 --- a/MessageDisplayKit/Classes/Common/XHVoiceCommonHelper.h +++ b/MessageDisplayKit/Classes/Common/XHVoiceCommonHelper.h @@ -3,7 +3,7 @@ // MessageDisplayExample // // Created by Aevitx on 14-5-27. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Common/XHVoiceCommonHelper.m b/MessageDisplayKit/Classes/Common/XHVoiceCommonHelper.m index 820edb2..d2c4046 100644 --- a/MessageDisplayKit/Classes/Common/XHVoiceCommonHelper.m +++ b/MessageDisplayKit/Classes/Common/XHVoiceCommonHelper.m @@ -3,7 +3,7 @@ // MessageDisplayExample // // Created by Aevitx on 14-5-27. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHVoiceCommonHelper.h" diff --git a/MessageDisplayKit/Classes/Common/XHVoiceRecordHelper.h b/MessageDisplayKit/Classes/Common/XHVoiceRecordHelper.h index 4113a60..3f64805 100644 --- a/MessageDisplayKit/Classes/Common/XHVoiceRecordHelper.h +++ b/MessageDisplayKit/Classes/Common/XHVoiceRecordHelper.h @@ -2,8 +2,8 @@ // XHVoiceRecordHelper.h // MessageDisplayExample // -// Created by qtone-1 on 14-5-13. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-13. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Common/XHVoiceRecordHelper.m b/MessageDisplayKit/Classes/Common/XHVoiceRecordHelper.m index 381b5b8..26bf57f 100644 --- a/MessageDisplayKit/Classes/Common/XHVoiceRecordHelper.m +++ b/MessageDisplayKit/Classes/Common/XHVoiceRecordHelper.m @@ -2,8 +2,8 @@ // XHVoiceRecordHelper.m // MessageDisplayExample // -// Created by qtone-1 on 14-5-13. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-13. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHVoiceRecordHelper.h" @@ -32,7 +32,7 @@ @implementation XHVoiceRecordHelper - (id)init { self = [super init]; if (self) { - self.maxRecordTime = 60.0; + self.maxRecordTime = kVoiceRecorderTotalTime; self.recordDuration = @"0"; #if TARGET_IPHONE_SIMULATOR || TARGET_OS_IPHONE _backgroundIdentifier = UIBackgroundTaskInvalid; @@ -114,7 +114,7 @@ - (void)prepareRecordingWithPath:(NSString *)path prepareRecorderCompletion:(XHP } NSMutableDictionary * recordSetting = [NSMutableDictionary dictionary]; - [recordSetting setValue :[NSNumber numberWithInt:kAudioFormatAppleIMA4] forKey:AVFormatIDKey]; + [recordSetting setValue :[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey]; [recordSetting setValue:[NSNumber numberWithFloat:16000.0] forKey:AVSampleRateKey]; [recordSetting setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey]; @@ -181,11 +181,10 @@ - (void)pauseRecordingWithPauseRecorderCompletion:(XHPauseRecorderCompletion)pau } - (void)stopRecordingWithStopRecorderCompletion:(XHStopRecorderCompletion)stopRecorderCompletion { - [self getVoiceDuration:_recordPath]; - _isPause = NO; [self stopBackgroundTask]; [self stopRecord]; + [self getVoiceDuration:_recordPath]; dispatch_async(dispatch_get_main_queue(), stopRecorderCompletion); } @@ -258,10 +257,15 @@ - (void)updateMeters { } - (void)getVoiceDuration:(NSString*)recordPath { - AVAudioPlayer *play = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:recordPath] error:nil]; - DLog(@"时长:%f", play.duration); - self.recordDuration = [NSString stringWithFormat:@"%.1f", play.duration]; -// return play.duration; + NSError *error = nil; + AVAudioPlayer *play = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:recordPath] error:&error]; + if (error) { + DLog(@"recordPath:%@ error:%@", recordPath, error); + self.recordDuration = @""; + } else { + DLog(@"时长:%f", play.duration); + self.recordDuration = [NSString stringWithFormat:@"%.1f", play.duration]; + } } @end diff --git a/MessageDisplayKit/Classes/Controllers/XHContactTableViewController/XHContactTableViewController.h b/MessageDisplayKit/Classes/Controllers/XHContactTableViewController/XHContactTableViewController.h deleted file mode 100644 index 8e843bd..0000000 --- a/MessageDisplayKit/Classes/Controllers/XHContactTableViewController/XHContactTableViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// XHContactTableViewController.h -// MessageDisplayExample -// -// Created by qtone-1 on 14-5-17. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import "XHBaseSearchTableViewController.h" - -@interface XHContactTableViewController : XHBaseSearchTableViewController - -@end diff --git a/MessageDisplayKit/Classes/Controllers/XHDiscoverTableViewController/XHAlbumTableViewController/XHAlbumTableViewController.h b/MessageDisplayKit/Classes/Controllers/XHDiscoverTableViewController/XHAlbumTableViewController/XHAlbumTableViewController.h deleted file mode 100644 index c373b07..0000000 --- a/MessageDisplayKit/Classes/Controllers/XHDiscoverTableViewController/XHAlbumTableViewController/XHAlbumTableViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// XHAlbumTableViewController.h -// MessageDisplayExample -// -// Created by qtone-1 on 14-5-17. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import "XHBaseTableViewController.h" - -@interface XHAlbumTableViewController : XHBaseTableViewController - -@end diff --git a/MessageDisplayKit/Classes/Controllers/XHDiscoverTableViewController/XHBottleViewController/XHBottleViewController.h b/MessageDisplayKit/Classes/Controllers/XHDiscoverTableViewController/XHBottleViewController/XHBottleViewController.h deleted file mode 100644 index 35a83d6..0000000 --- a/MessageDisplayKit/Classes/Controllers/XHDiscoverTableViewController/XHBottleViewController/XHBottleViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// XHBottleViewController.h -// MessageDisplayExample -// -// Created by qtone-1 on 14-5-17. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import "XHBaseViewController.h" - -@interface XHBottleViewController : XHBaseViewController - -@end diff --git a/MessageDisplayKit/Classes/Controllers/XHDiscoverTableViewController/XHDiscoverTableViewController.h b/MessageDisplayKit/Classes/Controllers/XHDiscoverTableViewController/XHDiscoverTableViewController.h deleted file mode 100644 index 7bd08bf..0000000 --- a/MessageDisplayKit/Classes/Controllers/XHDiscoverTableViewController/XHDiscoverTableViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// XHDiscoverTableViewController.h -// MessageDisplayExample -// -// Created by qtone-1 on 14-5-17. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import "XHMultipleSectionTableViewController.h" - -@interface XHDiscoverTableViewController : XHMultipleSectionTableViewController - -@end diff --git a/MessageDisplayKit/Classes/Controllers/XHDiscoverTableViewController/XHLocationServiceTableViewController/XHLocationServiceTableViewController.h b/MessageDisplayKit/Classes/Controllers/XHDiscoverTableViewController/XHLocationServiceTableViewController/XHLocationServiceTableViewController.h deleted file mode 100644 index b995d0e..0000000 --- a/MessageDisplayKit/Classes/Controllers/XHDiscoverTableViewController/XHLocationServiceTableViewController/XHLocationServiceTableViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// XHLocationServiceTableViewController.h -// MessageDisplayExample -// -// Created by qtone-1 on 14-5-17. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import "XHBaseTableViewController.h" - -@interface XHLocationServiceTableViewController : XHBaseTableViewController - -@end diff --git a/MessageDisplayKit/Classes/Controllers/XHDiscoverTableViewController/XHMoreGameTableViewController/XHMoreGameTableViewController.h b/MessageDisplayKit/Classes/Controllers/XHDiscoverTableViewController/XHMoreGameTableViewController/XHMoreGameTableViewController.h deleted file mode 100644 index a3c0c51..0000000 --- a/MessageDisplayKit/Classes/Controllers/XHDiscoverTableViewController/XHMoreGameTableViewController/XHMoreGameTableViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// XHMoreGameTableViewController.h -// MessageDisplayExample -// -// Created by qtone-1 on 14-5-17. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import "XHBaseTableViewController.h" - -@interface XHMoreGameTableViewController : XHBaseTableViewController - -@end diff --git a/MessageDisplayKit/Classes/Controllers/XHDiscoverTableViewController/XHQRCodeViewController/XHQRCodeViewController.h b/MessageDisplayKit/Classes/Controllers/XHDiscoverTableViewController/XHQRCodeViewController/XHQRCodeViewController.h deleted file mode 100644 index 907e126..0000000 --- a/MessageDisplayKit/Classes/Controllers/XHDiscoverTableViewController/XHQRCodeViewController/XHQRCodeViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// XHQRCodeViewController.h -// MessageDisplayExample -// -// Created by qtone-1 on 14-5-17. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import "XHBaseViewController.h" - -@interface XHQRCodeViewController : XHBaseViewController - -@end diff --git a/MessageDisplayKit/Classes/Controllers/XHDiscoverTableViewController/XHShakeViewController/XHShakeViewController.h b/MessageDisplayKit/Classes/Controllers/XHDiscoverTableViewController/XHShakeViewController/XHShakeViewController.h deleted file mode 100644 index 02d4fd8..0000000 --- a/MessageDisplayKit/Classes/Controllers/XHDiscoverTableViewController/XHShakeViewController/XHShakeViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// XHShakeViewController.h -// MessageDisplayExample -// -// Created by qtone-1 on 14-5-17. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import "XHBaseViewController.h" - -@interface XHShakeViewController : XHBaseViewController - -@end diff --git a/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayEmotionViewController/XHDisplayEmotionViewController.h b/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayEmotionViewController/XHDisplayEmotionViewController.h index f9ac96c..001cd59 100644 --- a/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayEmotionViewController/XHDisplayEmotionViewController.h +++ b/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayEmotionViewController/XHDisplayEmotionViewController.h @@ -2,13 +2,12 @@ // XHDisplayEmotionViewController.h // MessageDisplayExample // -// Created by qtone-1 on 14-5-6. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-6. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import -#import "XHBaseViewController.h" -@interface XHDisplayEmotionViewController : XHBaseViewController +@interface XHDisplayEmotionViewController : UIViewController @end diff --git a/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayEmotionViewController/XHDisplayEmotionViewController.m b/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayEmotionViewController/XHDisplayEmotionViewController.m index 4797cd2..d5d8c15 100644 --- a/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayEmotionViewController/XHDisplayEmotionViewController.m +++ b/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayEmotionViewController/XHDisplayEmotionViewController.m @@ -2,8 +2,8 @@ // XHDisplayEmotionViewController.m // MessageDisplayExample // -// Created by qtone-1 on 14-5-6. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-6. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHDisplayEmotionViewController.h" diff --git a/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayLocationViewController/XHDisplayLocationViewController.h b/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayLocationViewController/XHDisplayLocationViewController.h index c3ef5ba..eae02a9 100644 --- a/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayLocationViewController/XHDisplayLocationViewController.h +++ b/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayLocationViewController/XHDisplayLocationViewController.h @@ -2,17 +2,16 @@ // XHDisplayLocationViewController.h // MessageDisplayExample // -// Created by qtone-1 on 14-5-6. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-6. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import #import -#import "XHBaseViewController.h" #import "XHMessageModel.h" -@interface XHDisplayLocationViewController : XHBaseViewController +@interface XHDisplayLocationViewController : UIViewController @property (nonatomic, strong) id message; diff --git a/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayLocationViewController/XHDisplayLocationViewController.m b/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayLocationViewController/XHDisplayLocationViewController.m index 2d8fa26..39c6e4c 100644 --- a/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayLocationViewController/XHDisplayLocationViewController.m +++ b/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayLocationViewController/XHDisplayLocationViewController.m @@ -2,8 +2,8 @@ // XHDisplayLocationViewController.m // MessageDisplayExample // -// Created by qtone-1 on 14-5-6. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-6. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHDisplayLocationViewController.h" @@ -31,7 +31,7 @@ - (void)loadLocations { identifier:[NSString stringWithFormat:@"%f, %f", coord.latitude, coord.longitude]]; // Create an annotation to show where the region is located on the map. - XHAnnotation *myRegionAnnotation = [[XHAnnotation alloc] initWithCLRegion:newRegion title:@"消息的位置" subtitle:self.message.geolocations]; + XHAnnotation *myRegionAnnotation = [[XHAnnotation alloc] initWithCLRegion:newRegion title:NSLocalizedStringFromTable(@"MessageLocation", @"MessageDisplayKitString", nil) subtitle:self.message.geolocations]; myRegionAnnotation.coordinate = newRegion.center; myRegionAnnotation.radius = newRegion.radius; diff --git a/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayMediaViewController/XHDisplayMediaViewController.h b/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayMediaViewController/XHDisplayMediaViewController.h index 6591f74..52e474d 100644 --- a/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayMediaViewController/XHDisplayMediaViewController.h +++ b/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayMediaViewController/XHDisplayMediaViewController.h @@ -2,15 +2,14 @@ // XHDisplayMediaViewController.h // MessageDisplayExample // -// Created by qtone-1 on 14-5-6. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-6. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import -#import "XHBaseViewController.h" #import "XHMessageModel.h" -@interface XHDisplayMediaViewController : XHBaseViewController +@interface XHDisplayMediaViewController : UIViewController @property (nonatomic, strong) id message; diff --git a/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayMediaViewController/XHDisplayMediaViewController.m b/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayMediaViewController/XHDisplayMediaViewController.m index 4cf3714..5513eee 100644 --- a/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayMediaViewController/XHDisplayMediaViewController.m +++ b/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayMediaViewController/XHDisplayMediaViewController.m @@ -2,14 +2,15 @@ // XHDisplayMediaViewController.m // MessageDisplayExample // -// Created by qtone-1 on 14-5-6. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-6. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHDisplayMediaViewController.h" #import #import "UIView+XHRemoteImage.h" +#import "XHConfigurationHelper.h" @interface XHDisplayMediaViewController () @@ -35,6 +36,8 @@ - (MPMoviePlayerController *)moviePlayerController { - (UIImageView *)photoImageView { if (!_photoImageView) { UIImageView *photoImageView = [[UIImageView alloc] initWithFrame:self.view.frame]; + photoImageView.contentMode = UIViewContentModeScaleAspectFill; + photoImageView.clipsToBounds = YES; [self.view addSubview:photoImageView]; _photoImageView = photoImageView; } @@ -51,7 +54,12 @@ - (void)setMessage:(id)message { self.title = NSLocalizedStringFromTable(@"Photo", @"MessageDisplayKitString", @"详细照片"); self.photoImageView.image = message.photo; if (message.thumbnailUrl) { - [self.photoImageView setImageWithURL:[NSURL URLWithString:[message thumbnailUrl]] placeholer:[UIImage imageNamed:@"placeholderImage"]]; + NSString *placeholderImageName = [[XHConfigurationHelper appearance].messageInputViewStyle objectForKey:kXHMessageTablePlaceholderImageNameKey]; + if (!placeholderImageName) { + placeholderImageName = @"placeholderImage"; + } + + [self.photoImageView setImageWithURL:[NSURL URLWithString:[message thumbnailUrl]] placeholer:[UIImage imageNamed:placeholderImageName]]; } } } diff --git a/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayTextViewController/XHDisplayTextViewController.h b/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayTextViewController/XHDisplayTextViewController.h index 0444586..ed8e854 100644 --- a/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayTextViewController/XHDisplayTextViewController.h +++ b/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayTextViewController/XHDisplayTextViewController.h @@ -2,15 +2,14 @@ // XHDisplayTextViewController.h // MessageDisplayExample // -// Created by qtone-1 on 14-5-6. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-6. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import -#import "XHBaseViewController.h" #import "XHMessageModel.h" -@interface XHDisplayTextViewController : XHBaseViewController +@interface XHDisplayTextViewController : UIViewController @property (nonatomic, strong) id message; diff --git a/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayTextViewController/XHDisplayTextViewController.m b/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayTextViewController/XHDisplayTextViewController.m index 539aa50..a920940 100644 --- a/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayTextViewController/XHDisplayTextViewController.m +++ b/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHDisplayTextViewController/XHDisplayTextViewController.m @@ -2,8 +2,8 @@ // XHDisplayTextViewController.m // MessageDisplayExample // -// Created by qtone-1 on 14-5-6. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-6. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHDisplayTextViewController.h" @@ -42,6 +42,7 @@ - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.title = NSLocalizedStringFromTable(@"TextDetail", @"MessageDisplayKitString", @"文本消息"); + self.view.backgroundColor = [UIColor whiteColor]; } - (void)didReceiveMemoryWarning { diff --git a/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHMessageTableViewController.h b/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHMessageTableViewController.h index 3190e6f..43922aa 100644 --- a/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHMessageTableViewController.h +++ b/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHMessageTableViewController.h @@ -2,15 +2,14 @@ // XHMessageTableViewController.h // MessageDisplayExample // -// Created by qtone-1 on 14-4-24. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import // Model #import "XHMessage.h" -#import "XHStoreManager.h" // Views #import "XHMessageTableView.h" @@ -129,22 +128,66 @@ */ - (void)loadMoreMessagesScrollTotop; +/** + * 配置TableViewCell高度的方法,如果你想定制自己的Cell样式,那么你必须要实现DataSource中的方法 + - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath targetMessage:(id)message; + * + * @param tableView 目标TableView + * @param indexPath 目标IndexPath + * @param message 目标消息Model + * + * @return 返回计算好的Cell高度 + */ +- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath targetMessage:(id)message; + @end @protocol XHMessageTableViewControllerDataSource @required +- (id )messageForRowAtIndexPath:(NSIndexPath *)indexPath; -- (id)messageForRowAtIndexPath:(NSIndexPath *)indexPath; +@optional +/** + * 配置TableViewCell的方法,如果你想定制自己的Cell样式,那么你必须要实现Delegate中的方法 + - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath targetMessage:(id)message; + * + * @param tableView 目标TableView + * @param indexPath 目标IndexPath + * @param message 目标消息Model + * + * @return 返回UITableViewCell或者继承于UITableViewCell的实例化对象 + */ +- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath targetMessage:(id)message; @end -@interface XHMessageTableViewController : UIViewController +@interface XHMessageTableViewController : UIViewController < +UITableViewDataSource, +UITableViewDelegate, +XHMessageTableViewControllerDelegate, +XHMessageTableViewControllerDataSource, +XHMessageInputViewDelegate, +XHMessageTableViewCellDelegate, +XHShareMenuViewDelegate, +XHEmotionManagerViewDelegate, +XHEmotionManagerViewDataSource +> @property (nonatomic, weak) id delegate; @property (nonatomic, weak) id dataSource; +/** + * 用户输入方式 + */ +@property (nonatomic, assign, readonly) XHInputViewType textViewInputViewType; + +/** + * 加载更多数据的指示器 + */ +@property (nonatomic, assign) UIActivityIndicatorViewStyle loadMoreActivityIndicatorViewStyle; + /** * 数据源,显示多少消息 */ @@ -234,6 +277,14 @@ */ - (void)insertOldMessages:(NSArray *)oldMessages; +/** + * 同上,增加了 completion 来通知消息插入完毕 + * + * @param oldMessages 目标的旧消息数据 + * @param completion insert 完成回调 + */ +- (void)insertOldMessages:(NSArray *)oldMessages completion:(void (^)())completion; + #pragma mark - Messages view controller /** * 完成发送消息的函数 @@ -272,4 +323,12 @@ atScrollPosition:(UITableViewScrollPosition)position animated:(BOOL)animated; +#pragma mark - Other Menu View Frame Helper Mehtod +/** + * 根据显示或隐藏的需求对所有第三方Menu进行管理 + * + * @param hide 需求条件 + */ +- (void)layoutOtherMenuViewHiden:(BOOL)hide; + @end diff --git a/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHMessageTableViewController.m b/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHMessageTableViewController.m index 29b3969..cde70af 100644 --- a/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHMessageTableViewController.m +++ b/MessageDisplayKit/Classes/Controllers/XHMessageTableViewController/XHMessageTableViewController.m @@ -2,8 +2,8 @@ // XHMessageTableViewController.m // MessageDisplayExample // -// Created by qtone-1 on 14-4-24. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHMessageTableViewController.h" @@ -26,7 +26,7 @@ @interface XHMessageTableViewController () */ @property (nonatomic, assign) CGFloat keyboardViewHeight; -@property (nonatomic, assign) XHInputViewType textViewInputViewType; +@property (nonatomic, assign, readwrite) XHInputViewType textViewInputViewType; @property (nonatomic, weak, readwrite) XHMessageTableView *messageTableView; @property (nonatomic, weak, readwrite) XHMessageInputView *messageInputView; @@ -53,6 +53,11 @@ @interface XHMessageTableViewController () */ @property (nonatomic, strong) XHVoiceRecordHelper *voiceRecordHelper; +/** + * 判断是不是超出了录音最大时长 + */ +@property (nonatomic) BOOL isMaxTimeStop; + #pragma mark - DataSource Change /** * 改变数据源需要的子线程 @@ -182,14 +187,6 @@ - (void)didSendEmotionMessageWithEmotionPath:(NSString *)emotionPath; */ - (void)didSendGeolocationsMessageWithGeolocaltions:(NSString *)geolcations location:(CLLocation *)location; -#pragma mark - Other Menu View Frame Helper Mehtod -/** - * 根据显示或隐藏的需求对所有第三方Menu进行管理 - * - * @param hide 需求条件 - */ -- (void)layoutOtherMenuViewHiden:(BOOL)hide; - #pragma mark - Voice Recording Helper Method /** * 开始录音 @@ -256,35 +253,50 @@ - (void)removeMessageAtIndexPath:(NSIndexPath *)indexPath { static CGPoint delayOffset = {0.0}; // http://stackoverflow.com/a/11602040 Keep UITableView static when inserting rows at the top -- (void)insertOldMessages:(NSArray *)oldMessages { +- (void)insertOldMessages:(NSArray *)oldMessages completion:(void (^)())completion { WEAKSELF [self exChangeMessageDataSourceQueue:^{ - NSMutableArray *messages = [NSMutableArray arrayWithArray:oldMessages]; - [messages addObjectsFromArray:weakSelf.messages]; - delayOffset = weakSelf.messageTableView.contentOffset; - NSMutableArray *indexPaths = [NSMutableArray arrayWithCapacity:oldMessages.count]; + NSMutableArray *indexPaths = [[NSMutableArray alloc] initWithCapacity:oldMessages.count]; + NSMutableIndexSet *indexSets = [[NSMutableIndexSet alloc] init]; [oldMessages enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { NSIndexPath *indexPath = [NSIndexPath indexPathForRow:idx inSection:0]; [indexPaths addObject:indexPath]; - delayOffset.y += [weakSelf calculateCellHeightWithMessage:[messages objectAtIndex:idx] atIndexPath:indexPath]; + delayOffset.y += [weakSelf calculateCellHeightWithMessage:[oldMessages objectAtIndex:idx] atIndexPath:indexPath]; + [indexSets addIndex:idx]; }]; + NSMutableArray *messages = [[NSMutableArray alloc] initWithArray:weakSelf.messages]; + [messages insertObjects:oldMessages atIndexes:indexSets]; + + [weakSelf exMainQueue:^{ [UIView setAnimationsEnabled:NO]; - [weakSelf.messageTableView beginUpdates]; + weakSelf.messageTableView.userInteractionEnabled = NO; + //[self.messageTableView beginUpdates]; + weakSelf.messages = messages; + [weakSelf.messageTableView insertRowsAtIndexPaths:indexPaths withRowAnimation:UITableViewRowAnimationNone]; - [weakSelf.messageTableView setContentOffset:delayOffset animated:NO]; - [weakSelf.messageTableView endUpdates]; + //[self.messageTableView endUpdates]; + [UIView setAnimationsEnabled:YES]; + [weakSelf.messageTableView setContentOffset:delayOffset animated:NO]; + weakSelf.messageTableView.userInteractionEnabled = YES; + if (completion) { + completion(); + } }]; }]; } +- (void)insertOldMessages:(NSArray *)oldMessages { + [self insertOldMessages:oldMessages completion:nil]; +} + #pragma mark - Propertys - (NSMutableArray *)messages { @@ -317,6 +329,10 @@ - (void)setLoadingMoreMessage:(BOOL)loadingMoreMessage { [self.loadMoreActivityIndicatorView stopAnimating]; } } +- (void)setLoadMoreActivityIndicatorViewStyle:(UIActivityIndicatorViewStyle)loadMoreActivityIndicatorViewStyle { + _loadMoreActivityIndicatorViewStyle = loadMoreActivityIndicatorViewStyle; + self.loadMoreActivityIndicatorView.activityIndicatorViewStyle = loadMoreActivityIndicatorViewStyle; +} - (XHShareMenuView *)shareMenuView { if (!_shareMenuView) { @@ -369,10 +385,19 @@ - (XHLocationHelper *)locationHelper { - (XHVoiceRecordHelper *)voiceRecordHelper { if (!_voiceRecordHelper) { + _isMaxTimeStop = NO; + WEAKSELF _voiceRecordHelper = [[XHVoiceRecordHelper alloc] init]; _voiceRecordHelper.maxTimeStopRecorderCompletion = ^{ DLog(@"已经达到最大限制时间了,进入下一步的提示"); + + // Unselect and unhilight the hold down button, and set isMaxTimeStop to YES. + UIButton *holdDown = weakSelf.messageInputView.holdDownButton; + holdDown.selected = NO; + holdDown.highlighted = NO; + weakSelf.isMaxTimeStop = YES; + [weakSelf finishRecorded]; }; _voiceRecordHelper.peakPowerForChannel = ^(float peakPowerForChannel) { @@ -429,27 +454,27 @@ - (void)setBackgroundImage:(UIImage *)backgroundImage { } - (void)scrollToBottomAnimated:(BOOL)animated { - if (![self shouldAllowScroll]) + if (![self shouldAllowScroll]) return; - + NSInteger rows = [self.messageTableView numberOfRowsInSection:0]; if (rows > 0) { [self.messageTableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:rows - 1 inSection:0] - atScrollPosition:UITableViewScrollPositionBottom - animated:animated]; + atScrollPosition:UITableViewScrollPositionBottom + animated:animated]; } } - (void)scrollToRowAtIndexPath:(NSIndexPath *)indexPath - atScrollPosition:(UITableViewScrollPosition)position - animated:(BOOL)animated { - if (![self shouldAllowScroll]) + atScrollPosition:(UITableViewScrollPosition)position + animated:(BOOL)animated { + if (![self shouldAllowScroll]) return; - - [self.messageTableView scrollToRowAtIndexPath:indexPath - atScrollPosition:position - animated:animated]; + + [self.messageTableView scrollToRowAtIndexPath:indexPath + atScrollPosition:position + animated:animated]; } #pragma mark - Previte Method @@ -496,14 +521,19 @@ - (void)initilzer { if ([self respondsToSelector:@selector(automaticallyAdjustsScrollViewInsets)]) { self.automaticallyAdjustsScrollViewInsets = NO; } + + if ([self respondsToSelector:@selector(edgesForExtendedLayout)]) { + self.edgesForExtendedLayout = UIRectEdgeNone; + } + // 默认设置用户滚动为NO _isUserScrolling = NO; // 初始化message tableView - XHMessageTableView *messageTableView = [[XHMessageTableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain]; - messageTableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; - messageTableView.dataSource = self; - messageTableView.delegate = self; + XHMessageTableView *messageTableView = [[XHMessageTableView alloc] initWithFrame:self.view.bounds style:UITableViewStylePlain]; + messageTableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; + messageTableView.dataSource = self; + messageTableView.delegate = self; messageTableView.separatorColor = [UIColor clearColor]; messageTableView.separatorStyle = UITableViewCellSeparatorStyleNone; @@ -516,7 +546,7 @@ - (void)initilzer { } [self.view addSubview:messageTableView]; [self.view sendSubviewToBack:messageTableView]; - _messageTableView = messageTableView; + _messageTableView = messageTableView; // 设置Message TableView 的bottom edg CGFloat inputViewHeight = (self.inputViewStyle == XHMessageInputViewStyleFlat) ? 45.0f : 40.0f; @@ -559,7 +589,7 @@ - (void)initilzer { } // block回调键盘通知 - self.messageTableView.keyboardWillChange = ^(CGRect keyboardRect, UIViewAnimationOptions options, double duration, BOOL showKeyborad) { + self.messageTableView.keyboardWillChange = ^(CGRect keyboardRect, UIViewAnimationOptions options, double duration, BOOL showKeyboard) { if (weakSelf.textViewInputViewType == XHInputViewTypeText) { [UIView animateWithDuration:duration delay:0.0 @@ -582,7 +612,7 @@ - (void)initilzer { [weakSelf setTableViewInsetsWithBottomValue:weakSelf.view.frame.size.height - weakSelf.messageInputView.frame.origin.y]; - if (showKeyborad) + if (showKeyboard) [weakSelf scrollToBottomAnimated:NO]; } completion:nil]; @@ -627,27 +657,31 @@ - (void)viewWillAppear:(BOOL)animated { // KVO 检查contentSize [self.messageInputView.inputTextView addObserver:self - forKeyPath:@"contentSize" - options:NSKeyValueObservingOptionNew - context:nil]; + forKeyPath:@"contentSize" + options:NSKeyValueObservingOptionNew + context:nil]; + + [self.messageInputView.inputTextView setEditable:YES]; } - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; - // 取消输入框 - [self.messageInputView.inputTextView resignFirstResponder]; - [self setEditing:NO animated:YES]; + + if (self.textViewInputViewType != XHInputViewTypeNormal) { + [self layoutOtherMenuViewHiden:YES]; + } // remove键盘通知或者手势 [self.messageTableView disSetupPanGestureControlKeyboardHide:self.allowsPanToDismissKeyboard]; // remove KVO [self.messageInputView.inputTextView removeObserver:self forKeyPath:@"contentSize"]; + [self.messageInputView.inputTextView setEditable:NO]; } - (void)viewDidLoad { [super viewDidLoad]; - // Do any additional setup after loading the view. + // Do any additional setup after loading the view. // 初始化消息页面布局 [self initilzer]; [[XHMessageBubbleView appearance] setFont:[UIFont systemFontOfSize:16.0f]]; @@ -677,7 +711,12 @@ - (BOOL)shouldAutorotate { return NO; } -- (NSUInteger)supportedInterfaceOrientations { +#if __IPHONE_OS_VERSION_MAX_ALLOWED < __IPHONE_9_0 +- (NSUInteger)supportedInterfaceOrientations +#else +- (UIInterfaceOrientationMask)supportedInterfaceOrientations +#endif +{ return UIInterfaceOrientationMaskPortrait; } @@ -689,13 +728,11 @@ - (UIInterfaceOrientation)preferredInterfaceOrientationForPresentation { - (NSString *)getRecorderPath { NSString *recorderPath = nil; + recorderPath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) objectAtIndex: 0]; NSDate *now = [NSDate date]; NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; - dateFormatter.dateFormat = @"yy-MMMM-dd"; - recorderPath = [[NSString alloc] initWithFormat:@"%@/Documents/", NSHomeDirectory()]; -// dateFormatter.dateFormat = @"hh-mm-ss"; - dateFormatter.dateFormat = @"yyyy-MM-dd-hh-mm-ss"; - recorderPath = [recorderPath stringByAppendingFormat:@"%@-MySound.caf", [dateFormatter stringFromDate:now]]; + [dateFormatter setDateFormat:@"yyyyMMddHHmmssSSS"]; + recorderPath = [recorderPath stringByAppendingFormat:@"%@-MySound.m4a", [dateFormatter stringFromDate:now]]; return recorderPath; } @@ -786,7 +823,7 @@ - (UIEdgeInsets)tableViewInsetsWithBottomValue:(CGFloat)bottom { UIEdgeInsets insets = UIEdgeInsetsZero; if ([self respondsToSelector:@selector(topLayoutGuide)]) { - insets.top = 64; + insets.top = self.topLayoutGuide.length; } insets.bottom = bottom; @@ -923,7 +960,9 @@ - (void)layoutOtherMenuViewHiden:(BOOL)hide { [self scrollToBottomAnimated:NO]; } completion:^(BOOL finished) { - + if (hide) { + self.textViewInputViewType = XHInputViewTypeNormal; + } }]; } @@ -975,7 +1014,7 @@ - (void)inputTextViewWillBeginEditing:(XHMessageTextView *)messageInputTextView - (void)inputTextViewDidBeginEditing:(XHMessageTextView *)messageInputTextView { if (!self.previousTextViewContentHeight) - self.previousTextViewContentHeight = [self getTextViewContentH:messageInputTextView]; + self.previousTextViewContentHeight = [self getTextViewContentH:messageInputTextView]; } - (void)didChangeSendVoiceAction:(BOOL)changed { @@ -1026,7 +1065,11 @@ - (void)didCancelRecordingVoiceAction { - (void)didFinishRecoingVoiceAction { DLog(@"didFinishRecoingVoice"); - [self finishRecorded]; + if (self.isMaxTimeStop == NO) { + [self finishRecorded]; + } else { + self.isMaxTimeStop = NO; + } } - (void)didDragOutsideAction { @@ -1090,6 +1133,9 @@ - (void)didSelecteShareMenuItem:(XHShareMenuItem *)shareMenuItem atIndex:(NSInte }]; break; } + case 4:{ + break; + } default: break; } @@ -1098,9 +1144,7 @@ - (void)didSelecteShareMenuItem:(XHShareMenuItem *)shareMenuItem atIndex:(NSInte #pragma mark - XHEmotionManagerView Delegate - (void)didSelecteEmotion:(XHEmotion *)emotion atIndexPath:(NSIndexPath *)indexPath { - if (emotion.emotionPath) { - [self didSendEmotionMessageWithEmotionPath:emotion.emotionPath]; - } + [self didSendEmotionMessageWithEmotionPath:emotion.emotionPath]; } #pragma mark - XHEmotionManagerView DataSource @@ -1123,7 +1167,7 @@ - (void)scrollViewDidScroll:(UIScrollView *)scrollView { if ([self.delegate respondsToSelector:@selector(shouldLoadMoreMessagesScrollToTop)]) { BOOL shouldLoadMoreMessages = [self.delegate shouldLoadMoreMessagesScrollToTop]; if (shouldLoadMoreMessages) { - if (scrollView.contentOffset.y >=0 && scrollView.contentOffset.y <= 44) { + if (scrollView.contentOffset.y >= 0 && scrollView.contentOffset.y <= 44) { if (!self.loadingMoreMessage) { if ([self.delegate respondsToSelector:@selector(loadMoreMessagesScrollTotop)]) { [self.delegate loadMoreMessagesScrollTotop]; @@ -1135,7 +1179,7 @@ - (void)scrollViewDidScroll:(UIScrollView *)scrollView { } - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView { - self.isUserScrolling = YES; + self.isUserScrolling = YES; UIMenuController *menu = [UIMenuController sharedMenuController]; if (menu.isMenuVisible) { @@ -1177,6 +1221,12 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N id message = [self.dataSource messageForRowAtIndexPath:indexPath]; + // 如果需要定制复杂的业务UI,那么就实现该DataSource方法 + if ([self.dataSource respondsToSelector:@selector(tableView:cellForRowAtIndexPath:targetMessage:)]) { + UITableViewCell *tableViewCell = [self.dataSource tableView:tableView cellForRowAtIndexPath:indexPath targetMessage:message]; + return tableViewCell; + } + BOOL displayTimestamp = YES; if ([self.delegate respondsToSelector:@selector(shouldDisplayTimestampForRowAtIndexPath:)]) { displayTimestamp = [self.delegate shouldDisplayTimestampForRowAtIndexPath:indexPath]; @@ -1206,7 +1256,17 @@ - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(N - (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { id message = [self.dataSource messageForRowAtIndexPath:indexPath]; - return [self calculateCellHeightWithMessage:message atIndexPath:indexPath]; + + CGFloat calculateCellHeight = 0; + + if ([self.delegate respondsToSelector:@selector(tableView:heightForRowAtIndexPath:targetMessage:)]) { + calculateCellHeight = [self.delegate tableView:tableView heightForRowAtIndexPath:indexPath targetMessage:message]; + return calculateCellHeight; + } else { + calculateCellHeight = [self calculateCellHeightWithMessage:message atIndexPath:indexPath]; + } + + return calculateCellHeight; } #pragma mark - Key-value Observing diff --git a/MessageDisplayKit/Classes/Controllers/XHMultipleSectionTableViewController/XHMultipleSectionTableViewController.h b/MessageDisplayKit/Classes/Controllers/XHMultipleSectionTableViewController/XHMultipleSectionTableViewController.h deleted file mode 100644 index 0d74d18..0000000 --- a/MessageDisplayKit/Classes/Controllers/XHMultipleSectionTableViewController/XHMultipleSectionTableViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// XHMultipleSectionTableViewController.h -// MessageDisplayExample -// -// Created by 曾 宪华 on 14-5-22. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import "XHBaseTableViewController.h" - -@interface XHMultipleSectionTableViewController : XHBaseTableViewController - -@end diff --git a/MessageDisplayKit/Classes/Controllers/XHNewsTableViewController/XHNewsTableViewController.h b/MessageDisplayKit/Classes/Controllers/XHNewsTableViewController/XHNewsTableViewController.h deleted file mode 100644 index 3aca77e..0000000 --- a/MessageDisplayKit/Classes/Controllers/XHNewsTableViewController/XHNewsTableViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// XHNewsTableViewController.h -// MessageDisplayExample -// -// Created by 曾 宪华 on 14-5-29. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import "XHBaseTableViewController.h" - -@interface XHNewsTableViewController : XHBaseTableViewController - -@end diff --git a/MessageDisplayKit/Classes/Controllers/XHProfileTableViewController/XHMoreExpressionShopsTableViewController/XHExpressionDetailTableViewController.h b/MessageDisplayKit/Classes/Controllers/XHProfileTableViewController/XHMoreExpressionShopsTableViewController/XHExpressionDetailTableViewController.h deleted file mode 100644 index 15b6975..0000000 --- a/MessageDisplayKit/Classes/Controllers/XHProfileTableViewController/XHMoreExpressionShopsTableViewController/XHExpressionDetailTableViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// XHExpressionDetailTableViewController.h -// MessageDisplayExample -// -// Created by 曾 宪华 on 14-5-29. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import "XHBaseTableViewController.h" - -@interface XHExpressionDetailTableViewController : XHBaseTableViewController - -@end diff --git a/MessageDisplayKit/Classes/Controllers/XHProfileTableViewController/XHMoreMyAlbumTableViewController/XHMoreMyAlbumTableViewController.h b/MessageDisplayKit/Classes/Controllers/XHProfileTableViewController/XHMoreMyAlbumTableViewController/XHMoreMyAlbumTableViewController.h deleted file mode 100644 index a9ccd4b..0000000 --- a/MessageDisplayKit/Classes/Controllers/XHProfileTableViewController/XHMoreMyAlbumTableViewController/XHMoreMyAlbumTableViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// XHMoreMyAlbumTableViewController.h -// MessageDisplayExample -// -// Created by 曾 宪华 on 14-5-22. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import "XHAlbumTableViewController.h" - -@interface XHMoreMyAlbumTableViewController : XHAlbumTableViewController - -@end diff --git a/MessageDisplayKit/Classes/Controllers/XHProfileTableViewController/XHMoreMyBankCardTableViewController/XHMoreMyBankCardTableViewController.h b/MessageDisplayKit/Classes/Controllers/XHProfileTableViewController/XHMoreMyBankCardTableViewController/XHMoreMyBankCardTableViewController.h deleted file mode 100644 index 409ca1d..0000000 --- a/MessageDisplayKit/Classes/Controllers/XHProfileTableViewController/XHMoreMyBankCardTableViewController/XHMoreMyBankCardTableViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// XHMoreMyBankCardTableViewController.h -// MessageDisplayExample -// -// Created by 曾 宪华 on 14-5-22. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import "XHBaseTableViewController.h" - -@interface XHMoreMyBankCardTableViewController : XHBaseTableViewController - -@end diff --git a/MessageDisplayKit/Classes/Controllers/XHProfileTableViewController/XHMoreMyFavoritesTableViewController/XHMoreMyFavoritesTableViewController.h b/MessageDisplayKit/Classes/Controllers/XHProfileTableViewController/XHMoreMyFavoritesTableViewController/XHMoreMyFavoritesTableViewController.h deleted file mode 100644 index 6f78ded..0000000 --- a/MessageDisplayKit/Classes/Controllers/XHProfileTableViewController/XHMoreMyFavoritesTableViewController/XHMoreMyFavoritesTableViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// XHMoreMyFavoritesTableViewController.h -// MessageDisplayExample -// -// Created by 曾 宪华 on 14-5-22. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import "XHBaseTableViewController.h" - -@interface XHMoreMyFavoritesTableViewController : XHBaseTableViewController - -@end diff --git a/MessageDisplayKit/Classes/Controllers/XHProfileTableViewController/XHMoreMyProfileDetailTableViewController/XHMoreMyProfileDetailTableViewController.h b/MessageDisplayKit/Classes/Controllers/XHProfileTableViewController/XHMoreMyProfileDetailTableViewController/XHMoreMyProfileDetailTableViewController.h deleted file mode 100644 index 719a6e1..0000000 --- a/MessageDisplayKit/Classes/Controllers/XHProfileTableViewController/XHMoreMyProfileDetailTableViewController/XHMoreMyProfileDetailTableViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// XHMoreMyProfileDetailTableViewController.h -// MessageDisplayExample -// -// Created by 曾 宪华 on 14-5-22. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import "XHBaseTableViewController.h" - -@interface XHMoreMyProfileDetailTableViewController : XHBaseTableViewController - -@end diff --git a/MessageDisplayKit/Classes/Controllers/XHProfileTableViewController/XHProfileTableViewController.h b/MessageDisplayKit/Classes/Controllers/XHProfileTableViewController/XHProfileTableViewController.h deleted file mode 100644 index 2e45c8d..0000000 --- a/MessageDisplayKit/Classes/Controllers/XHProfileTableViewController/XHProfileTableViewController.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// XHProfileTableViewController.h -// MessageDisplayExample -// -// Created by qtone-1 on 14-5-10. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import "XHMultipleSectionTableViewController.h" - -@interface XHProfileTableViewController : XHMultipleSectionTableViewController - -@end diff --git a/MessageDisplayKit/Classes/Core/Cache/XHCacheManager.h b/MessageDisplayKit/Classes/Core/Cache/XHCacheManager.h index bb10ba8..5b5bea6 100644 --- a/MessageDisplayKit/Classes/Core/Cache/XHCacheManager.h +++ b/MessageDisplayKit/Classes/Core/Cache/XHCacheManager.h @@ -3,10 +3,11 @@ // XHImageViewer // // Created by 曾 宪华 on 14-2-18. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import +#import @interface XHCacheManager : NSObject diff --git a/MessageDisplayKit/Classes/Core/Cache/XHCacheManager.m b/MessageDisplayKit/Classes/Core/Cache/XHCacheManager.m index 16d1299..402d234 100644 --- a/MessageDisplayKit/Classes/Core/Cache/XHCacheManager.m +++ b/MessageDisplayKit/Classes/Core/Cache/XHCacheManager.m @@ -3,7 +3,7 @@ // XHImageViewer // // Created by 曾 宪华 on 14-2-18. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHCacheManager.h" diff --git a/MessageDisplayKit/Classes/Core/Cache/XHFileAttribute.h b/MessageDisplayKit/Classes/Core/Cache/XHFileAttribute.h index 5c33dd1..5068d7e 100644 --- a/MessageDisplayKit/Classes/Core/Cache/XHFileAttribute.h +++ b/MessageDisplayKit/Classes/Core/Cache/XHFileAttribute.h @@ -3,7 +3,7 @@ // XHImageViewer // // Created by 曾 宪华 on 14-2-18. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Core/Cache/XHFileAttribute.m b/MessageDisplayKit/Classes/Core/Cache/XHFileAttribute.m index 65e6146..9030d91 100644 --- a/MessageDisplayKit/Classes/Core/Cache/XHFileAttribute.m +++ b/MessageDisplayKit/Classes/Core/Cache/XHFileAttribute.m @@ -3,7 +3,7 @@ // XHImageViewer // // Created by 曾 宪华 on 14-2-18. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHFileAttribute.h" diff --git a/MessageDisplayKit/Classes/Core/Network/XHHTTPClient.h b/MessageDisplayKit/Classes/Core/Network/XHHTTPClient.h index 557a726..371bc96 100644 --- a/MessageDisplayKit/Classes/Core/Network/XHHTTPClient.h +++ b/MessageDisplayKit/Classes/Core/Network/XHHTTPClient.h @@ -3,7 +3,7 @@ // MessageDisplayExample // // Created by 曾 宪华 on 14-5-30. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Core/Network/XHHTTPClient.m b/MessageDisplayKit/Classes/Core/Network/XHHTTPClient.m index ffe598b..21181a7 100644 --- a/MessageDisplayKit/Classes/Core/Network/XHHTTPClient.m +++ b/MessageDisplayKit/Classes/Core/Network/XHHTTPClient.m @@ -3,7 +3,7 @@ // MessageDisplayExample // // Created by 曾 宪华 on 14-5-30. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHHTTPClient.h" diff --git a/MessageDisplayKit/Classes/Core/Network/XHOperationNetworkKit.h b/MessageDisplayKit/Classes/Core/Network/XHOperationNetworkKit.h index 63d458a..a7fb34b 100644 --- a/MessageDisplayKit/Classes/Core/Network/XHOperationNetworkKit.h +++ b/MessageDisplayKit/Classes/Core/Network/XHOperationNetworkKit.h @@ -3,7 +3,7 @@ // MessageDisplayExample // // Created by 曾 宪华 on 14-6-10. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Core/Network/XHOperationNetworkKit.m b/MessageDisplayKit/Classes/Core/Network/XHOperationNetworkKit.m index 5bcacc9..2ed3af2 100644 --- a/MessageDisplayKit/Classes/Core/Network/XHOperationNetworkKit.m +++ b/MessageDisplayKit/Classes/Core/Network/XHOperationNetworkKit.m @@ -3,7 +3,7 @@ // MessageDisplayExample // // Created by 曾 宪华 on 14-6-10. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHOperationNetworkKit.h" @@ -29,6 +29,7 @@ + (NSOperationQueue *)queue; @end @implementation XHOperationNetworkKit +@synthesize finished = _finished; + (NSOperationQueue *)queue { static NSOperationQueue *queue; diff --git a/MessageDisplayKit/Classes/Factorys/XHMessageAvatarFactory.h b/MessageDisplayKit/Classes/Factorys/XHMessageAvatarFactory.h new file mode 100644 index 0000000..f7af289 --- /dev/null +++ b/MessageDisplayKit/Classes/Factorys/XHMessageAvatarFactory.h @@ -0,0 +1,26 @@ +// +// XHMessageAvatarFactory.h +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-25. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import + +// 头像大小以及头像与其他控件的距离 +static CGFloat const kXHAvatarImageSize = 40.0f; +static CGFloat const kXHAlbumAvatarSpacing = 15.0f; + +typedef NS_ENUM(NSInteger, XHMessageAvatarType) { + XHMessageAvatarTypeNormal = 0, + XHMessageAvatarTypeSquare, + XHMessageAvatarTypeCircle +}; + +@interface XHMessageAvatarFactory : NSObject + ++ (UIImage *)avatarImageNamed:(UIImage *)originImage + messageAvatarType:(XHMessageAvatarType)type; + +@end diff --git a/MessageDisplayKit/Classes/Factorys/XHMessageAvatarFactory.m b/MessageDisplayKit/Classes/Factorys/XHMessageAvatarFactory.m new file mode 100644 index 0000000..a68bbf4 --- /dev/null +++ b/MessageDisplayKit/Classes/Factorys/XHMessageAvatarFactory.m @@ -0,0 +1,34 @@ +// +// XHMessageAvatarFactory.m +// MessageDisplayExample +// +// Created by HUAJIE-1 on 14-4-25. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. +// + +#import "XHMessageAvatarFactory.h" +#import "UIImage+XHRounded.h" + +@implementation XHMessageAvatarFactory + ++ (UIImage *)avatarImageNamed:(UIImage *)originImage + messageAvatarType:(XHMessageAvatarType)messageAvatarType { + CGFloat radius = 0.0; + switch (messageAvatarType) { + case XHMessageAvatarTypeNormal: + return originImage; + break; + case XHMessageAvatarTypeCircle: + radius = originImage.size.width / 2.0; + break; + case XHMessageAvatarTypeSquare: + radius = 8; + break; + default: + break; + } + UIImage *avatar = [originImage createRoundedWithRadius:radius]; + return avatar; +} + +@end diff --git a/MessageDisplayKit/Classes/Factorys/XHMessageAvatorFactory.m b/MessageDisplayKit/Classes/Factorys/XHMessageAvatorFactory.m deleted file mode 100644 index f4cc310..0000000 --- a/MessageDisplayKit/Classes/Factorys/XHMessageAvatorFactory.m +++ /dev/null @@ -1,34 +0,0 @@ -// -// XHMessageAvatorFactory.m -// MessageDisplayExample -// -// Created by qtone-1 on 14-4-25. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import "XHMessageAvatorFactory.h" -#import "UIImage+XHRounded.h" - -@implementation XHMessageAvatorFactory - -+ (UIImage *)avatarImageNamed:(UIImage *)originImage - messageAvatorType:(XHMessageAvatorType)messageAvatorType { - CGFloat radius = 0.0; - switch (messageAvatorType) { - case XHMessageAvatorTypeNormal: - return originImage; - break; - case XHMessageAvatorTypeCircle: - radius = originImage.size.width / 2.0; - break; - case XHMessageAvatorTypeSquare: - radius = 8; - break; - default: - break; - } - UIImage *avator = [originImage createRoundedWithRadius:radius]; - return avator; -} - -@end diff --git a/MessageDisplayKit/Classes/Factorys/XHMessageBubbleFactory.h b/MessageDisplayKit/Classes/Factorys/XHMessageBubbleFactory.h index a017493..900f725 100644 --- a/MessageDisplayKit/Classes/Factorys/XHMessageBubbleFactory.h +++ b/MessageDisplayKit/Classes/Factorys/XHMessageBubbleFactory.h @@ -2,15 +2,15 @@ // XHMessageBubbleFactory.h // MessageDisplayExample // -// Created by qtone-1 on 14-4-25. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-25. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import typedef NS_ENUM(NSInteger, XHBubbleMessageType) { - XHBubbleMessageTypeSending = 0, - XHBubbleMessageTypeReceiving + XHBubbleMessageTypeSending = 0, // 发送 + XHBubbleMessageTypeReceiving // 接收 }; typedef NS_ENUM(NSUInteger, XHBubbleImageViewStyle) { diff --git a/MessageDisplayKit/Classes/Factorys/XHMessageBubbleFactory.m b/MessageDisplayKit/Classes/Factorys/XHMessageBubbleFactory.m index 7381eeb..937f70a 100644 --- a/MessageDisplayKit/Classes/Factorys/XHMessageBubbleFactory.m +++ b/MessageDisplayKit/Classes/Factorys/XHMessageBubbleFactory.m @@ -2,12 +2,13 @@ // XHMessageBubbleFactory.m // MessageDisplayExample // -// Created by qtone-1 on 14-4-25. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-25. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHMessageBubbleFactory.h" #import "XHMacro.h" +#import "XHConfigurationHelper.h" @implementation XHMessageBubbleFactory @@ -51,10 +52,22 @@ + (UIImage *)bubbleImageViewForType:(XHBubbleMessageType)type break; } + if (type == XHBubbleMessageTypeReceiving) { + NSString *receivingSolidImageName = [[XHConfigurationHelper appearance].messageTableStyle objectForKey:kXHMessageTableReceivingSolidImageNameKey]; + if (receivingSolidImageName) { + messageTypeString = receivingSolidImageName; + } + } else { + NSString *sendingSolidImageName = [[XHConfigurationHelper appearance].messageTableStyle objectForKey:kXHMessageTableSendingSolidImageNameKey]; + if (sendingSolidImageName) { + messageTypeString = sendingSolidImageName; + } + } UIImage *bublleImage = [UIImage imageNamed:messageTypeString]; UIEdgeInsets bubbleImageEdgeInsets = [self bubbleImageEdgeInsetsWithStyle:style]; - return XH_STRETCH_IMAGE(bublleImage, bubbleImageEdgeInsets); + UIImage *edgeBubbleImage = XH_STRETCH_IMAGE(bublleImage, bubbleImageEdgeInsets); + return edgeBubbleImage; } + (UIEdgeInsets)bubbleImageEdgeInsetsWithStyle:(XHBubbleImageViewStyle)style { diff --git a/MessageDisplayKit/Classes/Factorys/XHMessageVideoConverPhotoFactory.h b/MessageDisplayKit/Classes/Factorys/XHMessageVideoConverPhotoFactory.h index c240c8f..bdb46ac 100644 --- a/MessageDisplayKit/Classes/Factorys/XHMessageVideoConverPhotoFactory.h +++ b/MessageDisplayKit/Classes/Factorys/XHMessageVideoConverPhotoFactory.h @@ -2,8 +2,8 @@ // XHMessageVideoConverPhotoFactory.h // MessageDisplayExample // -// Created by qtone-1 on 14-5-9. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-9. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Factorys/XHMessageVideoConverPhotoFactory.m b/MessageDisplayKit/Classes/Factorys/XHMessageVideoConverPhotoFactory.m index 195bad8..d5425c3 100644 --- a/MessageDisplayKit/Classes/Factorys/XHMessageVideoConverPhotoFactory.m +++ b/MessageDisplayKit/Classes/Factorys/XHMessageVideoConverPhotoFactory.m @@ -2,8 +2,8 @@ // XHMessageVideoConverPhotoFactory.m // MessageDisplayExample // -// Created by qtone-1 on 14-5-9. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-9. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHMessageVideoConverPhotoFactory.h" diff --git a/MessageDisplayKit/Classes/Factorys/XHMessageVoiceFactory.h b/MessageDisplayKit/Classes/Factorys/XHMessageVoiceFactory.h index 5c32f0e..a0059aa 100644 --- a/MessageDisplayKit/Classes/Factorys/XHMessageVoiceFactory.h +++ b/MessageDisplayKit/Classes/Factorys/XHMessageVoiceFactory.h @@ -2,8 +2,8 @@ // XHMessageVoiceFactory.h // MessageDisplayExample // -// Created by qtone-1 on 14-4-28. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-28. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Factorys/XHMessageVoiceFactory.m b/MessageDisplayKit/Classes/Factorys/XHMessageVoiceFactory.m index c5e7fe5..4110d8b 100644 --- a/MessageDisplayKit/Classes/Factorys/XHMessageVoiceFactory.m +++ b/MessageDisplayKit/Classes/Factorys/XHMessageVoiceFactory.m @@ -2,8 +2,8 @@ // XHMessageVoiceFactory.m // MessageDisplayExample // -// Created by qtone-1 on 14-4-28. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-28. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHMessageVoiceFactory.h" @@ -11,7 +11,7 @@ @implementation XHMessageVoiceFactory + (UIImageView *)messageVoiceAnimationImageViewWithBubbleMessageType:(XHBubbleMessageType)type { - UIImageView *messageVoiceAniamtionImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 20, 20)]; + UIImageView *messageVoiceAniamtionImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 14, 17)]; NSString *imageSepatorName; switch (type) { case XHBubbleMessageTypeSending: diff --git a/MessageDisplayKit/Classes/Factorys/XHVideoOutputSampleBufferFactory.h b/MessageDisplayKit/Classes/Factorys/XHVideoOutputSampleBufferFactory.h index d5a195c..62acf43 100644 --- a/MessageDisplayKit/Classes/Factorys/XHVideoOutputSampleBufferFactory.h +++ b/MessageDisplayKit/Classes/Factorys/XHVideoOutputSampleBufferFactory.h @@ -3,7 +3,7 @@ // MessageDisplayExample // // Created by 曾 宪华 on 14-5-25. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Factorys/XHVideoOutputSampleBufferFactory.m b/MessageDisplayKit/Classes/Factorys/XHVideoOutputSampleBufferFactory.m index 2548a35..2e44371 100644 --- a/MessageDisplayKit/Classes/Factorys/XHVideoOutputSampleBufferFactory.m +++ b/MessageDisplayKit/Classes/Factorys/XHVideoOutputSampleBufferFactory.m @@ -3,7 +3,7 @@ // MessageDisplayExample // // Created by 曾 宪华 on 14-5-25. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHVideoOutputSampleBufferFactory.h" diff --git a/MessageDisplayKit/Classes/Macro/XHFoundationMacro.h b/MessageDisplayKit/Classes/Macro/XHFoundationMacro.h index 3ae8cda..40dbcb9 100644 --- a/MessageDisplayKit/Classes/Macro/XHFoundationMacro.h +++ b/MessageDisplayKit/Classes/Macro/XHFoundationMacro.h @@ -3,7 +3,7 @@ // MessageDisplayExample // // Created by dw_iOS on 14-5-22. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #ifndef MessageDisplayExample_XHFoundationMacro_h @@ -22,8 +22,15 @@ // device verson float value #define CURRENT_SYS_VERSION [[[UIDevice currentDevice] systemVersion] floatValue] +// Size +#define MDK_SCREEN_WIDTH [[UIScreen mainScreen] bounds].size.width +#define MDK_SCREEN_HEIGHT [[UIScreen mainScreen] bounds].size.height + // iPad #define kIsiPad (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) +#define kIs_iPhone (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) +#define kIs_iPhone_6 (kIs_iPhone && MDK_SCREEN_HEIGHT == 667.0) +#define kIs_iPhone_6P (kIs_iPhone && MDK_SCREEN_HEIGHT == 736.0) // image STRETCH #define XH_STRETCH_IMAGE(image, edgeInsets) (CURRENT_SYS_VERSION < 6.0 ? [image stretchableImageWithLeftCapWidth:edgeInsets.left topCapHeight:edgeInsets.top] : [image resizableImageWithCapInsets:edgeInsets resizingMode:UIImageResizingModeStretch]) diff --git a/MessageDisplayKit/Classes/Macro/XHMacro.h b/MessageDisplayKit/Classes/Macro/XHMacro.h index a8799bd..251db90 100644 --- a/MessageDisplayKit/Classes/Macro/XHMacro.h +++ b/MessageDisplayKit/Classes/Macro/XHMacro.h @@ -2,8 +2,8 @@ // XHMacro.h // MessageDisplayExample // -// Created by qtone-1 on 14-4-24. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #ifndef MessageDisplayExample_XHMacro_h diff --git a/MessageDisplayKit/Classes/Macro/XHUIKitMacro.h b/MessageDisplayKit/Classes/Macro/XHUIKitMacro.h index 7162930..1ce2881 100644 --- a/MessageDisplayKit/Classes/Macro/XHUIKitMacro.h +++ b/MessageDisplayKit/Classes/Macro/XHUIKitMacro.h @@ -3,7 +3,7 @@ // MessageDisplayExample // // Created by dw_iOS on 14-5-22. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #ifndef MessageDisplayExample_XHUIKitMacro_h diff --git a/MessageDisplayKit/Classes/Models/XHAnnotation.h b/MessageDisplayKit/Classes/Models/XHAnnotation.h index 9a1bd67..a21d0f6 100644 --- a/MessageDisplayKit/Classes/Models/XHAnnotation.h +++ b/MessageDisplayKit/Classes/Models/XHAnnotation.h @@ -2,8 +2,8 @@ // XHAnnotation.h // MessageDisplayExample // -// Created by qtone-1 on 14-5-9. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-9. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Models/XHAnnotation.m b/MessageDisplayKit/Classes/Models/XHAnnotation.m index aba9d1b..37e6d00 100644 --- a/MessageDisplayKit/Classes/Models/XHAnnotation.m +++ b/MessageDisplayKit/Classes/Models/XHAnnotation.m @@ -2,8 +2,8 @@ // XHAnnotation.m // MessageDisplayExample // -// Created by qtone-1 on 14-5-9. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-9. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHAnnotation.h" diff --git a/MessageDisplayKit/Classes/Models/XHEmotion.h b/MessageDisplayKit/Classes/Models/XHEmotion.h index 48cd821..4050256 100644 --- a/MessageDisplayKit/Classes/Models/XHEmotion.h +++ b/MessageDisplayKit/Classes/Models/XHEmotion.h @@ -2,14 +2,14 @@ // XHEmotion.h // MessageDisplayExample // -// Created by qtone-1 on 14-5-3. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-3. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import #define kXHEmotionImageViewSize 60 -#define kXHEmotionMinimumLineSpacing 16 +#define kXHEmotionMinimumLineSpacing 12 @interface XHEmotion : NSObject diff --git a/MessageDisplayKit/Classes/Models/XHEmotion.m b/MessageDisplayKit/Classes/Models/XHEmotion.m index 8e1761e..4c1b924 100644 --- a/MessageDisplayKit/Classes/Models/XHEmotion.m +++ b/MessageDisplayKit/Classes/Models/XHEmotion.m @@ -2,8 +2,8 @@ // XHEmotion.m // MessageDisplayExample // -// Created by qtone-1 on 14-5-3. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-3. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHEmotion.h" diff --git a/MessageDisplayKit/Classes/Models/XHEmotionManager.h b/MessageDisplayKit/Classes/Models/XHEmotionManager.h index 9f8c9a9..eec7880 100644 --- a/MessageDisplayKit/Classes/Models/XHEmotionManager.h +++ b/MessageDisplayKit/Classes/Models/XHEmotionManager.h @@ -2,8 +2,8 @@ // XHEmotionManager.h // MessageDisplayExample // -// Created by qtone-1 on 14-5-3. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-3. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Models/XHEmotionManager.m b/MessageDisplayKit/Classes/Models/XHEmotionManager.m index fa228b1..fccab08 100644 --- a/MessageDisplayKit/Classes/Models/XHEmotionManager.m +++ b/MessageDisplayKit/Classes/Models/XHEmotionManager.m @@ -2,8 +2,8 @@ // XHEmotionManager.m // MessageDisplayExample // -// Created by qtone-1 on 14-5-3. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-3. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHEmotionManager.h" diff --git a/MessageDisplayKit/Classes/Models/XHMessage.h b/MessageDisplayKit/Classes/Models/XHMessage.h index da88736..668d9b7 100644 --- a/MessageDisplayKit/Classes/Models/XHMessage.h +++ b/MessageDisplayKit/Classes/Models/XHMessage.h @@ -2,8 +2,8 @@ // XHMessage.h // MessageDisplayExample // -// Created by qtone-1 on 14-4-24. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import @@ -32,19 +32,23 @@ @property (nonatomic, copy) NSString *geolocations; @property (nonatomic, strong) CLLocation *location; -@property (nonatomic, strong) UIImage *avator; -@property (nonatomic, copy) NSString *avatorUrl; +@property (nonatomic, strong) UIImage *avatar; +@property (nonatomic, copy) NSString *avatarUrl; @property (nonatomic, copy) NSString *sender; @property (nonatomic, strong) NSDate *timestamp; +@property (nonatomic, assign) BOOL shouldShowUserName; + @property (nonatomic, assign) BOOL sended; @property (nonatomic, assign) XHBubbleMessageMediaType messageMediaType; @property (nonatomic, assign) XHBubbleMessageType bubbleMessageType; +@property (nonatomic) BOOL isRead; + /** * 初始化文本消息 @@ -110,6 +114,25 @@ sender:(NSString *)sender timestamp:(NSDate *)timestamp; +/** + * 初始化语音类型的消息。增加已读未读标记 + * + * @param voicePath 目标语音的本地路径 + * @param voiceUrl 目标语音在服务器的地址 + * @param voiceDuration 目标语音的时长 + * @param sender 发送者 + * @param date 发送时间 + * @param isRead 已读未读标记 + * + * @return 返回Message model 对象 + */ +- (instancetype)initWithVoicePath:(NSString *)voicePath + voiceUrl:(NSString *)voiceUrl + voiceDuration:(NSString *)voiceDuration + sender:(NSString *)sender + timestamp:(NSDate *)timestamp + isRead:(BOOL)isRead; + /** * 初始化gif表情类型的消息 * diff --git a/MessageDisplayKit/Classes/Models/XHMessage.m b/MessageDisplayKit/Classes/Models/XHMessage.m index eb72c4d..80359a4 100644 --- a/MessageDisplayKit/Classes/Models/XHMessage.m +++ b/MessageDisplayKit/Classes/Models/XHMessage.m @@ -2,8 +2,8 @@ // XHMessage.m // MessageDisplayExample // -// Created by qtone-1 on 14-4-24. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHMessage.h" @@ -101,6 +101,28 @@ - (instancetype)initWithVoicePath:(NSString *)voicePath voiceDuration:(NSString *)voiceDuration sender:(NSString *)sender timestamp:(NSDate *)timestamp { + + return [self initWithVoicePath:voicePath voiceUrl:voiceUrl voiceDuration:voiceDuration sender:sender timestamp:timestamp isRead:YES]; +} + +/** + * 初始化语音类型的消息。增加已读未读标记 + * + * @param voicePath 目标语音的本地路径 + * @param voiceUrl 目标语音在服务器的地址 + * @param voiceDuration 目标语音的时长 + * @param sender 发送者 + * @param date 发送时间 + * @param isRead 已读未读标记 + * + * @return 返回Message model 对象 + */ +- (instancetype)initWithVoicePath:(NSString *)voicePath + voiceUrl:(NSString *)voiceUrl + voiceDuration:(NSString *)voiceDuration + sender:(NSString *)sender + timestamp:(NSDate *)timestamp + isRead:(BOOL)isRead { self = [super init]; if (self) { self.voicePath = voicePath; @@ -109,6 +131,7 @@ - (instancetype)initWithVoicePath:(NSString *)voicePath self.sender = sender; self.timestamp = timestamp; + self.isRead = isRead; self.messageMediaType = XHBubbleMessageMediaTypeVoice; } @@ -170,8 +193,8 @@ - (void)dealloc { _geolocations = nil; _location = nil; - _avator = nil; - _avatorUrl = nil; + _avatar = nil; + _avatarUrl = nil; _sender = nil; @@ -203,11 +226,15 @@ - (id)initWithCoder:(NSCoder *)aDecoder { _geolocations = [aDecoder decodeObjectForKey:@"geolocations"]; _location = [aDecoder decodeObjectForKey:@"location"]; - _avator = [aDecoder decodeObjectForKey:@"avator"]; - _avatorUrl = [aDecoder decodeObjectForKey:@"avatorUrl"]; + _avatar = [aDecoder decodeObjectForKey:@"avatar"]; + _avatarUrl = [aDecoder decodeObjectForKey:@"avatarUrl"]; _sender = [aDecoder decodeObjectForKey:@"sender"]; _timestamp = [aDecoder decodeObjectForKey:@"timestamp"]; + + _messageMediaType = [[aDecoder decodeObjectForKey:@"messageMediaType"] integerValue]; + _bubbleMessageType = [[aDecoder decodeObjectForKey:@"bubbleMessageType"] integerValue]; + _isRead = [[aDecoder decodeObjectForKey:@"isRead"] boolValue]; } return self; } @@ -232,9 +259,17 @@ - (void)encodeWithCoder:(NSCoder *)aCoder { [aCoder encodeObject:self.localPositionPhoto forKey:@"localPositionPhoto"]; [aCoder encodeObject:self.geolocations forKey:@"geolocations"]; [aCoder encodeObject:self.location forKey:@"location"]; + + [aCoder encodeObject:self.avatar forKey:@"avatar"]; + [aCoder encodeObject:self.avatarUrl forKey:@"avatarUrl"]; + [aCoder encodeObject:self.sender forKey:@"sender"]; [aCoder encodeObject:self.timestamp forKey:@"timestamp"]; + + [aCoder encodeObject:[NSNumber numberWithInteger:self.messageMediaType] forKey:@"messageMediaType"]; + [aCoder encodeObject:[NSNumber numberWithInteger:self.bubbleMessageType] forKey:@"bubbleMessageType"]; + [aCoder encodeObject:[NSNumber numberWithBool:self.isRead] forKey:@"isRead"]; } #pragma mark - NSCopying diff --git a/MessageDisplayKit/Classes/Models/XHMessageModel.h b/MessageDisplayKit/Classes/Models/XHMessageModel.h index e89d273..69d6d7b 100644 --- a/MessageDisplayKit/Classes/Models/XHMessageModel.h +++ b/MessageDisplayKit/Classes/Models/XHMessageModel.h @@ -2,8 +2,8 @@ // XHMessageModel.h // MessageDisplayExample // -// Created by qtone-1 on 14-4-24. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import @@ -35,8 +35,8 @@ - (NSString *)emotionPath; -- (UIImage *)avator; -- (NSString *)avatorUrl; +- (UIImage *)avatar; +- (NSString *)avatarUrl; - (XHBubbleMessageMediaType)messageMediaType; @@ -44,9 +44,14 @@ @optional +- (BOOL)shouldShowUserName; + - (NSString *)sender; - (NSDate *)timestamp; +- (BOOL)isRead; +- (void)setIsRead:(BOOL)isRead; + @end diff --git a/MessageDisplayKit/Classes/Models/XHShareMenuItem.h b/MessageDisplayKit/Classes/Models/XHShareMenuItem.h index 8e3d37c..8ccf27d 100644 --- a/MessageDisplayKit/Classes/Models/XHShareMenuItem.h +++ b/MessageDisplayKit/Classes/Models/XHShareMenuItem.h @@ -2,8 +2,8 @@ // XHShareMenuItem.h // MessageDisplayExample // -// Created by qtone-1 on 14-5-1. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-1. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import @@ -23,6 +23,10 @@ */ @property (nonatomic, copy) NSString *title; +@property (nonatomic, strong) UIColor *titleColor; + +@property (nonatomic, strong) UIFont *titleFont; + /** * 根据正常图片和标题初始化一个Model对象 * @@ -34,4 +38,8 @@ - (instancetype)initWithNormalIconImage:(UIImage *)normalIconImage title:(NSString *)title; +- (instancetype)initWithNormalIconImage:(UIImage *)normalIconImage + title:(NSString *)title + titleColor:(UIColor *)titleColor + titleFont:(UIFont *)titleFont; @end diff --git a/MessageDisplayKit/Classes/Models/XHShareMenuItem.m b/MessageDisplayKit/Classes/Models/XHShareMenuItem.m index 9c2f944..15d6d03 100644 --- a/MessageDisplayKit/Classes/Models/XHShareMenuItem.m +++ b/MessageDisplayKit/Classes/Models/XHShareMenuItem.m @@ -2,8 +2,8 @@ // XHShareMenuItem.m // MessageDisplayExample // -// Created by qtone-1 on 14-5-1. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-1. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHShareMenuItem.h" @@ -12,10 +12,19 @@ @implementation XHShareMenuItem - (instancetype)initWithNormalIconImage:(UIImage *)normalIconImage title:(NSString *)title { + return [self initWithNormalIconImage:normalIconImage title:title titleColor:nil titleFont:nil]; +} + +- (instancetype)initWithNormalIconImage:(UIImage *)normalIconImage + title:(NSString *)title + titleColor:(UIColor *)titleColor + titleFont:(UIFont *)titleFont { self = [super init]; if (self) { self.normalIconImage = normalIconImage; self.title = title; + self.titleColor = titleColor; + self.titleFont = titleFont; } return self; } diff --git a/MessageDisplayKit/Classes/Vendor/SECoreTextView/NSMutableAttributedString+Helper.h b/MessageDisplayKit/Classes/Vendor/SECoreTextView/NSMutableAttributedString+Helper.h deleted file mode 100755 index 4fb425c..0000000 --- a/MessageDisplayKit/Classes/Vendor/SECoreTextView/NSMutableAttributedString+Helper.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// NSMutableAttributedString+Helper.h -// SECoreTextView -// -// Created by kishikawa katsumi on 2013/04/28. -// Copyright (c) 2013 kishikawa katsumi. All rights reserved. -// - -#import -#import -#import "SECompatibility.h" - -@interface NSMutableAttributedString(Helper) - -- (void)addFontAttribute:(NSFont *)font range:(NSRange)range; - -@end diff --git a/MessageDisplayKit/Classes/Vendor/SECoreTextView/NSMutableAttributedString+Helper.m b/MessageDisplayKit/Classes/Vendor/SECoreTextView/NSMutableAttributedString+Helper.m deleted file mode 100755 index 3c95957..0000000 --- a/MessageDisplayKit/Classes/Vendor/SECoreTextView/NSMutableAttributedString+Helper.m +++ /dev/null @@ -1,22 +0,0 @@ -// -// NSMutableAttributedString+Helper.m -// SECoreTextView -// -// Created by kishikawa katsumi on 2013/04/28. -// Copyright (c) 2013 kishikawa katsumi. All rights reserved. -// - -#import "NSMutableAttributedString+Helper.h" - -@implementation NSMutableAttributedString(Helper) - -- (void)addFontAttribute:(NSFont *)font range:(NSRange)range -{ - CFStringRef fontName = (__bridge CFStringRef)font.fontName; - CGFloat fontSize = font.pointSize; - CTFontRef ctfont = CTFontCreateWithName(fontName, fontSize, NULL); - [self addAttributes:@{(id)kCTFontAttributeName: (__bridge id)ctfont} range:range]; - CFRelease(ctfont); -} - -@end diff --git a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SECompatibility.h b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SECompatibility.h index 35adc9e..21187dc 100755 --- a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SECompatibility.h +++ b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SECompatibility.h @@ -12,7 +12,6 @@ #import @compatibility_alias NSView UIView; -@compatibility_alias NSFont UIFont; @compatibility_alias NSColor UIColor; @compatibility_alias NSBezierPath UIBezierPath; @compatibility_alias NSImage UIImage; diff --git a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SESelectionGrabber.h b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SESelectionGrabber.h index 6c580b3..1295396 100755 --- a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SESelectionGrabber.h +++ b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SESelectionGrabber.h @@ -6,6 +6,8 @@ // Copyright (c) 2013 kishikawa katsumi. All rights reserved. // +#import + #if TARGET_OS_IPHONE #import diff --git a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SESelectionGrabber.m b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SESelectionGrabber.m index df08d85..cddd7da 100755 --- a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SESelectionGrabber.m +++ b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SESelectionGrabber.m @@ -6,6 +6,8 @@ // Copyright (c) 2013 kishikawa katsumi. All rights reserved. // +#import + #if TARGET_OS_IPHONE #import "SESelectionGrabber.h" #import "SEConstants.h" diff --git a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextEditingCaret.h b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextEditingCaret.h index c6932ad..4eac34b 100755 --- a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextEditingCaret.h +++ b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextEditingCaret.h @@ -6,6 +6,8 @@ // Copyright (c) 2013 kishikawa katsumi. All rights reserved. // +#import + #if TARGET_OS_IPHONE #import diff --git a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextEditingCaret.m b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextEditingCaret.m index 6aa1a3e..fe95b90 100755 --- a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextEditingCaret.m +++ b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextEditingCaret.m @@ -6,6 +6,8 @@ // Copyright (c) 2013 kishikawa katsumi. All rights reserved. // +#import + #if TARGET_OS_IPHONE #import "SETextEditingCaret.h" #import "SEConstants.h" diff --git a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextGeometry.h b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextGeometry.h index fde1b81..2c98c69 100755 --- a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextGeometry.h +++ b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextGeometry.h @@ -7,6 +7,7 @@ // #import +#import @interface SETextGeometry : NSObject diff --git a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextInput.h b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextInput.h index 1db8ca9..9a1351c 100755 --- a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextInput.h +++ b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextInput.h @@ -6,8 +6,11 @@ // Copyright (c) 2013 kishikawa katsumi. All rights reserved. // +#import + #if TARGET_OS_IPHONE #import +#import @interface SETextRange : UITextRange diff --git a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextInput.m b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextInput.m index f541eea..012caa2 100755 --- a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextInput.m +++ b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextInput.m @@ -6,6 +6,8 @@ // Copyright (c) 2013 kishikawa katsumi. All rights reserved. // +#import + #if TARGET_OS_IPHONE #import "SETextInput.h" @@ -55,7 +57,7 @@ + (SETextPosition *)positionWithIndex:(NSUInteger)index - (NSString *)description { - return [NSString stringWithFormat:@"%@ (%lu)", [super description], (unsigned long)self.index]; + return [NSString stringWithFormat:@"%@ (%@)", [super description], @(self.index)]; } @end diff --git a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextLayout.m b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextLayout.m index dd881cb..a208cda 100755 --- a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextLayout.m +++ b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextLayout.m @@ -434,6 +434,11 @@ - (CGRect)rectOfStringForIndex:(CFIndex)index; width = offset - CTLineGetOffsetForStringIndex(line, index - 1, NULL); } + + if (offset > self.bounds.size.width) { + offset = self.bounds.size.width; + } + rect = lineLayout.rect; rect.origin.x += offset - width; rect.size.width = width; diff --git a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextMagnifierCaret.h b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextMagnifierCaret.h index 445a050..fd4b6e6 100755 --- a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextMagnifierCaret.h +++ b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextMagnifierCaret.h @@ -6,6 +6,8 @@ // Copyright (c) 2013 kishikawa katsumi. All rights reserved. // +#import + #if TARGET_OS_IPHONE #import #import diff --git a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextMagnifierCaret.m b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextMagnifierCaret.m index f35fcfa..2ff8409 100755 --- a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextMagnifierCaret.m +++ b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextMagnifierCaret.m @@ -6,6 +6,8 @@ // Copyright (c) 2013 kishikawa katsumi. All rights reserved. // +#import + #if TARGET_OS_IPHONE #import "SETextMagnifierCaret.h" diff --git a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextMagnifierRanged.h b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextMagnifierRanged.h index 8c7dec6..aa13fd0 100755 --- a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextMagnifierRanged.h +++ b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextMagnifierRanged.h @@ -6,6 +6,8 @@ // Copyright (c) 2013 kishikawa katsumi. All rights reserved. // +#import + #if TARGET_OS_IPHONE #import #import diff --git a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextMagnifierRanged.m b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextMagnifierRanged.m index 9796a99..a18052e 100755 --- a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextMagnifierRanged.m +++ b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextMagnifierRanged.m @@ -6,6 +6,8 @@ // Copyright (c) 2013 kishikawa katsumi. All rights reserved. // +#import + #if TARGET_OS_IPHONE #import "SETextMagnifierRanged.h" diff --git a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextSelectionView.h b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextSelectionView.h index 3d3587b..df2c4d6 100755 --- a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextSelectionView.h +++ b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextSelectionView.h @@ -6,6 +6,8 @@ // Copyright (c) 2013 kishikawa katsumi. All rights reserved. // +#import + #if TARGET_OS_IPHONE #import diff --git a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextSelectionView.m b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextSelectionView.m index 7f8d484..8612081 100755 --- a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextSelectionView.m +++ b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextSelectionView.m @@ -6,6 +6,8 @@ // Copyright (c) 2013 kishikawa katsumi. All rights reserved. // +#import + #if TARGET_OS_IPHONE #import "SETextSelectionView.h" #import "SETextView.h" diff --git a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextView.h b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextView.h index 1a6258d..8cf76d9 100755 --- a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextView.h +++ b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextView.h @@ -11,7 +11,6 @@ #import "SELinkText.h" #import "SETextAttachment.h" #import "SECompatibility.h" -#import "NSMutableAttributedString+Helper.h" typedef void(^SETextAttachmentDrawingBlock)(CGRect rect, CGContextRef context); @@ -35,7 +34,11 @@ typedef NS_ENUM(NSUInteger, SETextAttachmentDrawingOptions) { @property (nonatomic, copy) NSString *text; @property (nonatomic, copy) NSAttributedString *attributedText; +#if TARGET_OS_IPHONE +@property (nonatomic) UIFont *font; +#else @property (nonatomic) NSFont *font; +#endif @property (nonatomic) NSColor *textColor; @property (nonatomic) NSColor *highlightedTextColor; @property (nonatomic) NSTextAlignment textAlignment; @@ -91,6 +94,17 @@ typedef NS_ENUM(NSUInteger, SETextAttachmentDrawingOptions) { + (CGRect)frameRectWithAttributtedString:(NSAttributedString *)attributedString constraintSize:(CGSize)constraintSize lineSpacing:(CGFloat)lineSpacing; +#if TARGET_OS_IPHONE ++ (CGRect)frameRectWithAttributtedString:(NSAttributedString *)attributedString + constraintSize:(CGSize)constraintSize + lineSpacing:(CGFloat)lineSpacing + font:(UIFont *)font; ++ (CGRect)frameRectWithAttributtedString:(NSAttributedString *)attributedString + constraintSize:(CGSize)constraintSize + lineSpacing:(CGFloat)lineSpacing + paragraphSpacing:(CGFloat)paragraphSpacing + font:(UIFont *)font; +#else + (CGRect)frameRectWithAttributtedString:(NSAttributedString *)attributedString constraintSize:(CGSize)constraintSize lineSpacing:(CGFloat)lineSpacing @@ -100,6 +114,7 @@ typedef NS_ENUM(NSUInteger, SETextAttachmentDrawingOptions) { lineSpacing:(CGFloat)lineSpacing paragraphSpacing:(CGFloat)paragraphSpacing font:(NSFont *)font; +#endif - (void)addObject:(id)object size:(CGSize)size atIndex:(NSInteger)index; - (void)addObject:(id)object size:(CGSize)size replaceRange:(NSRange)range; diff --git a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextView.m b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextView.m index faa934c..2e6e644 100755 --- a/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextView.m +++ b/MessageDisplayKit/Classes/Vendor/SECoreTextView/SETextView.m @@ -32,7 +32,7 @@ typedef NS_ENUM (NSUInteger, SETouchPhase) { SETouchPhaseAny = NSUIntegerMax }; -static NSString * const OBJECT_REPLACEMENT_CHARACTER = @" "; +static NSString * const OBJECT_REPLACEMENT_CHARACTER = @"\uFFFC"; static NSString * const ZERO_WIDTH_SPACE = @"\u200B"; static NSString * const LINE_SEPARATOR = @"\u2028"; static NSString * const PARAGRAPH_SEPARATOR = @"\u2029"; @@ -169,23 +169,38 @@ + (CGRect)frameRectWithAttributtedString:(NSAttributedString *)attributedString font:nil]; } +#if TARGET_OS_IPHONE ++ (CGRect)frameRectWithAttributtedString:(NSAttributedString *)attributedString + constraintSize:(CGSize)constraintSize + lineSpacing:(CGFloat)lineSpacing + font:(UIFont *)font +#else + (CGRect)frameRectWithAttributtedString:(NSAttributedString *)attributedString constraintSize:(CGSize)constraintSize lineSpacing:(CGFloat)lineSpacing font:(NSFont *)font +#endif { return [self frameRectWithAttributtedString:attributedString constraintSize:constraintSize lineSpacing:lineSpacing paragraphSpacing:0.0f - font:font]; + font:(id)font]; } +#if TARGET_OS_IPHONE ++ (CGRect)frameRectWithAttributtedString:(NSAttributedString *)attributedString + constraintSize:(CGSize)constraintSize + lineSpacing:(CGFloat)lineSpacing + paragraphSpacing:(CGFloat)paragraphSpacing + font:(UIFont *)font +#else + (CGRect)frameRectWithAttributtedString:(NSAttributedString *)attributedString constraintSize:(CGSize)constraintSize lineSpacing:(CGFloat)lineSpacing paragraphSpacing:(CGFloat)paragraphSpacing font:(NSFont *)font +#endif { NSInteger length = attributedString.length; NSMutableAttributedString *mutableAttributedString = attributedString.mutableCopy; @@ -467,7 +482,7 @@ - (void)setParagraphStyle textAlignment = (CTTextAlignment)self.textAlignment; } #else - CTTextAlignment textAlignment = self.textAlignment; + CTTextAlignment textAlignment = (CTTextAlignment)self.textAlignment; #endif CTLineBreakMode lineBreakMode = (CTLineBreakMode)self.lineBreakMode; if (lineBreakMode == kCTLineBreakByTruncatingTail) { @@ -508,25 +523,13 @@ - (void)setAttributes:(NSDictionary *)attributes self.attributedText = attributedString; } -+ (CTLineBreakMode)lineBreakModeFromUILineBreakMode:(NSLineBreakMode)lineBreakMode { - switch (lineBreakMode) { - case NSLineBreakByWordWrapping: return kCTLineBreakByWordWrapping; - case NSLineBreakByCharWrapping: return kCTLineBreakByCharWrapping; - case NSLineBreakByClipping: return kCTLineBreakByClipping; - case NSLineBreakByTruncatingHead: return kCTLineBreakByTruncatingHead; - case NSLineBreakByTruncatingTail: return kCTLineBreakByWordWrapping; // We handle truncation ourself. - case NSLineBreakByTruncatingMiddle: return kCTLineBreakByTruncatingMiddle; - default: return 0; - } -} - - (void)updateLayout { [self setAdditionalAttributes]; self.textLayout.bounds = self.bounds; self.textLayout.attributedString = self.attributedText; - self.textLayout.lineBreakMode = [self.class lineBreakModeFromUILineBreakMode:self.lineBreakMode]; + self.textLayout.lineBreakMode = (CTLineBreakMode)self.lineBreakMode; [self.textLayout update]; } diff --git a/MessageDisplayKit/Classes/Vendor/XHPathCover/XHSoundManager.h b/MessageDisplayKit/Classes/Vendor/XHPathCover/XHSoundManager.h deleted file mode 100644 index 05d3e09..0000000 --- a/MessageDisplayKit/Classes/Vendor/XHPathCover/XHSoundManager.h +++ /dev/null @@ -1,17 +0,0 @@ -// -// XHSoundManager.h -// XHPathCover -// -// Created by 曾 宪华 on 14-2-7. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import - -@interface XHSoundManager : NSObject - -+ (instancetype)sharedInstance; - -- (void)playRefreshSound; - -@end diff --git a/MessageDisplayKit/Classes/Views/AlbumContentViews/XHAlbumCollectionViewFlowLayout.h b/MessageDisplayKit/Classes/Views/AlbumContentViews/XHAlbumCollectionViewFlowLayout.h deleted file mode 100644 index a5eed54..0000000 --- a/MessageDisplayKit/Classes/Views/AlbumContentViews/XHAlbumCollectionViewFlowLayout.h +++ /dev/null @@ -1,13 +0,0 @@ -// -// XHAlbumCollectionViewFlowLayout.h -// MessageDisplayExample -// -// Created by 曾 宪华 on 14-5-21. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import - -@interface XHAlbumCollectionViewFlowLayout : UICollectionViewFlowLayout - -@end diff --git a/MessageDisplayKit/Classes/Views/AlbumContentViews/XHAlbumTableViewCell.h b/MessageDisplayKit/Classes/Views/AlbumContentViews/XHAlbumTableViewCell.h deleted file mode 100644 index e7642ca..0000000 --- a/MessageDisplayKit/Classes/Views/AlbumContentViews/XHAlbumTableViewCell.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// XHAlbumTableViewCell.h -// MessageDisplayExample -// -// Created by qtone-1 on 14-5-19. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import - -#import "XHBaseTableViewCell.h" - -#import "XHAlbum.h" - -@interface XHAlbumTableViewCell : UITableViewCell - -@property (nonatomic, strong) XHAlbum *currentAlbum; - - -+ (CGFloat)calculateCellHeightWithAlbum:(XHAlbum *)currentAlbum; - -@end diff --git a/MessageDisplayKit/Classes/Views/BaseTableViewCell/XHBaseTableViewCell.h b/MessageDisplayKit/Classes/Views/BaseTableViewCell/XHBaseTableViewCell.h index fd51340..1152986 100644 --- a/MessageDisplayKit/Classes/Views/BaseTableViewCell/XHBaseTableViewCell.h +++ b/MessageDisplayKit/Classes/Views/BaseTableViewCell/XHBaseTableViewCell.h @@ -3,7 +3,7 @@ // MessageDisplayExample // // Created by dw_iOS on 14-5-20. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Views/BaseTableViewCell/XHBaseTableViewCell.m b/MessageDisplayKit/Classes/Views/BaseTableViewCell/XHBaseTableViewCell.m index 89e247d..60fc111 100644 --- a/MessageDisplayKit/Classes/Views/BaseTableViewCell/XHBaseTableViewCell.m +++ b/MessageDisplayKit/Classes/Views/BaseTableViewCell/XHBaseTableViewCell.m @@ -3,7 +3,7 @@ // MessageDisplayExample // // Created by dw_iOS on 14-5-20. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHBaseTableViewCell.h" diff --git a/MessageDisplayKit/Classes/Views/ContactViews/XHContactView.h b/MessageDisplayKit/Classes/Views/ContactViews/XHContactView.h deleted file mode 100644 index 4be1251..0000000 --- a/MessageDisplayKit/Classes/Views/ContactViews/XHContactView.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// XHContactView.h -// MessageDisplayExample -// -// Created by dw_iOS on 14-5-23. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import - -#import "XHContact.h" -#import "XHMessageAvatorFactory.h" - -@interface XHContactView : UIView - -@property (nonatomic, strong) XHContact *displayContact; - -@end diff --git a/MessageDisplayKit/Classes/Views/LocationServiceViews/XHLocationServiceTableViewCell.h b/MessageDisplayKit/Classes/Views/LocationServiceViews/XHLocationServiceTableViewCell.h deleted file mode 100644 index 2cffcc6..0000000 --- a/MessageDisplayKit/Classes/Views/LocationServiceViews/XHLocationServiceTableViewCell.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// XHLocationServiceTableViewCell.h -// MessageDisplayExample -// -// Created by 曾 宪华 on 14-5-25. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import - -#define kXHNearAvatorSize 50 -#define kXHNearAvatorSpacing 10 - -@interface XHLocationServiceTableViewCell : UITableViewCell - -- (void)configureCellWithItem:(id)item atIndexPath:(NSIndexPath *)indexPath; - -@end diff --git a/MessageDisplayKit/Classes/Views/MessageContentViews/XHBubblePhotoImageView.h b/MessageDisplayKit/Classes/Views/MessageContentViews/XHBubblePhotoImageView.h index 7aa36e1..15de9df 100644 --- a/MessageDisplayKit/Classes/Views/MessageContentViews/XHBubblePhotoImageView.h +++ b/MessageDisplayKit/Classes/Views/MessageContentViews/XHBubblePhotoImageView.h @@ -2,13 +2,15 @@ // XHBubblePhotoImageView.h // MessageDisplayExample // -// Created by qtone-1 on 14-4-28. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-28. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import #import "XHMessageBubbleFactory.h" +#define kXHBubblePhotoMargin 8.0f // 上下左右的边距 + @interface XHBubblePhotoImageView : UIView /** diff --git a/MessageDisplayKit/Classes/Views/MessageContentViews/XHBubblePhotoImageView.m b/MessageDisplayKit/Classes/Views/MessageContentViews/XHBubblePhotoImageView.m index f7ab51c..d05ed0b 100644 --- a/MessageDisplayKit/Classes/Views/MessageContentViews/XHBubblePhotoImageView.m +++ b/MessageDisplayKit/Classes/Views/MessageContentViews/XHBubblePhotoImageView.m @@ -2,17 +2,18 @@ // XHBubblePhotoImageView.m // MessageDisplayExample // -// Created by qtone-1 on 14-4-28. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-28. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHBubblePhotoImageView.h" -#import "XHMacro.h" #import "UIView+XHRemoteImage.h" - #import "UIImage+Resize.h" +#import "XHConfigurationHelper.h" +#import "XHMacro.h" + @interface XHBubblePhotoImageView () @property dispatch_semaphore_t semaphore; @@ -51,20 +52,34 @@ - (void)configureMessagePhoto:(UIImage *)messagePhoto thumbnailUrl:(NSString *)t WEAKSELF [self addSubview:self.activityIndicatorView]; [self.activityIndicatorView startAnimating]; + NSString *placeholderImageName = [[XHConfigurationHelper appearance].messageInputViewStyle objectForKey:kXHMessageTablePlaceholderImageNameKey]; + if (!placeholderImageName) { + placeholderImageName = @"placeholderImage"; + } + + self.messagePhoto = [UIImage imageNamed:placeholderImageName]; [self setImageWithURL:[NSURL URLWithString:thumbnailUrl] placeholer:nil showActivityIndicatorView:NO completionBlock:^(UIImage *image, NSURL *url, NSError *error) { if ([url.absoluteString isEqualToString:thumbnailUrl]) { if (CGRectEqualToRect(weakSelf.bounds, CGRectZero)) { - weakSelf.semaphore = dispatch_semaphore_create(0); - dispatch_semaphore_wait(weakSelf.semaphore, DISPATCH_TIME_FOREVER); - weakSelf.semaphore = nil; + if (weakSelf) { + weakSelf.semaphore = dispatch_semaphore_create(0); + dispatch_semaphore_wait(weakSelf.semaphore, DISPATCH_TIME_FOREVER); + weakSelf.semaphore = nil; + } } - image = [image thumbnailImage:CGRectGetWidth(weakSelf.bounds) * 2 transparentBorder:0 cornerRadius:0 interpolationQuality:1.0]; + // if image not nil if (image) { + // scale image + image = [image thumbnailImage:CGRectGetWidth(weakSelf.bounds) * 2 transparentBorder:0 cornerRadius:0 interpolationQuality:1.0]; dispatch_async(dispatch_get_main_queue(), ^{ - weakSelf.messagePhoto = image; - [weakSelf.activityIndicatorView stopAnimating]; + // if image not nil + if (image) { + // show image + weakSelf.messagePhoto = image; + [weakSelf.activityIndicatorView stopAnimating]; + } }); } } @@ -104,10 +119,10 @@ - (void)drawRect:(CGRect)rect { [self.messagePhoto drawInRect:rect]; CGFloat width = rect.size.width; - CGFloat height = rect.size.height+1;//莫名其妙会出现绘制底部有残留 +1像素遮盖 + CGFloat height = rect.size.height + 1;//莫名其妙会出现绘制底部有残留 +1像素遮盖 // 简便起见,这里把圆角半径设置为长和宽平均值的1/10 CGFloat radius = 6; - CGFloat margin = 8;//留出上下左右的边距 + CGFloat margin = kXHBubblePhotoMargin;//留出上下左右的边距 CGFloat triangleSize = 8;//三角形的边长 CGFloat triangleMarginTop = 8;//三角形距离圆角的距离 diff --git a/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageBubbleView.h b/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageBubbleView.h index 095703a..cf8059e 100644 --- a/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageBubbleView.h +++ b/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageBubbleView.h @@ -2,8 +2,8 @@ // XHMessageBubbleView.h // MessageDisplayExample // -// Created by qtone-1 on 14-4-24. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import @@ -11,7 +11,6 @@ // Views #import "XHMessageTextView.h" #import "XHMessageInputView.h" -#import "XHMessageDisplayTextView.h" #import "XHBubblePhotoImageView.h" #import "SETextView.h" @@ -25,12 +24,9 @@ #import "XHMessage.h" // Factorys -#import "XHMessageAvatorFactory.h" +#import "XHMessageAvatarFactory.h" #import "XHMessageVoiceFactory.h" -// Categorys -#import "UIImage+XHAnimatedFaceGif.h" - #define kXHMessageBubbleDisplayMaxLine 200 #define kXHTextLineSpacing 3.0 @@ -62,10 +58,15 @@ */ @property (nonatomic, weak, readonly) UIImageView *animationVoiceImageView; +/** + * 用于显示语音未读的控件,小圆点 + */ +@property (nonatomic, weak, readonly) UIImageView *voiceUnreadDotImageView; + /** * 用于显示语音时长的label */ -@property (nonatomic, weak) UILabel *voiceDurationLabel; +@property (nonatomic, weak, readonly) UILabel *voiceDurationLabel; /** * 用于显示仿微信发送图片的控件 diff --git a/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageBubbleView.m b/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageBubbleView.m index 6c7ec62..5352483 100644 --- a/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageBubbleView.m +++ b/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageBubbleView.m @@ -2,22 +2,30 @@ // XHMessageBubbleView.m // MessageDisplayExample // -// Created by qtone-1 on 14-4-24. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHMessageBubbleView.h" #import "XHMessageBubbleHelper.h" +#import "XHConfigurationHelper.h" -#define kMarginTop 8.0f -#define kMarginBottom 2.0f -#define kPaddingTop 12.0f -#define kBubblePaddingRight 14.0f +#define kXHHaveBubbleMargin 8.0f // 文本、视频、表情气泡上下边的间隙 +#define kXHHaveBubbleVoiceMargin 13.5f // 语音气泡上下边的间隙 +#define kXHHaveBubblePhotoMargin 6.5f // 图片、地理位置气泡上下边的间隙 -#define kVoiceMargin 20.0f +#define kXHVoiceMargin 20.0f // 播放语音时的动画控件距离头像的间隙 -#define kXHArrowMarginWidth 14 +#define kXHArrowMarginWidth 5.2f // 箭头宽度 + +#define kXHTopAndBottomBubbleMargin 13.0f // 文本在气泡内部的上下间隙 +#define kXHLeftTextHorizontalBubblePadding 13.0f // 文本的水平间隙 +#define kXHRightTextHorizontalBubblePadding 13.0f // 文本的水平间隙 + +#define kXHUnReadDotSize 10.0f // 语音未读的红点大小 + +#define kXHNoneBubblePhotoMargin (kXHHaveBubbleMargin - kXHBubblePhotoMargin) // 在没有气泡的时候,也就是在图片、视频、地理位置的时候,图片内部做了Margin,所以需要减去内部的Margin @interface XHMessageBubbleView () @@ -29,6 +37,10 @@ @interface XHMessageBubbleView () @property (nonatomic, weak, readwrite) UIImageView *animationVoiceImageView; +@property (nonatomic, weak, readwrite) UIImageView *voiceUnreadDotImageView; + +@property (nonatomic, weak, readwrite) UILabel *voiceDurationLabel; + @property (nonatomic, weak, readwrite) XHBubblePhotoImageView *bubblePhotoImageView; @property (nonatomic, weak, readwrite) UIImageView *videoPlayImageView; @@ -43,68 +55,106 @@ @implementation XHMessageBubbleView #pragma mark - Bubble view +// 获取文本的实际大小 + (CGFloat)neededWidthForText:(NSString *)text { - CGSize stringSize; - stringSize = [text sizeWithFont:[[XHMessageBubbleView appearance] font] - constrainedToSize:CGSizeMake(MAXFLOAT, 19)]; - return roundf(stringSize.width); + UIFont *systemFont = [[XHMessageBubbleView appearance] font]; + CGSize textSize = CGSizeMake(CGFLOAT_MAX, 20); // rough accessory size + CGSize sizeWithFont = [text sizeWithFont:systemFont constrainedToSize:textSize lineBreakMode:NSLineBreakByWordWrapping]; + +#if defined(__LP64__) && __LP64__ + return ceil(sizeWithFont.width); +#else + return ceilf(sizeWithFont.width); +#endif } +// 计算文本实际的大小 + (CGSize)neededSizeForText:(NSString *)text { - CGFloat maxWidth = CGRectGetWidth([[UIScreen mainScreen] bounds]) * (kIsiPad ? 0.8 : 0.55); + // 实际处理文本的时候 + // 文本只有一行的时候,宽度可能出现很小到最大的情况,所以需要计算一行文字需要的宽度 + CGFloat maxWidth = CGRectGetWidth([[UIScreen mainScreen] bounds]) * (kIsiPad ? 0.8 : (kIs_iPhone_6 ? 0.6 : (kIs_iPhone_6P ? 0.62 : 0.55))); CGFloat dyWidth = [XHMessageBubbleView neededWidthForText:text]; - CGSize textSize = [SETextView frameRectWithAttributtedString:[[XHMessageBubbleHelper sharedMessageBubbleHelper] bubbleAttributtedStringWithText:text] constraintSize:CGSizeMake(maxWidth, MAXFLOAT) lineSpacing:kXHTextLineSpacing font:[[XHMessageBubbleView appearance] font]].size; - return CGSizeMake((dyWidth > textSize.width ? textSize.width : dyWidth) + kBubblePaddingRight * 2 + kXHArrowMarginWidth, textSize.height + kMarginTop * 2); + if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 9.0) { + dyWidth += 5; + } + + CGSize textSize = [SETextView frameRectWithAttributtedString:[[XHMessageBubbleHelper sharedMessageBubbleHelper] bubbleAttributtedStringWithText:text] + constraintSize:CGSizeMake(maxWidth, MAXFLOAT) + lineSpacing:kXHTextLineSpacing + font:[[XHMessageBubbleView appearance] font]].size; + return CGSizeMake((dyWidth > textSize.width ? textSize.width : dyWidth), textSize.height); } +// 计算图片实际大小 + (CGSize)neededSizeForPhoto:(UIImage *)photo { // 这里需要缩放后的size - CGSize photoSize = CGSizeMake(120, 120); + CGSize photoSize = CGSizeMake(140, 140); return photoSize; } +// 计算语音实际大小 + (CGSize)neededSizeForVoicePath:(NSString *)voicePath voiceDuration:(NSString *)voiceDuration { // 这里的100只是暂时固定,到时候会根据一个函数来计算 float gapDuration = (!voiceDuration || voiceDuration.length == 0 ? -1 : [voiceDuration floatValue] - 1.0f); - CGSize voiceSize = CGSizeMake(100 + (gapDuration > 0 ? (120.0 / (60 - 1) * gapDuration) : 0), 30); + CGSize voiceSize = CGSizeMake(100 + (gapDuration > 0 ? (120.0 / (60 - 1) * gapDuration) : 0), 42); return voiceSize; } +// 计算Emotion的高度 ++ (CGSize)neededSizeForEmotion { + return CGSizeMake(100, 100); +} + +// 计算LocalPostion的高度 ++ (CGSize)neededSizeForLocalPostion { + return CGSizeMake(140, 140); +} + +// 计算Cell需要实际Message内容的大小 + (CGFloat)calculateCellHeightWithMessage:(id )message { CGSize size = [XHMessageBubbleView getBubbleFrameWithMessage:message]; - return size.height + kMarginTop + kMarginBottom; + return size.height; } +// 获取Cell需要的高度 + (CGSize)getBubbleFrameWithMessage:(id )message { CGSize bubbleSize; switch (message.messageMediaType) { case XHBubbleMessageMediaTypeText: { - bubbleSize = [XHMessageBubbleView neededSizeForText:message.text]; + CGSize needTextSize = [XHMessageBubbleView neededSizeForText:message.text]; + bubbleSize = CGSizeMake(needTextSize.width + kXHLeftTextHorizontalBubblePadding + kXHRightTextHorizontalBubblePadding + kXHArrowMarginWidth, needTextSize.height + kXHHaveBubbleMargin * 2 + kXHTopAndBottomBubbleMargin * 2); //这里*4的原因是:气泡内部的文本也做了margin,而且margin的大小和气泡的margin一样大小,所以需要加上*2的间隙大小 break; } - case XHBubbleMessageMediaTypePhoto: { - bubbleSize = [XHMessageBubbleView neededSizeForPhoto:message.photo]; + case XHBubbleMessageMediaTypeVoice: { + // 这里的宽度是不定的,高度是固定的,根据需要根据语音长短来定制啦 + CGSize needVoiceSize = [XHMessageBubbleView neededSizeForVoicePath:message.voicePath voiceDuration:message.voiceDuration]; + bubbleSize = CGSizeMake(needVoiceSize.width, needVoiceSize.height + kXHHaveBubbleVoiceMargin * 2); break; } - case XHBubbleMessageMediaTypeVideo: { - bubbleSize = [XHMessageBubbleView neededSizeForPhoto:message.videoConverPhoto]; + case XHBubbleMessageMediaTypeEmotion: { + // 是否固定大小呢? + CGSize emotionSize = [XHMessageBubbleView neededSizeForEmotion]; + bubbleSize = CGSizeMake(emotionSize.width, emotionSize.height + kXHHaveBubbleMargin * 2); break; } - case XHBubbleMessageMediaTypeVoice: { - // 这里的宽度是不定的,高度是固定的,根据需要根据语音长短来定制啦 - bubbleSize = [XHMessageBubbleView neededSizeForVoicePath:message.voicePath voiceDuration:message.voiceDuration]; + case XHBubbleMessageMediaTypeVideo: { + CGSize needVideoConverPhotoSize = [XHMessageBubbleView neededSizeForPhoto:message.videoConverPhoto]; + bubbleSize = CGSizeMake(needVideoConverPhotoSize.width, needVideoConverPhotoSize.height + kXHNoneBubblePhotoMargin * 2); break; } - case XHBubbleMessageMediaTypeEmotion: - // 是否固定大小呢? - bubbleSize = CGSizeMake(100, 100); + case XHBubbleMessageMediaTypePhoto: { + CGSize needPhotoSize = [XHMessageBubbleView neededSizeForPhoto:message.photo]; + bubbleSize = CGSizeMake(needPhotoSize.width, needPhotoSize.height + kXHHaveBubblePhotoMargin * 2); break; - case XHBubbleMessageMediaTypeLocalPosition: + } + case XHBubbleMessageMediaTypeLocalPosition: { // 固定大小,必须的 - bubbleSize = CGSizeMake(119, 119); + CGSize localPostionSize = [XHMessageBubbleView neededSizeForLocalPostion]; + bubbleSize = CGSizeMake(localPostionSize.width, localPostionSize.height + kXHHaveBubblePhotoMargin * 2); break; + } default: break; } @@ -127,17 +177,46 @@ - (UIFont *)font { #pragma mark - Getters - +// 获取气泡的位置以及大小,比如有文字的气泡,语音的气泡,图片的气泡,地理位置的气泡,Emotion的气泡,视频封面的气泡 - (CGRect)bubbleFrame { + // 1.先得到MessageBubbleView的实际大小 CGSize bubbleSize = [XHMessageBubbleView getBubbleFrameWithMessage:self.message]; - return CGRectIntegral(CGRectMake((self.message.bubbleMessageType == XHBubbleMessageTypeSending ? CGRectGetWidth(self.bounds) - bubbleSize.width : 0.0f), - kMarginTop, - bubbleSize.width, - bubbleSize.height + kMarginTop + kMarginBottom)); + // 2.计算起泡的大小和位置 + CGFloat paddingX = 0.0f; + if (self.message.bubbleMessageType == XHBubbleMessageTypeSending) { + paddingX = CGRectGetWidth(self.bounds) - bubbleSize.width; + } + + XHBubbleMessageMediaType currentMessageMediaType = self.message.messageMediaType; + + // 最终减去上下边距的像素就可以得到气泡的位置以及大小 + CGFloat marginY = 0.0; + CGFloat topSumForBottom = 0.0; + switch (currentMessageMediaType) { + case XHBubbleMessageMediaTypeVoice: + marginY = kXHHaveBubbleVoiceMargin; + topSumForBottom = kXHHaveBubbleVoiceMargin * 2; + break; + case XHBubbleMessageMediaTypePhoto: + case XHBubbleMessageMediaTypeLocalPosition: + marginY = kXHHaveBubblePhotoMargin; + topSumForBottom = kXHHaveBubblePhotoMargin * 2; + break; + default: + // 文本、视频、表情 + marginY = kXHHaveBubbleMargin; + topSumForBottom = kXHHaveBubbleMargin * 2; + break; + } + + return CGRectMake(paddingX, + marginY, + bubbleSize.width, + bubbleSize.height - topSumForBottom); } -#pragma mark - Life cycle +#pragma mark - Configure Methods - (void)configureCellWithMessage:(id )message { _message = message; @@ -151,9 +230,11 @@ - (void)configureBubbleImageView:(id )message { XHBubbleMessageMediaType currentType = message.messageMediaType; _voiceDurationLabel.hidden = YES; + _voiceUnreadDotImageView.hidden = YES; switch (currentType) { case XHBubbleMessageMediaTypeVoice: { _voiceDurationLabel.hidden = NO; + _voiceUnreadDotImageView.hidden = message.isRead; } case XHBubbleMessageMediaTypeText: case XHBubbleMessageMediaTypeEmotion: { @@ -227,6 +308,7 @@ - (void)configureMessageDisplayMediaWithMessage:(id )message { [_bubblePhotoImageView configureMessagePhoto:message.videoConverPhoto thumbnailUrl:message.thumbnailUrl originPhotoUrl:message.originPhotoUrl onBubbleMessageType:self.message.bubbleMessageType]; break; case XHBubbleMessageMediaTypeVoice: + self.voiceDurationLabel.text = [NSString stringWithFormat:@"%@\'\'", message.voiceDuration]; break; case XHBubbleMessageMediaTypeEmotion: // 直接设置GIF @@ -248,6 +330,21 @@ - (void)configureMessageDisplayMediaWithMessage:(id )message { [self setNeedsLayout]; } +- (void)configureVoiceDurationLabelFrameWithBubbleFrame:(CGRect)bubbleFrame { + CGRect voiceFrame = _voiceDurationLabel.frame; + voiceFrame.origin.x = (self.message.bubbleMessageType == XHBubbleMessageTypeSending ? bubbleFrame.origin.x - CGRectGetWidth(voiceFrame) : bubbleFrame.origin.x + bubbleFrame.size.width); + _voiceDurationLabel.frame = voiceFrame; +} + +- (void)configureVoiceUnreadDotImageViewFrameWithBubbleFrame:(CGRect)bubbleFrame { + CGRect voiceUnreadDotFrame = _voiceUnreadDotImageView.frame; + voiceUnreadDotFrame.origin.x = (self.message.bubbleMessageType == XHBubbleMessageTypeSending ? bubbleFrame.origin.x + kXHUnReadDotSize : CGRectGetMaxX(bubbleFrame) - kXHUnReadDotSize * 2); + voiceUnreadDotFrame.origin.y = CGRectGetMidY(bubbleFrame) - kXHUnReadDotSize / 2.0; + _voiceUnreadDotImageView.frame = voiceUnreadDotFrame; +} + +#pragma mark - Life cycle + - (instancetype)initWithFrame:(CGRect)frame message:(id )message { self = [super initWithFrame:frame]; @@ -268,6 +365,7 @@ - (instancetype)initWithFrame:(CGRect)frame // 2、初始化显示文本消息的TextView if (!_displayTextView) { SETextView *displayTextView = [[SETextView alloc] initWithFrame:CGRectZero]; + displayTextView.textColor = [UIColor colorWithWhite:0.143 alpha:1.000]; displayTextView.backgroundColor = [UIColor clearColor]; displayTextView.selectable = NO; displayTextView.lineSpacing = kXHTextLineSpacing; @@ -304,11 +402,11 @@ - (instancetype)initWithFrame:(CGRect)frame // 4、初始化显示语音时长的label if (!_voiceDurationLabel) { - UILabel *voiceDurationLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 15, 30, 30)]; - voiceDurationLabel.textColor = [UIColor lightGrayColor]; + UILabel *voiceDurationLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 30, 28, 20)]; + voiceDurationLabel.textColor = [UIColor colorWithWhite:0.579 alpha:1.000]; voiceDurationLabel.backgroundColor = [UIColor clearColor]; voiceDurationLabel.font = [UIFont systemFontOfSize:13.f]; - voiceDurationLabel.textAlignment = NSTextAlignmentRight; + voiceDurationLabel.textAlignment = NSTextAlignmentCenter; voiceDurationLabel.hidden = YES; [self addSubview:voiceDurationLabel]; _voiceDurationLabel = voiceDurationLabel; @@ -320,6 +418,20 @@ - (instancetype)initWithFrame:(CGRect)frame [self addSubview:emotionImageView]; _emotionImageView = emotionImageView; } + + // 6. 初始化显示语音未读标记的imageview + if (!_voiceUnreadDotImageView) { + NSString *voiceUnreadImageName = [[XHConfigurationHelper appearance].messageTableStyle objectForKey:kXHMessageTableVoiceUnreadImageNameKey]; + if (!voiceUnreadImageName) { + voiceUnreadImageName = @"msg_chat_voice_unread"; + } + + UIImageView *voiceUnreadDotImageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, kXHUnReadDotSize, kXHUnReadDotSize)]; + voiceUnreadDotImageView.image = [UIImage imageNamed:voiceUnreadImageName]; + voiceUnreadDotImageView.hidden = YES; + [self addSubview:voiceUnreadDotImageView]; + _voiceUnreadDotImageView = voiceUnreadDotImageView; + } } return self; } @@ -335,6 +447,8 @@ - (void)dealloc { _animationVoiceImageView = nil; + _voiceUnreadDotImageView = nil; + _voiceDurationLabel = nil; _emotionImageView = nil; @@ -351,41 +465,64 @@ - (void)layoutSubviews { [super layoutSubviews]; XHBubbleMessageMediaType currentType = self.message.messageMediaType; - CGRect bubbleFrame = [self bubbleFrame]; switch (currentType) { case XHBubbleMessageMediaTypeText: case XHBubbleMessageMediaTypeVoice: case XHBubbleMessageMediaTypeEmotion: { + // 获取实际气泡的大小 + CGRect bubbleFrame = [self bubbleFrame]; self.bubbleImageView.frame = bubbleFrame; - CGFloat textX = CGRectGetMinX(bubbleFrame) + kBubblePaddingRight; - - if (self.message.bubbleMessageType == XHBubbleMessageTypeReceiving) { - textX += kXHArrowMarginWidth / 2.0; + if (currentType == XHBubbleMessageMediaTypeText) { + CGFloat textX = -(kXHArrowMarginWidth / 2.0); + if (self.message.bubbleMessageType == XHBubbleMessageTypeReceiving) { + textX = kXHArrowMarginWidth / 2.0; + } + CGRect displayTextViewFrame = CGRectZero; + displayTextViewFrame.size.width = CGRectGetWidth(bubbleFrame) - kXHLeftTextHorizontalBubblePadding - kXHRightTextHorizontalBubblePadding - kXHArrowMarginWidth; + displayTextViewFrame.size.height = CGRectGetHeight(bubbleFrame) - kXHHaveBubbleMargin * 3; + self.displayTextView.frame = displayTextViewFrame; + self.displayTextView.center = CGPointMake(self.bubbleImageView.center.x + textX, self.bubbleImageView.center.y); } - CGRect textFrame = CGRectMake(textX, - CGRectGetMinY(bubbleFrame) + kPaddingTop, - CGRectGetWidth(bubbleFrame) - kBubblePaddingRight * 2, - bubbleFrame.size.height - kMarginTop - kMarginBottom); - - self.displayTextView.frame = CGRectIntegral(textFrame); - - CGRect animationVoiceImageViewFrame = self.animationVoiceImageView.frame; - animationVoiceImageViewFrame.origin = CGPointMake((self.message.bubbleMessageType == XHBubbleMessageTypeReceiving ? (bubbleFrame.origin.x + kVoiceMargin) : (bubbleFrame.origin.x + CGRectGetWidth(bubbleFrame) - kVoiceMargin - CGRectGetWidth(animationVoiceImageViewFrame))), 17); - self.animationVoiceImageView.frame = animationVoiceImageViewFrame; - - [self resetVoiceDurationLabelFrameWithBubbleFrame:bubbleFrame]; - - self.emotionImageView.frame = bubbleFrame; + if (currentType == XHBubbleMessageMediaTypeVoice) { + // 配置语音播放的位置 + CGRect animationVoiceImageViewFrame = self.animationVoiceImageView.frame; + CGFloat voiceImagePaddingX = CGRectGetMaxX(bubbleFrame) - kXHVoiceMargin - CGRectGetWidth(animationVoiceImageViewFrame); + if (self.message.bubbleMessageType == XHBubbleMessageTypeReceiving) { + voiceImagePaddingX = CGRectGetMinX(bubbleFrame) + kXHVoiceMargin; + } + animationVoiceImageViewFrame.origin = CGPointMake(voiceImagePaddingX, CGRectGetMidY(bubbleFrame) - CGRectGetHeight(animationVoiceImageViewFrame) / 2.0); // 垂直居中 + self.animationVoiceImageView.frame = animationVoiceImageViewFrame; + + [self configureVoiceDurationLabelFrameWithBubbleFrame:bubbleFrame]; + [self configureVoiceUnreadDotImageViewFrameWithBubbleFrame:bubbleFrame]; + } + if (currentType == XHBubbleMessageMediaTypeEmotion) { + CGRect emotionImageViewFrame = bubbleFrame; + emotionImageViewFrame.size = [XHMessageBubbleView neededSizeForEmotion]; + self.emotionImageView.frame = emotionImageViewFrame; + } break; } case XHBubbleMessageMediaTypePhoto: case XHBubbleMessageMediaTypeVideo: case XHBubbleMessageMediaTypeLocalPosition: { - CGRect photoImageViewFrame = CGRectMake(bubbleFrame.origin.x - 2, 0, bubbleFrame.size.width, bubbleFrame.size.height); + CGSize needPhotoSize = [XHMessageBubbleView neededSizeForPhoto:self.message.photo]; + CGFloat paddingX = 0.0f; + if (self.message.bubbleMessageType == XHBubbleMessageTypeSending) { + paddingX = CGRectGetWidth(self.bounds) - needPhotoSize.width; + } + + CGFloat marginY = kXHNoneBubblePhotoMargin; + if (currentType == XHBubbleMessageMediaTypePhoto || currentType == XHBubbleMessageMediaTypeLocalPosition) { + marginY = kXHHaveBubblePhotoMargin; + } + + CGRect photoImageViewFrame = CGRectMake(paddingX, marginY, needPhotoSize.width, needPhotoSize.height); + self.bubblePhotoImageView.frame = photoImageViewFrame; self.videoPlayImageView.center = CGPointMake(CGRectGetWidth(photoImageViewFrame) / 2.0, CGRectGetHeight(photoImageViewFrame) / 2.0); @@ -400,12 +537,4 @@ - (void)layoutSubviews { } } -- (void)resetVoiceDurationLabelFrameWithBubbleFrame:(CGRect)bubbleFrame { - CGRect voiceFrame = _voiceDurationLabel.frame; - voiceFrame.origin.x = (self.message.bubbleMessageType == XHBubbleMessageTypeSending ? bubbleFrame.origin.x - _voiceDurationLabel.frame.size.width : bubbleFrame.origin.x + bubbleFrame.size.width); - _voiceDurationLabel.frame = voiceFrame; - - _voiceDurationLabel.textAlignment = (self.message.bubbleMessageType == XHBubbleMessageTypeSending ? NSTextAlignmentRight : NSTextAlignmentLeft); -} - @end diff --git a/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageDisplayTextView.m b/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageDisplayTextView.m deleted file mode 100644 index f1862ee..0000000 --- a/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageDisplayTextView.m +++ /dev/null @@ -1,33 +0,0 @@ -// -// XHMessageDisplayTextView.m -// MessageDisplayExample -// -// Created by qtone-1 on 14-4-28. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. -// - -#import "XHMessageDisplayTextView.h" - -@implementation XHMessageDisplayTextView - -- (id)initWithFrame:(CGRect)frame { - self = [super initWithFrame:frame]; - if (self) { - // Initialization code - } - return self; -} - -- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { - return NO; -} - -- (void)dealloc { - -} - -- (BOOL)canPerformAction:(SEL)action withSender:(id)sender { - return NO; -} - -@end diff --git a/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageTableView.h b/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageTableView.h index bf02afe..9405b62 100644 --- a/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageTableView.h +++ b/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageTableView.h @@ -2,8 +2,8 @@ // XHMessageTableView.h // MessageDisplayExample // -// Created by qtone-1 on 14-4-24. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageTableView.m b/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageTableView.m index 665c7ad..0dab870 100644 --- a/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageTableView.m +++ b/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageTableView.m @@ -2,8 +2,8 @@ // XHMessageTableView.m // MessageDisplayExample // -// Created by qtone-1 on 14-4-24. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHMessageTableView.h" diff --git a/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageTableViewCell.h b/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageTableViewCell.h index 7d1b066..96147f1 100644 --- a/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageTableViewCell.h +++ b/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageTableViewCell.h @@ -2,13 +2,14 @@ // XHMessageTableViewCell.h // MessageDisplayExample // -// Created by qtone-1 on 14-4-24. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import #import "XHBaseTableViewCell.h" +#import "XHConfigurationHelper.h" #import "XHMessageBubbleView.h" #import "UIView+XHRemoteImage.h" @@ -42,7 +43,7 @@ * * @param indexPath 该目标消息在哪个IndexPath里面 */ -- (void)didSelectedAvatorOnMessage:(id )message atIndexPath:(NSIndexPath *)indexPath; +- (void)didSelectedAvatarOnMessage:(id )message atIndexPath:(NSIndexPath *)indexPath; /** * Menu Control Selected Item @@ -65,7 +66,7 @@ /** * 头像按钮 */ -@property (nonatomic, weak, readonly) UIButton *avatorButton; +@property (nonatomic, weak, readonly) UIButton *avatarButton; /** * 用户名标签 diff --git a/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageTableViewCell.m b/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageTableViewCell.m index 22f879d..75ea23a 100644 --- a/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageTableViewCell.m +++ b/MessageDisplayKit/Classes/Views/MessageContentViews/XHMessageTableViewCell.m @@ -2,8 +2,8 @@ // XHMessageTableViewCell.m // MessageDisplayExample // -// Created by qtone-1 on 14-4-24. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHMessageTableViewCell.h" @@ -11,11 +11,10 @@ static const CGFloat kXHLabelPadding = 5.0f; static const CGFloat kXHTimeStampLabelHeight = 20.0f; -static const CGFloat kXHAvatorPaddingX = 8.0; -static const CGFloat kXHAvatorPaddingY = 15; - -static const CGFloat kXHBubbleMessageViewPadding = 8; +static const CGFloat kXHAvatarPaddingX = 8.0; +static const CGFloat kXHAvatarPaddingY = 15; +static const CGFloat kXHUserNameLabelHeight = 20; @interface XHMessageTableViewCell () { @@ -23,7 +22,7 @@ @interface XHMessageTableViewCell () { @property (nonatomic, weak, readwrite) XHMessageBubbleView *messageBubbleView; -@property (nonatomic, weak, readwrite) UIButton *avatorButton; +@property (nonatomic, weak, readwrite) UIButton *avatarButton; @property (nonatomic, weak, readwrite) UILabel *userNameLabel; @@ -46,7 +45,7 @@ - (void)configureTimestamp:(BOOL)displayTimestamp atMessage:(id * * @param message 需要配置的目标消息Model */ -- (void)configAvatorWithMessage:(id )message; +- (void)configAvatarWithMessage:(id )message; /** * 3、配置需要显示什么消息内容,比如语音、文字、视频、图片 @@ -60,7 +59,7 @@ - (void)configureMessageBubbleViewWithMessage:(id )message; * * @param sender 头像按钮对象 */ -- (void)avatorButtonClicked:(UIButton *)sender; +- (void)avatarButtonClicked:(UIButton *)sender; /** * 统一一个方法隐藏MenuController,多处需要调用 @@ -99,9 +98,9 @@ - (void)doubleTapGestureRecognizerHandle:(UITapGestureRecognizer *)tapGestureRec @implementation XHMessageTableViewCell -- (void)avatorButtonClicked:(UIButton *)sender { - if ([self.delegate respondsToSelector:@selector(didSelectedAvatorOnMessage:atIndexPath:)]) { - [self.delegate didSelectedAvatorOnMessage:self.messageBubbleView.message atIndexPath:self.indexPath]; +- (void)avatarButtonClicked:(UIButton *)sender { + if ([self.delegate respondsToSelector:@selector(didSelectedAvatarOnMessage:atIndexPath:)]) { + [self.delegate didSelectedAvatarOnMessage:self.messageBubbleView.message atIndexPath:self.indexPath]; } } @@ -147,7 +146,7 @@ - (void)configureCellWithMessage:(id )message [self configureTimestamp:displayTimestamp atMessage:message]; // 2、配置头像 - [self configAvatorWithMessage:message]; + [self configAvatarWithMessage:message]; // 3、配置用户名 [self configUserNameWithMessage:message]; @@ -160,21 +159,66 @@ - (void)configureTimestamp:(BOOL)displayTimestamp atMessage:(id self.displayTimestamp = displayTimestamp; self.timestampLabel.hidden = !self.displayTimestamp; if (displayTimestamp) { - self.timestampLabel.text = [NSDateFormatter localizedStringFromDate:message.timestamp - dateStyle:NSDateFormatterMediumStyle - timeStyle:NSDateFormatterShortStyle]; + NSString *dateText = nil; + NSString *timeText = nil; + + NSDate *today = [NSDate date]; + NSDateComponents *components = [[NSDateComponents alloc] init]; + [components setDay:-1]; + NSDate *yesterday = [[NSCalendar currentCalendar] dateByAddingComponents:components toDate:today options:0]; + + NSDateComponents *dateComponents = [[NSCalendar currentCalendar] components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:message.timestamp]; + NSDateComponents *todayComponents = [[NSCalendar currentCalendar] components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:today]; + NSDateComponents *yesterdayComponents = [[NSCalendar currentCalendar] components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay fromDate:yesterday]; + + if (dateComponents.year == todayComponents.year && dateComponents.month == todayComponents.month && dateComponents.day == todayComponents.day) { + dateText = NSLocalizedStringFromTable(@"Today", @"MessageDisplayKitString", @"今天"); + } else if (dateComponents.year == yesterdayComponents.year && dateComponents.month == yesterdayComponents.month && dateComponents.day == yesterdayComponents.day) { + dateText = NSLocalizedStringFromTable(@"Yesterday", @"MessageDisplayKitString", @"昨天"); + } else { + dateText = [NSDateFormatter localizedStringFromDate:message.timestamp dateStyle:NSDateFormatterMediumStyle timeStyle:NSDateFormatterNoStyle]; + } + timeText = [NSDateFormatter localizedStringFromDate:message.timestamp dateStyle:NSDateFormatterNoStyle timeStyle:NSDateFormatterShortStyle]; + + self.timestampLabel.text = [NSString stringWithFormat:@"%@ %@",dateText,timeText]; } } -- (void)configAvatorWithMessage:(id )message { - if (message.avator) { - [self.avatorButton setImage:message.avator forState:UIControlStateNormal]; - if (message.avatorUrl) { - self.avatorButton.messageAvatorType = XHMessageAvatorTypeSquare; - [self.avatorButton setImageWithURL:[NSURL URLWithString:message.avatorUrl] placeholer:[UIImage imageNamed:@"avator"]]; +- (void)configAvatarWithMessage:(id )message { + UIImage *avatarPhoto = message.avatar; + NSString *avatarURL = message.avatarUrl; + + if (avatarPhoto) { + [self configAvatarWithPhoto:avatarPhoto]; + if (avatarURL) { + [self configAvatarWithPhotoURLString:avatarURL]; } + } else if (avatarURL) { + [self configAvatarWithPhotoURLString:avatarURL]; } else { - [self.avatorButton setImage:[XHMessageAvatorFactory avatarImageNamed:[UIImage imageNamed:@"avator"] messageAvatorType:XHMessageAvatorTypeSquare] forState:UIControlStateNormal]; + UIImage *avatarPhoto = [self getAvatarPlaceholderImage]; + [self configAvatarWithPhoto:avatarPhoto]; + } +} + +- (UIImage *)getAvatarPlaceholderImage { + NSString *avatarPalceholderImageName = [[XHConfigurationHelper appearance].messageTableStyle objectForKey:kXHMessageTableAvatarPalceholderImageNameKey]; + if (!avatarPalceholderImageName) { + avatarPalceholderImageName = @"avatar"; + } + return [UIImage imageNamed:avatarPalceholderImageName]; +} + +- (void)configAvatarWithPhoto:(UIImage *)photo { + [self.avatarButton setImage:photo forState:UIControlStateNormal]; +} + +- (void)configAvatarWithPhotoURLString:(NSString *)photoURLString { + BOOL customLoadAvatarNetworkImage = [[[XHConfigurationHelper appearance].messageTableStyle objectForKey:kXHMessageTableCustomLoadAvatarNetworImageKey] boolValue]; + if (!customLoadAvatarNetworkImage) { + XHMessageAvatarType avatarType = [[[XHConfigurationHelper appearance].messageTableStyle objectForKey:kXHMessageTableAvatarTypeKey] integerValue]; + self.avatarButton.messageAvatarType = avatarType; + [self.avatarButton setImageWithURL:[NSURL URLWithString:photoURLString] placeholer:[self getAvatarPlaceholderImage]]; } } @@ -199,10 +243,7 @@ - (void)configureMessageBubbleViewWithMessage:(id )message { break; } case XHBubbleMessageMediaTypeText: - case XHBubbleMessageMediaTypeVoice: { - self.messageBubbleView.voiceDurationLabel.text = [NSString stringWithFormat:@"%@\'\'", message.voiceDuration]; -// break; - } + case XHBubbleMessageMediaTypeVoice: case XHBubbleMessageMediaTypeEmotion: { UITapGestureRecognizer *tapGestureRecognizer; if (currentMediaType == XHBubbleMessageMediaTypeText) { @@ -241,14 +282,43 @@ - (void)longPressGestureRecognizerHandle:(UILongPressGestureRecognizer *)longPre if (longPressGestureRecognizer.state != UIGestureRecognizerStateBegan || ![self becomeFirstResponder]) return; - UIMenuItem *copy = [[UIMenuItem alloc] initWithTitle:NSLocalizedStringFromTable(@"copy", @"MessageDisplayKitString", @"复制文本消息") action:@selector(copyed:)]; - UIMenuItem *transpond = [[UIMenuItem alloc] initWithTitle:NSLocalizedStringFromTable(@"transpond", @"MessageDisplayKitString", @"转发") action:@selector(transpond:)]; - UIMenuItem *favorites = [[UIMenuItem alloc] initWithTitle:NSLocalizedStringFromTable(@"favorites", @"MessageDisplayKitString", @"收藏") action:@selector(favorites:)]; - UIMenuItem *more = [[UIMenuItem alloc] initWithTitle:NSLocalizedStringFromTable(@"more", @"MessageDisplayKitString", @"更多") action:@selector(more:)]; + NSArray *popMenuTitles = [[XHConfigurationHelper appearance] popMenuTitles]; + NSMutableArray *menuItems = [[NSMutableArray alloc] init]; + for (int i = 0; i < popMenuTitles.count; i ++) { + NSString *title = popMenuTitles[i]; + SEL action = nil; + switch (i) { + case 0: { + if ([self.messageBubbleView.message messageMediaType] == XHBubbleMessageMediaTypeText) { + action = @selector(copyed:); + } + break; + } + case 1: { + action = @selector(transpond:); + break; + } + case 2: { + action = @selector(favorites:); + break; + } + case 3: { + action = @selector(more:); + break; + } + default: + break; + } + if (action) { + UIMenuItem *item = [[UIMenuItem alloc] initWithTitle:title action:action]; + if (item) { + [menuItems addObject:item]; + } + } + } UIMenuController *menu = [UIMenuController sharedMenuController]; - [menu setMenuItems:[NSArray arrayWithObjects:copy, transpond, favorites, more, nil]]; - + [menu setMenuItems:menuItems]; CGRect targetRect = [self convertRect:[self.messageBubbleView bubbleFrame] fromView:self.messageBubbleView]; @@ -308,16 +378,14 @@ - (XHBubbleMessageType)bubbleMessageType { + (CGFloat)calculateCellHeightWithMessage:(id )message displaysTimestamp:(BOOL)displayTimestamp { - CGFloat timestampHeight = displayTimestamp ? (kXHTimeStampLabelHeight + kXHLabelPadding * 2) : kXHLabelPadding; - CGFloat avatarHeight = kXHAvatarImageSize; - - CGFloat userNameHeight = 20; + // 第一,是否有时间戳的显示 + CGFloat timestampHeight = displayTimestamp ? (kXHTimeStampLabelHeight + kXHLabelPadding * 2) : 0; - CGFloat subviewHeights = timestampHeight + kXHBubbleMessageViewPadding * 2 + userNameHeight; + CGFloat userInfoNeedHeight = kXHAvatarPaddingY + kXHAvatarImageSize + (message.shouldShowUserName ? kXHUserNameLabelHeight : 0) + kXHAvatarPaddingY + timestampHeight; - CGFloat bubbleHeight = [XHMessageBubbleView calculateCellHeightWithMessage:message]; + CGFloat bubbleMessageHeight = [XHMessageBubbleView calculateCellHeightWithMessage:message] + timestampHeight; - return subviewHeights + MAX(avatarHeight, bubbleHeight); + return MAX(bubbleMessageHeight, userInfoNeedHeight); } #pragma mark - Life cycle @@ -346,11 +414,19 @@ - (instancetype)initWithMessage:(id )message // 1、是否显示Time Line的label if (!_timestampLabel) { - LKBadgeView *timestampLabel = [[LKBadgeView alloc] initWithFrame:CGRectMake(0, kXHLabelPadding, 160, kXHTimeStampLabelHeight)]; + UIColor *timestampLabelTextColor = [[XHConfigurationHelper appearance].messageTableStyle objectForKey:kXHMessageTableTimestampTextColorKey]; + if (!timestampLabelTextColor) { + timestampLabelTextColor = [UIColor whiteColor]; + } + UIColor *timestampBackgroundColor = [[XHConfigurationHelper appearance].messageTableStyle objectForKey:kXHMessageTableTimestampBackgroundColorKey]; + if (!timestampBackgroundColor) { + timestampBackgroundColor = [UIColor colorWithWhite:0.734 alpha:1.000]; + } + LKBadgeView *timestampLabel = [[LKBadgeView alloc] initWithFrame:CGRectMake(0, kXHLabelPadding, MDK_SCREEN_WIDTH, kXHTimeStampLabelHeight)]; timestampLabel.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleLeftMargin; - timestampLabel.badgeColor = [UIColor colorWithWhite:0.000 alpha:0.380]; - timestampLabel.textColor = [UIColor whiteColor]; - timestampLabel.font = [UIFont systemFontOfSize:13.0f]; + timestampLabel.badgeColor = timestampBackgroundColor; + timestampLabel.textColor = timestampLabelTextColor; + timestampLabel.font = [UIFont systemFontOfSize:10.0f]; timestampLabel.center = CGPointMake(CGRectGetWidth([[UIScreen mainScreen] bounds]) / 2.0, timestampLabel.center.y); [self.contentView addSubview:timestampLabel]; [self.contentView bringSubviewToFront:timestampLabel]; @@ -358,55 +434,45 @@ - (instancetype)initWithMessage:(id )message } // 2、配置头像 - // avator - CGRect avatorButtonFrame; + CGRect avatarButtonFrame; switch (message.bubbleMessageType) { case XHBubbleMessageTypeReceiving: - avatorButtonFrame = CGRectMake(kXHAvatorPaddingX, kXHAvatorPaddingY + (self.displayTimestamp ? kXHTimeStampLabelHeight : 0), kXHAvatarImageSize, kXHAvatarImageSize); + avatarButtonFrame = CGRectMake(kXHAvatarPaddingX, + kXHAvatarPaddingY + (self.displayTimestamp ? (kXHTimeStampLabelHeight + kXHLabelPadding * 2) : 0), + kXHAvatarImageSize, + kXHAvatarImageSize); break; case XHBubbleMessageTypeSending: - avatorButtonFrame = CGRectMake(CGRectGetWidth(self.bounds) - kXHAvatarImageSize - kXHAvatorPaddingX, kXHAvatorPaddingY + (self.displayTimestamp ? kXHTimeStampLabelHeight : 0), kXHAvatarImageSize, kXHAvatarImageSize); + avatarButtonFrame = CGRectMake(CGRectGetWidth(self.bounds) - kXHAvatarImageSize - kXHAvatarPaddingX, + kXHAvatarPaddingY + (self.displayTimestamp ? (kXHTimeStampLabelHeight + kXHLabelPadding * 2) : 0), + kXHAvatarImageSize, + kXHAvatarImageSize); break; default: break; } - UIButton *avatorButton = [[UIButton alloc] initWithFrame:avatorButtonFrame]; - [avatorButton setImage:[XHMessageAvatorFactory avatarImageNamed:[UIImage imageNamed:@"avator"] messageAvatorType:XHMessageAvatorTypeCircle] forState:UIControlStateNormal]; - [avatorButton addTarget:self action:@selector(avatorButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; - [self.contentView addSubview:avatorButton]; - self.avatorButton = avatorButton; + UIButton *avatarButton = [[UIButton alloc] initWithFrame:avatarButtonFrame]; + [avatarButton setImage:[self getAvatarPlaceholderImage] forState:UIControlStateNormal]; + [avatarButton addTarget:self action:@selector(avatarButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; + [self.contentView addSubview:avatarButton]; + self.avatarButton = avatarButton; - // 3、配置用户名 - UILabel *userNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.avatorButton.bounds) + 20, 20)]; - userNameLabel.textAlignment = NSTextAlignmentCenter; - userNameLabel.backgroundColor = [UIColor clearColor]; - userNameLabel.font = [UIFont systemFontOfSize:12]; - userNameLabel.textColor = [UIColor colorWithRed:0.140 green:0.635 blue:0.969 alpha:1.000]; - [self.contentView addSubview:userNameLabel]; - self.userNameLabel = userNameLabel; + if (message.shouldShowUserName) { + // 3、配置用户名 + UILabel *userNameLabel = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.avatarButton.bounds) + 20, kXHUserNameLabelHeight)]; + userNameLabel.textAlignment = NSTextAlignmentCenter; + userNameLabel.backgroundColor = [UIColor clearColor]; + userNameLabel.font = [UIFont systemFontOfSize:12]; + userNameLabel.textColor = [UIColor colorWithRed:0.140 green:0.635 blue:0.969 alpha:1.000]; + [self.contentView addSubview:userNameLabel]; + self.userNameLabel = userNameLabel; + } // 4、配置需要显示什么消息内容,比如语音、文字、视频、图片 if (!_messageBubbleView) { - CGFloat bubbleX = 0.0f; - - CGFloat offsetX = 0.0f; - - if (message.bubbleMessageType == XHBubbleMessageTypeReceiving) - bubbleX = kXHAvatarImageSize + kXHAvatorPaddingX + kXHAvatorPaddingX; - else - offsetX = kXHAvatarImageSize + kXHAvatorPaddingX + kXHAvatorPaddingX; - - CGRect frame = CGRectMake(bubbleX, - kXHBubbleMessageViewPadding + (self.displayTimestamp ? (kXHTimeStampLabelHeight + kXHLabelPadding) : kXHLabelPadding), - self.contentView.frame.size.width - bubbleX - offsetX, - self.contentView.frame.size.height - (kXHBubbleMessageViewPadding + (self.displayTimestamp ? (kXHTimeStampLabelHeight + kXHLabelPadding) : kXHLabelPadding))); - // bubble container - XHMessageBubbleView *messageBubbleView = [[XHMessageBubbleView alloc] initWithFrame:frame message:message]; - messageBubbleView.autoresizingMask = (UIViewAutoresizingFlexibleWidth - | UIViewAutoresizingFlexibleHeight - | UIViewAutoresizingFlexibleBottomMargin); + XHMessageBubbleView *messageBubbleView = [[XHMessageBubbleView alloc] initWithFrame:CGRectZero message:message]; [self.contentView addSubview:messageBubbleView]; [self.contentView sendSubviewToBack:messageBubbleView]; self.messageBubbleView = messageBubbleView; @@ -432,29 +498,37 @@ - (void)awakeFromNib { - (void)layoutSubviews { [super layoutSubviews]; - CGFloat layoutOriginY = kXHAvatorPaddingY + (self.displayTimestamp ? kXHTimeStampLabelHeight : 0); - CGRect avatorButtonFrame = self.avatorButton.frame; - avatorButtonFrame.origin.y = layoutOriginY; - avatorButtonFrame.origin.x = ([self bubbleMessageType] == XHBubbleMessageTypeReceiving) ? kXHAvatorPaddingX : ((CGRectGetWidth(self.bounds) - kXHAvatorPaddingX - kXHAvatarImageSize)); + // 布局头像 + CGFloat layoutOriginY = kXHAvatarPaddingY + (self.displayTimestamp ? kXHTimeStampLabelHeight : 0); + CGRect avatarButtonFrame = self.avatarButton.frame; + avatarButtonFrame.origin.y = layoutOriginY; + avatarButtonFrame.origin.x = ([self bubbleMessageType] == XHBubbleMessageTypeReceiving) ? kXHAvatarPaddingX : ((CGRectGetWidth(self.bounds) - kXHAvatarPaddingX - kXHAvatarImageSize)); + self.avatarButton.frame = avatarButtonFrame; - layoutOriginY = kXHBubbleMessageViewPadding + (self.displayTimestamp ? kXHTimeStampLabelHeight : 0); - CGRect bubbleMessageViewFrame = self.messageBubbleView.frame; - bubbleMessageViewFrame.origin.y = layoutOriginY; + if (self.messageBubbleView.message.shouldShowUserName) { + // 布局用户名 + self.userNameLabel.center = CGPointMake(CGRectGetMidX(avatarButtonFrame), CGRectGetMaxY(avatarButtonFrame) + CGRectGetMidY(self.userNameLabel.bounds)); + } + // 布局消息内容的View CGFloat bubbleX = 0.0f; - if ([self bubbleMessageType] == XHBubbleMessageTypeReceiving) - bubbleX = kXHAvatarImageSize + kXHAvatorPaddingX + kXHAvatorPaddingX; - bubbleMessageViewFrame.origin.x = bubbleX; - - self.avatorButton.frame = avatorButtonFrame; - - self.userNameLabel.center = CGPointMake(CGRectGetMidX(avatorButtonFrame), CGRectGetMaxY(avatorButtonFrame) + CGRectGetMidY(self.userNameLabel.bounds)); + CGFloat offsetX = 0.0f; + if ([self bubbleMessageType] == XHBubbleMessageTypeReceiving) { + bubbleX = kXHAvatarImageSize + kXHAvatarPaddingX * 2; + } else { + offsetX = kXHAvatarImageSize + kXHAvatarPaddingX * 2; + } + CGFloat timeStampLabelNeedHeight = (self.displayTimestamp ? (kXHTimeStampLabelHeight + kXHLabelPadding) : 0); + CGRect bubbleMessageViewFrame = CGRectMake(bubbleX, + timeStampLabelNeedHeight, + CGRectGetWidth(self.contentView.bounds) - bubbleX - offsetX, + CGRectGetHeight(self.contentView.bounds) - timeStampLabelNeedHeight); self.messageBubbleView.frame = bubbleMessageViewFrame; } - (void)dealloc { - _avatorButton = nil; + _avatarButton = nil; _timestampLabel = nil; _messageBubbleView = nil; _indexPath = nil; @@ -466,11 +540,17 @@ - (void)dealloc { - (void)prepareForReuse { // 这里做清除工作 [super prepareForReuse]; - self.messageBubbleView.animationVoiceImageView.image = nil; self.messageBubbleView.displayTextView.text = nil; self.messageBubbleView.displayTextView.attributedText = nil; - self.messageBubbleView.bubblePhotoImageView.messagePhoto = nil; + self.messageBubbleView.bubbleImageView.image = nil; self.messageBubbleView.emotionImageView.animatedImage = nil; + self.messageBubbleView.animationVoiceImageView.image = nil; + self.messageBubbleView.voiceDurationLabel.text = nil; + self.messageBubbleView.bubblePhotoImageView.messagePhoto = nil; + self.messageBubbleView.geolocationsLabel.text = nil; + + self.userNameLabel.text = nil; + [self.avatarButton setImage:nil forState:UIControlStateNormal]; self.timestampLabel.text = nil; } diff --git a/MessageDisplayKit/Classes/Views/MessageInputView/XHMessageInputView.h b/MessageDisplayKit/Classes/Views/MessageInputView/XHMessageInputView.h index 4dd0e67..7d35e1d 100644 --- a/MessageDisplayKit/Classes/Views/MessageInputView/XHMessageInputView.h +++ b/MessageDisplayKit/Classes/Views/MessageInputView/XHMessageInputView.h @@ -2,8 +2,8 @@ // XHMessageInputView.h // MessageDisplayExample // -// Created by qtone-1 on 14-4-24. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import @@ -11,8 +11,7 @@ #import "XHMessageTextView.h" typedef NS_ENUM(NSInteger, XHMessageInputViewStyle) { - // 分两种,一种是iOS6样式的,一种是iOS7样式的 - XHMessageInputViewStyleQuasiphysical, + // iOS7样式的 XHMessageInputViewStyleFlat }; diff --git a/MessageDisplayKit/Classes/Views/MessageInputView/XHMessageInputView.m b/MessageDisplayKit/Classes/Views/MessageInputView/XHMessageInputView.m index b0643b1..91a84c8 100644 --- a/MessageDisplayKit/Classes/Views/MessageInputView/XHMessageInputView.m +++ b/MessageDisplayKit/Classes/Views/MessageInputView/XHMessageInputView.m @@ -2,8 +2,8 @@ // XHMessageInputView.m // MessageDisplayExample // -// Created by qtone-1 on 14-4-24. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import @@ -11,9 +11,7 @@ #import "NSString+MessageInputView.h" #import "XHMacro.h" - -#define kXHTouchToRecord @"按住 说话" -#define kXHTouchToFinish @"松开 结束" +#import "XHConfigurationHelper.h" @interface XHMessageInputView () @@ -281,10 +279,27 @@ - (void)setupMessageInputViewBarWithStyle:(XHMessageInputViewStyle)style { // 允许发送语音 if (self.allowsSendVoice) { - button = [self createButtonWithImage:[UIImage imageNamed:@"voice"] HLImage:[UIImage imageNamed:@"voice_HL"]]; + NSString *voiceNormalImageName = [[XHConfigurationHelper appearance].messageInputViewStyle objectForKey:kXHMessageInputViewVoiceNormalImageNameKey]; + if (!voiceNormalImageName) { + voiceNormalImageName = @"voice"; + } + NSString *voiceHLImageName = [[XHConfigurationHelper appearance].messageInputViewStyle objectForKey:kXHMessageInputViewVoiceHLImageNameKey]; + if (!voiceHLImageName) { + voiceHLImageName = @"voice_HL"; + } + NSString *keyboardNormalImageName = [[XHConfigurationHelper appearance].messageInputViewStyle objectForKey:kXHMessageInputViewKeyboardNormalImageNameKey]; + if (!keyboardNormalImageName) { + keyboardNormalImageName = @"keyboard"; + } + NSString *keyboardHLImageName = [[XHConfigurationHelper appearance].messageInputViewStyle objectForKey:kXHMessageInputViewKeyboardHLImageNameKey]; + if (!keyboardHLImageName) { + keyboardHLImageName = @"keyboard_HL"; + } + + button = [self createButtonWithImage:[UIImage imageNamed:voiceNormalImageName] HLImage:[UIImage imageNamed:voiceHLImageName]]; [button addTarget:self action:@selector(messageStyleButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; button.tag = 0; - [button setImage:[UIImage imageNamed:@"keyborad"] forState:UIControlStateSelected]; + [button setBackgroundImage:[UIImage imageNamed:keyboardNormalImageName] forState:UIControlStateSelected]; buttonFrame = button.frame; buttonFrame.origin = CGPointMake(horizontalPadding, verticalPadding); button.frame = buttonFrame; @@ -297,7 +312,16 @@ - (void)setupMessageInputViewBarWithStyle:(XHMessageInputViewStyle)style { // 允许发送多媒体消息,为什么不是先放表情按钮呢?因为布局的需要! if (self.allowsSendMultiMedia) { - button = [self createButtonWithImage:[UIImage imageNamed:@"multiMedia"] HLImage:[UIImage imageNamed:@"multiMedia_HL"]]; + NSString *extensionNormalImageName = [[XHConfigurationHelper appearance].messageInputViewStyle objectForKey:kXHMessageInputViewExtensionNormalImageNameKey]; + if (!extensionNormalImageName) { + extensionNormalImageName = @"multiMedia"; + } + NSString *extensionHLImageName = [[XHConfigurationHelper appearance].messageInputViewStyle objectForKey:kXHMessageInputViewExtensionHLImageNameKey]; + if (!extensionHLImageName) { + extensionHLImageName = @"multiMedia_HL"; + } + + button = [self createButtonWithImage:[UIImage imageNamed:extensionNormalImageName] HLImage:[UIImage imageNamed:extensionHLImageName]]; button.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin; [button addTarget:self action:@selector(messageStyleButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; button.tag = 2; @@ -312,9 +336,27 @@ - (void)setupMessageInputViewBarWithStyle:(XHMessageInputViewStyle)style { // 允许发送表情 if (self.allowsSendFace) { - button = [self createButtonWithImage:[UIImage imageNamed:@"face"] HLImage:[UIImage imageNamed:@"face_HL"]]; + NSString *emotionNormalImageName = [[XHConfigurationHelper appearance].messageInputViewStyle objectForKey:kXHMessageInputViewEmotionNormalImageNameKey]; + if (!emotionNormalImageName) { + emotionNormalImageName = @"face"; + } + NSString *emotionHLImageName = [[XHConfigurationHelper appearance].messageInputViewStyle objectForKey:kXHMessageInputViewEmotionHLImageNameKey]; + if (!emotionHLImageName) { + emotionHLImageName = @"face_HL"; + } + + NSString *keyboardNormalImageName = [[XHConfigurationHelper appearance].messageInputViewStyle objectForKey:kXHMessageInputViewKeyboardNormalImageNameKey]; + if (!keyboardNormalImageName) { + keyboardNormalImageName = @"keyboard"; + } + NSString *keyboardHLImageName = [[XHConfigurationHelper appearance].messageInputViewStyle objectForKey:kXHMessageInputViewKeyboardHLImageNameKey]; + if (!keyboardHLImageName) { + keyboardHLImageName = @"keyboard_HL"; + } + + button = [self createButtonWithImage:[UIImage imageNamed:emotionNormalImageName] HLImage:[UIImage imageNamed:emotionHLImageName]]; button.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin; - [button setImage:[UIImage imageNamed:@"keyborad"] forState:UIControlStateSelected]; + [button setBackgroundImage:[UIImage imageNamed:keyboardNormalImageName] forState:UIControlStateSelected]; [button addTarget:self action:@selector(messageStyleButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; button.tag = 1; buttonFrame = button.frame; @@ -342,7 +384,22 @@ - (void)setupMessageInputViewBarWithStyle:(XHMessageInputViewStyle)style { textView.returnKeyType = UIReturnKeySend; textView.enablesReturnKeyAutomatically = YES; // UITextView内部判断send按钮是否可以用 - textView.placeHolder = @"发送新消息"; + UIColor *placeHolderTextColor = [[XHConfigurationHelper appearance].messageInputViewStyle objectForKey:kXHMessageInputViewPlaceHolderTextColorKey]; + if (placeHolderTextColor) { + textView.placeHolderTextColor = placeHolderTextColor; + } + + UIColor *textColor = [[XHConfigurationHelper appearance].messageInputViewStyle objectForKey:kXHMessageInputViewTextColorKey]; + if (textColor) { + textView.textColor = textColor; + } + + NSString *placeHolder = [[XHConfigurationHelper appearance].messageInputViewStyle objectForKey:kXHMessageInputViewPlaceHolderKey]; + if (!placeHolder) { + placeHolder = NSLocalizedStringFromTable(@"SendAMessage", @"MessageDisplayKitString", nil); + } + + textView.placeHolder = placeHolder; textView.delegate = self; [self addSubview:textView]; @@ -350,46 +407,63 @@ - (void)setupMessageInputViewBarWithStyle:(XHMessageInputViewStyle)style { // 配置不同iOS SDK版本的样式 switch (style) { - case XHMessageInputViewStyleQuasiphysical: { - _inputTextView.frame = CGRectMake(textViewLeftMargin, 3.0f, width, height); - _inputTextView.backgroundColor = [UIColor whiteColor]; + case XHMessageInputViewStyleFlat: { + UIColor *inputBackgroundColor = [XHConfigurationHelper appearance].messageInputViewStyle[kXHMessageInputViewBackgroundColorKey]; + NSString *inputViewBackgroundImageName = nil; + if (!inputBackgroundColor) { + inputViewBackgroundImageName = [[XHConfigurationHelper appearance].messageInputViewStyle objectForKey:kXHMessageInputViewBackgroundImageNameKey]; + if (!inputViewBackgroundImageName) { + inputViewBackgroundImageName = @"input-bar-flat"; + } + } - self.image = [[UIImage imageNamed:@"input-bar-background"] resizableImageWithCapInsets:UIEdgeInsetsMake(19.0f, 3.0f, 19.0f, 3.0f) - resizingMode:UIImageResizingModeStretch]; + UIColor *borderColor = [[XHConfigurationHelper appearance].messageInputViewStyle objectForKey:kXHMessageInputViewBorderColorKey]; + if (!borderColor) { + borderColor = [UIColor colorWithWhite:0.8f alpha:1.0f]; + } + CGFloat borderWidth = [[[XHConfigurationHelper appearance].messageInputViewStyle objectForKey:kXHMessageInputViewBorderWidthKey] floatValue]; + if (borderWidth == 0) { + borderWidth = 0.65f; + } + CGFloat cornerRadius = [[[XHConfigurationHelper appearance].messageInputViewStyle objectForKey:kXHMessageInputViewCornerRadiusKey] floatValue]; + if (cornerRadius == 0) { + cornerRadius = 6.0f; + } - UIImageView *inputFieldBack = [[UIImageView alloc] initWithFrame:CGRectMake(_inputTextView.frame.origin.x - 1.0f, - 0.0f, - _inputTextView.frame.size.width + 2.0f, - self.frame.size.height)]; - inputFieldBack.image = [[UIImage imageNamed:@"input-field-cover"] resizableImageWithCapInsets:UIEdgeInsetsMake(20.0f, 12.0f, 18.0f, 18.0f)]; - inputFieldBack.autoresizingMask = (UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight); - inputFieldBack.backgroundColor = [UIColor clearColor]; - [self addSubview:inputFieldBack]; - break; - } - case XHMessageInputViewStyleFlat: { _inputTextView.frame = CGRectMake(textViewLeftMargin, 4.5f, width, height); _inputTextView.backgroundColor = [UIColor clearColor]; - _inputTextView.layer.borderColor = [UIColor colorWithWhite:0.8f alpha:1.0f].CGColor; - _inputTextView.layer.borderWidth = 0.65f; - _inputTextView.layer.cornerRadius = 6.0f; - self.backgroundColor = [UIColor whiteColor]; - self.image = [[UIImage imageNamed:@"input-bar-flat"] resizableImageWithCapInsets:UIEdgeInsetsMake(2.0f, 0.0f, 0.0f, 0.0f) - resizingMode:UIImageResizingModeTile]; + _inputTextView.layer.borderColor = borderColor.CGColor; + _inputTextView.layer.borderWidth = borderWidth; + _inputTextView.layer.cornerRadius = cornerRadius; + if (inputBackgroundColor) { + self.backgroundColor = inputBackgroundColor; + } else { + self.image = [[UIImage imageNamed:inputViewBackgroundImageName] resizableImageWithCapInsets:UIEdgeInsetsMake(2.0f, 0.0f, 0.0f, 0.0f) + resizingMode:UIImageResizingModeTile]; + } break; } default: break; } - // 如果是可以发送语言的,那就需要一个按钮录音的按钮,事件可以在外部添加 + // 如果是可以发送语音的,那就需要一个按钮录音的按钮,事件可以在外部添加 if (self.allowsSendVoice) { + NSString *voiceHolderImageName = [[XHConfigurationHelper appearance].messageInputViewStyle objectForKey:kXHMessageInputViewVoiceHolderImageNameKey]; + if (!voiceHolderImageName) { + voiceHolderImageName = @"VoiceBtn_Black"; + } + NSString *voiceHolderHLImageName = [[XHConfigurationHelper appearance].messageInputViewStyle objectForKey:kXHMessageInputViewVoiceHolderHLImageNameKey]; + if (!voiceHolderHLImageName) { + voiceHolderHLImageName = @"VoiceBtn_BlackHL"; + } + UIEdgeInsets edgeInsets = UIEdgeInsetsMake(9, 9, 9, 9); - button = [self createButtonWithImage:XH_STRETCH_IMAGE([UIImage imageNamed:@"VoiceBtn_Black"], edgeInsets) HLImage:XH_STRETCH_IMAGE([UIImage imageNamed:@"VoiceBtn_BlackHL"], edgeInsets)]; + button = [self createButtonWithImage:XH_STRETCH_IMAGE([UIImage imageNamed:voiceHolderImageName], edgeInsets) HLImage:XH_STRETCH_IMAGE([UIImage imageNamed:voiceHolderHLImageName], edgeInsets)]; [button setTitleColor:[UIColor darkGrayColor] forState:UIControlStateNormal]; - [button setTitle:kXHTouchToRecord forState:UIControlStateNormal]; - [button setTitle:kXHTouchToFinish forState:UIControlStateHighlighted]; - buttonFrame = _inputTextView.frame; + [button setTitle:NSLocalizedStringFromTable(@"HoldToTalk", @"MessageDisplayKitString", nil) forState:UIControlStateNormal]; + [button setTitle:NSLocalizedStringFromTable(@"ReleaseToSend", @"MessageDisplayKitString", nil) forState:UIControlStateHighlighted]; + buttonFrame = CGRectMake(textViewLeftMargin-5, 0, width+10, self.frame.size.height); button.frame = buttonFrame; button.alpha = self.voiceChangeButton.selected; [button addTarget:self action:@selector(holdDownButtonTouchDown) forControlEvents:UIControlEventTouchDown]; diff --git a/MessageDisplayKit/Classes/Views/MessageInputView/XHMessageTextView.h b/MessageDisplayKit/Classes/Views/MessageInputView/XHMessageTextView.h index 6898441..fe89835 100644 --- a/MessageDisplayKit/Classes/Views/MessageInputView/XHMessageTextView.h +++ b/MessageDisplayKit/Classes/Views/MessageInputView/XHMessageTextView.h @@ -2,8 +2,8 @@ // XHMessageTextView.h // MessageDisplayExample // -// Created by qtone-1 on 14-4-24. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Views/MessageInputView/XHMessageTextView.m b/MessageDisplayKit/Classes/Views/MessageInputView/XHMessageTextView.m index 14806de..c0cb626 100644 --- a/MessageDisplayKit/Classes/Views/MessageInputView/XHMessageTextView.m +++ b/MessageDisplayKit/Classes/Views/MessageInputView/XHMessageTextView.m @@ -2,8 +2,8 @@ // XHMessageTextView.m // MessageDisplayExample // -// Created by qtone-1 on 14-4-24. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-4-24. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHMessageTextView.h" diff --git a/MessageDisplayKit/Classes/Views/MessageInputView/XHVoiceRecordHUD.h b/MessageDisplayKit/Classes/Views/MessageInputView/XHVoiceRecordHUD.h index 9eeaa77..141ebd4 100644 --- a/MessageDisplayKit/Classes/Views/MessageInputView/XHVoiceRecordHUD.h +++ b/MessageDisplayKit/Classes/Views/MessageInputView/XHVoiceRecordHUD.h @@ -2,8 +2,8 @@ // XHVoiceRecordHUD.h // MessageDisplayExample // -// Created by qtone-1 on 14-5-13. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-13. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Views/MessageInputView/XHVoiceRecordHUD.m b/MessageDisplayKit/Classes/Views/MessageInputView/XHVoiceRecordHUD.m index 013cd9a..46e93c1 100644 --- a/MessageDisplayKit/Classes/Views/MessageInputView/XHVoiceRecordHUD.m +++ b/MessageDisplayKit/Classes/Views/MessageInputView/XHVoiceRecordHUD.m @@ -2,15 +2,12 @@ // XHVoiceRecordHUD.m // MessageDisplayExample // -// Created by qtone-1 on 14-5-13. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-13. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHVoiceRecordHUD.h" -#define kXHVoiceRecordPauseString @"手指上滑,取消发送" -#define kXHVoiceRecordResaueString @"松开手指,取消发送" - @interface XHVoiceRecordHUD () @property (nonatomic, weak) UILabel *remindLabel; @@ -58,13 +55,13 @@ - (void)startRecordingHUDAtView:(UIView *)view { - (void)pauseRecord { [self configRecoding:YES]; self.remindLabel.backgroundColor = [UIColor clearColor]; - self.remindLabel.text = kXHVoiceRecordPauseString; + self.remindLabel.text = NSLocalizedStringFromTable(@"SlideToCancel", @"MessageDisplayKitString", nil); } - (void)resaueRecord { [self configRecoding:NO]; self.remindLabel.backgroundColor = [UIColor colorWithRed:1.000 green:0.000 blue:0.000 alpha:0.630]; - self.remindLabel.text = kXHVoiceRecordResaueString; + self.remindLabel.text = NSLocalizedStringFromTable(@"ReleaseToCancel", @"MessageDisplayKitString", nil); } - (void)stopRecordCompled:(void(^)(BOOL fnished))compled { @@ -130,7 +127,7 @@ - (void)setup { remindLabel.layer.cornerRadius = 4; remindLabel.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleBottomMargin; remindLabel.backgroundColor = [UIColor clearColor]; - remindLabel.text = kXHVoiceRecordPauseString; + remindLabel.text = NSLocalizedStringFromTable(@"SlideToCancel", @"MessageDisplayKitString", nil); remindLabel.textAlignment = NSTextAlignmentCenter; [self addSubview:remindLabel]; _remindLabel = remindLabel; diff --git a/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionCollectionViewCell.h b/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionCollectionViewCell.h index 2857023..42c97c4 100644 --- a/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionCollectionViewCell.h +++ b/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionCollectionViewCell.h @@ -2,8 +2,8 @@ // XHEmotionCollectionViewCell.h // MessageDisplayExample // -// Created by qtone-1 on 14-5-3. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-3. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionCollectionViewCell.m b/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionCollectionViewCell.m index f6060bb..bd591e6 100644 --- a/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionCollectionViewCell.m +++ b/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionCollectionViewCell.m @@ -2,8 +2,8 @@ // XHEmotionCollectionViewCell.m // MessageDisplayExample // -// Created by qtone-1 on 14-5-3. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-3. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHEmotionCollectionViewCell.h" diff --git a/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionCollectionViewFlowLayout.h b/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionCollectionViewFlowLayout.h index b126fb8..688e0f0 100644 --- a/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionCollectionViewFlowLayout.h +++ b/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionCollectionViewFlowLayout.h @@ -2,8 +2,8 @@ // XHEmotionCollectionViewFlowLayout.h // MessageDisplayExample // -// Created by qtone-1 on 14-5-3. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-3. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionCollectionViewFlowLayout.m b/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionCollectionViewFlowLayout.m index cb942cc..a6992c8 100644 --- a/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionCollectionViewFlowLayout.m +++ b/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionCollectionViewFlowLayout.m @@ -2,11 +2,12 @@ // XHEmotionCollectionViewFlowLayout.m // MessageDisplayExample // -// Created by qtone-1 on 14-5-3. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-3. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHEmotionCollectionViewFlowLayout.h" +#import "XHMacro.h" @implementation XHEmotionCollectionViewFlowLayout @@ -15,8 +16,10 @@ - (id)init { if (self) { self.scrollDirection = UICollectionViewScrollDirectionHorizontal; self.itemSize = CGSizeMake(kXHEmotionImageViewSize, kXHEmotionImageViewSize); - self.minimumLineSpacing = kXHEmotionMinimumLineSpacing; - self.sectionInset = UIEdgeInsetsMake(kXHEmotionMinimumLineSpacing - 4, kXHEmotionMinimumLineSpacing, 0, kXHEmotionMinimumLineSpacing); + int count = MDK_SCREEN_WIDTH/(kXHEmotionImageViewSize+kXHEmotionMinimumLineSpacing); + CGFloat spacing = MDK_SCREEN_WIDTH/count - kXHEmotionImageViewSize; + self.minimumLineSpacing = spacing; + self.sectionInset = UIEdgeInsetsMake(10, spacing/2, 0, spacing/2); self.collectionView.alwaysBounceVertical = YES; } return self; diff --git a/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionManagerView.h b/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionManagerView.h index 80794f1..4d66095 100644 --- a/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionManagerView.h +++ b/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionManagerView.h @@ -2,8 +2,8 @@ // XHEmotionManagerView.h // MessageDisplayExample // -// Created by qtone-1 on 14-5-3. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-3. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionManagerView.m b/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionManagerView.m index d979fc8..57e6156 100644 --- a/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionManagerView.m +++ b/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionManagerView.m @@ -2,8 +2,8 @@ // XHEmotionManagerView.m // MessageDisplayExample // -// Created by qtone-1 on 14-5-3. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-3. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHEmotionManagerView.h" diff --git a/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionSectionBar.h b/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionSectionBar.h index acafe40..0967be0 100644 --- a/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionSectionBar.h +++ b/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionSectionBar.h @@ -2,8 +2,8 @@ // XHEmotionSectionBar.h // MessageDisplayExample // -// Created by qtone-1 on 14-5-3. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-3. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionSectionBar.m b/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionSectionBar.m index bc1ff95..76e8d90 100644 --- a/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionSectionBar.m +++ b/MessageDisplayKit/Classes/Views/MessageMenuViews/XHEmotionSectionBar.m @@ -2,8 +2,8 @@ // XHEmotionSectionBar.m // MessageDisplayExample // -// Created by qtone-1 on 14-5-3. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-3. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHEmotionSectionBar.h" diff --git a/MessageDisplayKit/Classes/Views/MessageMenuViews/XHShareMenuView.h b/MessageDisplayKit/Classes/Views/MessageMenuViews/XHShareMenuView.h index ae44c57..7cafdb9 100644 --- a/MessageDisplayKit/Classes/Views/MessageMenuViews/XHShareMenuView.h +++ b/MessageDisplayKit/Classes/Views/MessageMenuViews/XHShareMenuView.h @@ -2,8 +2,8 @@ // XHShareMenuView.h // MessageDisplayExample // -// Created by qtone-1 on 14-5-1. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-1. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import diff --git a/MessageDisplayKit/Classes/Views/MessageMenuViews/XHShareMenuView.m b/MessageDisplayKit/Classes/Views/MessageMenuViews/XHShareMenuView.m index 8a1b19b..4096ed0 100644 --- a/MessageDisplayKit/Classes/Views/MessageMenuViews/XHShareMenuView.m +++ b/MessageDisplayKit/Classes/Views/MessageMenuViews/XHShareMenuView.m @@ -2,8 +2,8 @@ // XHShareMenuView.m // MessageDisplayExample // -// Created by qtone-1 on 14-5-1. -// Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. +// Created by HUAJIE-1 on 14-5-1. +// Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. // #import "XHShareMenuView.h" @@ -126,6 +126,12 @@ - (void)reloadData { onPage:page]; XHShareMenuItemView *shareMenuItemView = [[XHShareMenuItemView alloc] initWithFrame:shareMenuItemViewFrame]; + if (shareMenuItem.titleColor) { + shareMenuItemView.shareMenuItemTitleLabel.textColor = shareMenuItem.titleColor; + } + if (shareMenuItem.titleFont) { + shareMenuItemView.shareMenuItemTitleLabel.font = shareMenuItem.titleFont; + } shareMenuItemView.shareMenuItemButton.tag = index; [shareMenuItemView.shareMenuItemButton addTarget:self action:@selector(shareMenuItemButtonClicked:) forControlEvents:UIControlEventTouchUpInside]; [shareMenuItemView.shareMenuItemButton setImage:shareMenuItem.normalIconImage forState:UIControlStateNormal]; @@ -209,10 +215,10 @@ - (id)initWithFrame:(CGRect)frame { } - (void)dealloc { - self.shareMenuItems = nil; - self.shareMenuScrollView.delegate = self; - self.shareMenuScrollView = nil; - self.shareMenuPageControl = nil; + _shareMenuItems = nil; + _shareMenuScrollView.delegate = nil; + _shareMenuScrollView = nil; + _shareMenuPageControl = nil; } - (void)willMoveToSuperview:(UIView *)newSuperview { diff --git a/MessageDisplayKit/Resources/AddGroupMemberBtn@2x.png b/MessageDisplayKit/Resources/AddGroupMemberBtn@2x.png deleted file mode 100644 index 9818118..0000000 Binary files a/MessageDisplayKit/Resources/AddGroupMemberBtn@2x.png and /dev/null differ diff --git a/MessageDisplayKit/Resources/AddGroupMemberBtnHL@2x.png b/MessageDisplayKit/Resources/AddGroupMemberBtnHL@2x.png deleted file mode 100644 index cd5adfb..0000000 Binary files a/MessageDisplayKit/Resources/AddGroupMemberBtnHL@2x.png and /dev/null differ diff --git a/MessageDisplayKit/Resources/ContactsPanelDotRect@2x.png b/MessageDisplayKit/Resources/ContactsPanelDotRect@2x.png deleted file mode 100644 index b47739b..0000000 Binary files a/MessageDisplayKit/Resources/ContactsPanelDotRect@2x.png and /dev/null differ diff --git a/MessageDisplayKit/Resources/ReceiverVoiceNodePlaying001@2x.png b/MessageDisplayKit/Resources/ReceiverVoiceNodePlaying001@2x.png index e630845..f38a0ce 100644 Binary files a/MessageDisplayKit/Resources/ReceiverVoiceNodePlaying001@2x.png and b/MessageDisplayKit/Resources/ReceiverVoiceNodePlaying001@2x.png differ diff --git a/MessageDisplayKit/Resources/ReceiverVoiceNodePlaying002@2x.png b/MessageDisplayKit/Resources/ReceiverVoiceNodePlaying002@2x.png index 6101281..3d0f812 100644 Binary files a/MessageDisplayKit/Resources/ReceiverVoiceNodePlaying002@2x.png and b/MessageDisplayKit/Resources/ReceiverVoiceNodePlaying002@2x.png differ diff --git a/MessageDisplayKit/Resources/ReceiverVoiceNodePlaying003@2x.png b/MessageDisplayKit/Resources/ReceiverVoiceNodePlaying003@2x.png index 77f462d..8e0605a 100644 Binary files a/MessageDisplayKit/Resources/ReceiverVoiceNodePlaying003@2x.png and b/MessageDisplayKit/Resources/ReceiverVoiceNodePlaying003@2x.png differ diff --git a/MessageDisplayKit/Resources/ReceiverVoiceNodePlaying@2x.png b/MessageDisplayKit/Resources/ReceiverVoiceNodePlaying@2x.png index 5316671..26e57e4 100644 Binary files a/MessageDisplayKit/Resources/ReceiverVoiceNodePlaying@2x.png and b/MessageDisplayKit/Resources/ReceiverVoiceNodePlaying@2x.png differ diff --git a/MessageDisplayKit/Resources/SenderVoiceNodePlaying001@2x.png b/MessageDisplayKit/Resources/SenderVoiceNodePlaying001@2x.png index d8217fc..29e333c 100644 Binary files a/MessageDisplayKit/Resources/SenderVoiceNodePlaying001@2x.png and b/MessageDisplayKit/Resources/SenderVoiceNodePlaying001@2x.png differ diff --git a/MessageDisplayKit/Resources/SenderVoiceNodePlaying002@2x.png b/MessageDisplayKit/Resources/SenderVoiceNodePlaying002@2x.png index 350d388..69db986 100644 Binary files a/MessageDisplayKit/Resources/SenderVoiceNodePlaying002@2x.png and b/MessageDisplayKit/Resources/SenderVoiceNodePlaying002@2x.png differ diff --git a/MessageDisplayKit/Resources/SenderVoiceNodePlaying003@2x.png b/MessageDisplayKit/Resources/SenderVoiceNodePlaying003@2x.png index abe498f..2448446 100644 Binary files a/MessageDisplayKit/Resources/SenderVoiceNodePlaying003@2x.png and b/MessageDisplayKit/Resources/SenderVoiceNodePlaying003@2x.png differ diff --git a/MessageDisplayKit/Resources/SenderVoiceNodePlaying@2x.png b/MessageDisplayKit/Resources/SenderVoiceNodePlaying@2x.png index 86ba9ab..946d112 100644 Binary files a/MessageDisplayKit/Resources/SenderVoiceNodePlaying@2x.png and b/MessageDisplayKit/Resources/SenderVoiceNodePlaying@2x.png differ diff --git a/MessageDisplayKit/Resources/en.lproj/MessageDisplayKitString.strings b/MessageDisplayKit/Resources/en.lproj/MessageDisplayKitString.strings index 4d6309f..fd14f54 100644 --- a/MessageDisplayKit/Resources/en.lproj/MessageDisplayKitString.strings +++ b/MessageDisplayKit/Resources/en.lproj/MessageDisplayKitString.strings @@ -3,7 +3,7 @@ MessageDisplayExample Created by qtone-1 on 14-4-26. - Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. + Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. */ "copy" = "copy"; "transpond" = "transpond"; @@ -32,3 +32,12 @@ "Setting" = "Setting"; "Profile" = "Profile"; "News" = "News"; +"Today" = "Today"; +"Yesterday" = "Yesterday"; + +"HoldToTalk" = "Hold to talk"; +"ReleaseToSend" = "Release to send"; +"SlideToCancel" = "Slide up to cancel"; +"ReleaseToCancel" = "Release to cancel"; +"SendAMessage" = "Send a message"; +"MessageLocation" = "Message Location"; \ No newline at end of file diff --git a/MessageDisplayKit/Resources/face@2x.png b/MessageDisplayKit/Resources/face@2x.png index cf26017..2c9b117 100644 Binary files a/MessageDisplayKit/Resources/face@2x.png and b/MessageDisplayKit/Resources/face@2x.png differ diff --git a/MessageDisplayKit/Resources/face_HL@2x.png b/MessageDisplayKit/Resources/face_HL@2x.png index a8ce2ff..ef498ba 100644 Binary files a/MessageDisplayKit/Resources/face_HL@2x.png and b/MessageDisplayKit/Resources/face_HL@2x.png differ diff --git a/MessageDisplayKit/Resources/input-bar-background.png b/MessageDisplayKit/Resources/input-bar-background.png deleted file mode 100755 index 3310754..0000000 Binary files a/MessageDisplayKit/Resources/input-bar-background.png and /dev/null differ diff --git a/MessageDisplayKit/Resources/input-bar-background@2x.png b/MessageDisplayKit/Resources/input-bar-background@2x.png deleted file mode 100755 index 5efda91..0000000 Binary files a/MessageDisplayKit/Resources/input-bar-background@2x.png and /dev/null differ diff --git a/MessageDisplayKit/Resources/input-field-cover.png b/MessageDisplayKit/Resources/input-field-cover.png deleted file mode 100755 index 1be3ef3..0000000 Binary files a/MessageDisplayKit/Resources/input-field-cover.png and /dev/null differ diff --git a/MessageDisplayKit/Resources/input-field-cover@2x.png b/MessageDisplayKit/Resources/input-field-cover@2x.png deleted file mode 100755 index d9e39ce..0000000 Binary files a/MessageDisplayKit/Resources/input-field-cover@2x.png and /dev/null differ diff --git a/MessageDisplayKit/Resources/keyboard@2x.png b/MessageDisplayKit/Resources/keyboard@2x.png new file mode 100644 index 0000000..9cee2bf Binary files /dev/null and b/MessageDisplayKit/Resources/keyboard@2x.png differ diff --git a/MessageDisplayKit/Resources/keyboard_HL@2x.png b/MessageDisplayKit/Resources/keyboard_HL@2x.png new file mode 100644 index 0000000..e59f05b Binary files /dev/null and b/MessageDisplayKit/Resources/keyboard_HL@2x.png differ diff --git a/MessageDisplayKit/Resources/keyborad@2x.png b/MessageDisplayKit/Resources/keyborad@2x.png deleted file mode 100644 index 7c998ad..0000000 Binary files a/MessageDisplayKit/Resources/keyborad@2x.png and /dev/null differ diff --git a/MessageDisplayKit/Resources/keyborad_HL@2x.png b/MessageDisplayKit/Resources/keyborad_HL@2x.png deleted file mode 100644 index 57b180e..0000000 Binary files a/MessageDisplayKit/Resources/keyborad_HL@2x.png and /dev/null differ diff --git a/MessageDisplayKit/Resources/msg_chat_voice_unread.png b/MessageDisplayKit/Resources/msg_chat_voice_unread.png new file mode 100644 index 0000000..7236601 Binary files /dev/null and b/MessageDisplayKit/Resources/msg_chat_voice_unread.png differ diff --git a/MessageDisplayKit/Resources/msg_chat_voice_unread@2x.png b/MessageDisplayKit/Resources/msg_chat_voice_unread@2x.png new file mode 100644 index 0000000..a6b2b50 Binary files /dev/null and b/MessageDisplayKit/Resources/msg_chat_voice_unread@2x.png differ diff --git a/MessageDisplayKit/Resources/multiMedia@2x.png b/MessageDisplayKit/Resources/multiMedia@2x.png index b6d2e78..eb991f9 100644 Binary files a/MessageDisplayKit/Resources/multiMedia@2x.png and b/MessageDisplayKit/Resources/multiMedia@2x.png differ diff --git a/MessageDisplayKit/Resources/multiMedia_HL@2x.png b/MessageDisplayKit/Resources/multiMedia_HL@2x.png index 35d7acd..2328b91 100644 Binary files a/MessageDisplayKit/Resources/multiMedia_HL@2x.png and b/MessageDisplayKit/Resources/multiMedia_HL@2x.png differ diff --git a/MessageDisplayKit/Resources/sharemore_friendcard@2x.png b/MessageDisplayKit/Resources/sharemore_friendcard@2x.png deleted file mode 100644 index 8546efa..0000000 Binary files a/MessageDisplayKit/Resources/sharemore_friendcard@2x.png and /dev/null differ diff --git a/MessageDisplayKit/Resources/sharemore_location@2x.png b/MessageDisplayKit/Resources/sharemore_location@2x.png deleted file mode 100644 index 65d5ddb..0000000 Binary files a/MessageDisplayKit/Resources/sharemore_location@2x.png and /dev/null differ diff --git a/MessageDisplayKit/Resources/sharemore_myfav@2x.png b/MessageDisplayKit/Resources/sharemore_myfav@2x.png deleted file mode 100644 index 8bb0af2..0000000 Binary files a/MessageDisplayKit/Resources/sharemore_myfav@2x.png and /dev/null differ diff --git a/MessageDisplayKit/Resources/sharemore_openapi@2x.png b/MessageDisplayKit/Resources/sharemore_openapi@2x.png deleted file mode 100644 index fde3e91..0000000 Binary files a/MessageDisplayKit/Resources/sharemore_openapi@2x.png and /dev/null differ diff --git a/MessageDisplayKit/Resources/sharemore_pic@2x.png b/MessageDisplayKit/Resources/sharemore_pic@2x.png deleted file mode 100644 index 6006f79..0000000 Binary files a/MessageDisplayKit/Resources/sharemore_pic@2x.png and /dev/null differ diff --git a/MessageDisplayKit/Resources/sharemore_video@2x.png b/MessageDisplayKit/Resources/sharemore_video@2x.png deleted file mode 100644 index b1f9729..0000000 Binary files a/MessageDisplayKit/Resources/sharemore_video@2x.png and /dev/null differ diff --git a/MessageDisplayKit/Resources/sharemore_videovoip@2x.png b/MessageDisplayKit/Resources/sharemore_videovoip@2x.png deleted file mode 100644 index 2cd05ef..0000000 Binary files a/MessageDisplayKit/Resources/sharemore_videovoip@2x.png and /dev/null differ diff --git a/MessageDisplayKit/Resources/sharemore_voiceinput@2x.png b/MessageDisplayKit/Resources/sharemore_voiceinput@2x.png deleted file mode 100644 index c8be94f..0000000 Binary files a/MessageDisplayKit/Resources/sharemore_voiceinput@2x.png and /dev/null differ diff --git a/MessageDisplayKit/Resources/sharemore_voipvoice@2x.png b/MessageDisplayKit/Resources/sharemore_voipvoice@2x.png deleted file mode 100644 index 6a5b81f..0000000 Binary files a/MessageDisplayKit/Resources/sharemore_voipvoice@2x.png and /dev/null differ diff --git a/MessageDisplayKit/Resources/sharemore_wxtalk@2x.png b/MessageDisplayKit/Resources/sharemore_wxtalk@2x.png deleted file mode 100644 index 3027c18..0000000 Binary files a/MessageDisplayKit/Resources/sharemore_wxtalk@2x.png and /dev/null differ diff --git a/MessageDisplayKit/Resources/voice@2x.png b/MessageDisplayKit/Resources/voice@2x.png index 14f188c..6ba82b9 100644 Binary files a/MessageDisplayKit/Resources/voice@2x.png and b/MessageDisplayKit/Resources/voice@2x.png differ diff --git a/MessageDisplayKit/Resources/voice_HL@2x.png b/MessageDisplayKit/Resources/voice_HL@2x.png index 4637774..04d0fb9 100644 Binary files a/MessageDisplayKit/Resources/voice_HL@2x.png and b/MessageDisplayKit/Resources/voice_HL@2x.png differ diff --git a/MessageDisplayKit/Resources/weChatBubble_Receiving_Cavern@2x.png b/MessageDisplayKit/Resources/weChatBubble_Receiving_Cavern@2x.png deleted file mode 100644 index d91bf6a..0000000 Binary files a/MessageDisplayKit/Resources/weChatBubble_Receiving_Cavern@2x.png and /dev/null differ diff --git a/MessageDisplayKit/Resources/weChatBubble_Receiving_Solid@2x.png b/MessageDisplayKit/Resources/weChatBubble_Receiving_Solid@2x.png index 953af6a..f5cdcde 100644 Binary files a/MessageDisplayKit/Resources/weChatBubble_Receiving_Solid@2x.png and b/MessageDisplayKit/Resources/weChatBubble_Receiving_Solid@2x.png differ diff --git a/MessageDisplayKit/Resources/weChatBubble_Sending_Cavern@2x.png b/MessageDisplayKit/Resources/weChatBubble_Sending_Cavern@2x.png deleted file mode 100644 index ccea852..0000000 Binary files a/MessageDisplayKit/Resources/weChatBubble_Sending_Cavern@2x.png and /dev/null differ diff --git a/MessageDisplayKit/Resources/weChatBubble_Sending_Solid@2x.png b/MessageDisplayKit/Resources/weChatBubble_Sending_Solid@2x.png index acb6fff..20be296 100644 Binary files a/MessageDisplayKit/Resources/weChatBubble_Sending_Solid@2x.png and b/MessageDisplayKit/Resources/weChatBubble_Sending_Solid@2x.png differ diff --git a/MessageDisplayKit/Resources/zh-Hans.lproj/MessageDisplayKitString.strings b/MessageDisplayKit/Resources/zh-Hans.lproj/MessageDisplayKitString.strings index fabb2c7..af4654f 100644 --- a/MessageDisplayKit/Resources/zh-Hans.lproj/MessageDisplayKitString.strings +++ b/MessageDisplayKit/Resources/zh-Hans.lproj/MessageDisplayKitString.strings @@ -3,7 +3,7 @@ MessageDisplayExample Created by qtone-1 on 14-4-26. - Copyright (c) 2014年 曾宪华 开发团队(http://iyilunba.com ) 本人QQ:543413507 本人QQ群(142557668). All rights reserved. + Copyright (c) 2014年 嗨,我是曾宪华(@xhzengAIB),曾加入YY Inc.担任高级移动开发工程师,拍立秀App联合创始人,热衷于简洁、而富有理性的事物 QQ:543413507 主页:http://zengxianhua.com All rights reserved. */ "copy" = "复制"; "transpond" = "转发"; @@ -35,3 +35,12 @@ "Setting" = "设置"; "Profile" = "我"; "News" = "新闻"; +"Today" = "今天"; +"Yesterday" = "昨天"; + +"HoldToTalk" = "按住说话"; +"ReleaseToSend" = "放开发送"; +"SlideToCancel" = "向上滑动取消"; +"ReleaseToCancel" = "松开取消"; +"SendAMessage" = "发送新消息"; +"MessageLocation" = "消息位置"; \ No newline at end of file diff --git a/README.md b/README.md index 776eb18..678c051 100644 --- a/README.md +++ b/README.md @@ -1,36 +1,33 @@ -![image](https://github.com/xhzengAIB/LearnEnglish/raw/master/Screenshots/MessageDisplayKit.gif) +![](https://github.com/xhzengAIB/LearnEnglish/raw/master/Screenshots/MessageDisplayKit.png) + +由于本人工作内容的变化,不打算长期维护,该项目仅限于提供学习参考; MessageDisplayKit ================= -一个类似微信App的IM应用,拥有发送文字、图片、语音、视频、地理位置消息,管理本地通信录、分享朋友圈、漂流交友、摇一摇乐趣和更多有趣的功能。 -An IM APP like WeChat App has to send text, pictures, audio, video, location messaging, managing local address book, share a circle of friends, drifting friends, shake a fun and more interesting features. - -代码都有注释,如果看完注释还是不懂的话,那你只能在githu开issue,[点击这里](https://github.com/xhzengAIB/MessageDisplayKit/issues?state=open)移步新建一个issue,写上你不明白的地方,我会在github给予帮助。 - -It's ok if you don't understand how the code works. Most code has comments, which I believe will help you a lot. Feel free to [open an issue] (https://github.com/xhzengAIB/MessageDisplayKit/issues?state=open) if you have any questions. I will do my best to answer them. - -## 开源许可协议 -很多人和我说,你不知道什么是开源许可协议,其实我也不清楚他是不知道还是不想知道,作为一个开发者,不懂得尊重别人的成果,那你到底想怎样,你自己最清楚。 -说一件事吧!曾经我也这么做了,没尊重作者的成果,最终被人鄙视了一段时间,于是我删除了那个开源库,现在终于明白,尊重这个词,这对于别人来说是一个认可,我们不可以剥夺这份利益。 -网易新闻App的开发者很厚道,他们有做到这一份尊重,他们是这么做的: -```objc -UIWebView *librariesWebView = [[UIWebView alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; - NSURLRequest *urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://m.163.com/special/newsclient/ios_libraries.html"]]; // 这里的URL是网易新闻所用的,大家可以点击打开,如果你没有服务器,那你敢直接写个开源库的主页URL嘛? -[librariesWebView loadRequest:urlRequest]; -[self.view addSubview:librariesWebView]; -``` -我把代码都给上了,哪怕你复制都不愿意,那我就无语了。 -如果您还不知道开源许可协议是怎样的,那你点击[这里](http://m.163.com/special/newsclient/ios_libraries.html)看看网易大神们的节操。 +一个类似微信App的IM应用,拥有发送文字、图片、语音、视频、地理位置消息,管理本地通信录、分享朋友圈、漂流交友、摇一摇和更多有趣的功能。 +An IM APP like WeChat which has sending text, pictures, audio, video, location messaging, managing local address book, share moments with friends, drift bottle, shake for new friends and some other interesting features. +![image](https://github.com/xhzengAIB/LearnEnglish/raw/master/Screenshots/MessageDisplayKit.gif) + +## 宝贵意见 +如果有任何问题,请到github开issue,[点击这里](https://github.com/xhzengAIB/MessageDisplayKit/issues?state=open)移步新建一个issue,写上你不明白的地方,我会在github给予帮助。 + +很多朋友反应,只看到静态库,看不到源码,一个工作区域内,有多个使用例子,也包含了源码,源码请[戳这里](https://github.com/xhzengAIB/MessageDisplayKit/tree/master/MessageDisplayKit), 让大家都可以快速查看到。 + +Most of code has comments with which I believe you can understand them. If you can't understand the code please feel free to [open an issue] (https://github.com/xhzengAIB/MessageDisplayKit/issues?state=open) I will do my best to answer them. + +## 非常有趣,在LeanClound的开发者支持下,将开始全面的改进,将没有实现业务的功能进行对接LC的后台,敬请期待哦! ## 组件要求 Requirements +* iPhone4/5/6/6+/iPad,Portrait +* Xcode6 or later * iOS 6.0+ * ARC -* System Frameworks : 'Foundation', 'CoreGraphics', 'UIKit', 'MobileCoreServices', 'AVFoundation', 'CoreLocation', 'MediaPlayer', 'CoreMedia', 'CoreText', 'AudioTollbox'. +* System Frameworks : 'Foundation', 'CoreGraphics', 'UIKit', 'MobileCoreServices', 'AVFoundation', 'CoreLocation', 'MediaPlayer', 'CoreMedia', 'CoreText', 'AudioToolbox'. ## Podfile -[CocosPods](http://cocosPods.org) is the recommended method to install MessageDisplayKit, just add the following line to `Podfile` +[CocoaPods](http://cocoapods.org/) is the recommended method to install MessageDisplayKit, just add the following line to `Podfile` ``` pod 'MessageDisplayKit' @@ -128,12 +125,15 @@ Easy to drop into your project. English: MessageDisplayKit is available under the MIT license, see the LICENSE file for more information. ## 须知 Notes -如果您在您的项目中使用该开源组件,请给我们发[电子邮件](mailto:xhzengAIB@gmail.com?subject=From%20GitHub%20MessageDisplayKit)告诉我们您的应用程序的名称,谢谢!主要是为了互推的效果,如果您的app火了,请给予少许的回报,如果您的App不火,或许能通过这个开源库了解到您的App! +如果您在您的项目中使用该开源组件,请给我们发[电子邮件](mailto:xhzengAIB@gmail.com?subject=From%20GitHub%20MessageDisplayKit)告诉我们您的应用程序的名称,谢谢!主要是为了互推的效果,如果您的app火了,请给予少许的回报,如果您的App不火,或许能通过这个开源库了解到您的App! +主要目的只有一个,互推,使用该开源库的开发者,我都会向其保证,永远免费,不涉及任何商业纠纷的事情,请放心使用。 If you use this open source components in your project, please [Email us](mailto:xhzengAIB@gmail.com?subject=From%20GitHub%20MessageDisplayKit) to notify us the name of your application(s). Thanks! ## What app use this open source -这里会列出所有使用该开源库的App列表。 +这里会列出所有使用该开源库的App列表。 +[leanchat-ios](https://github.com/leancloud/leanchat-ios),LeanCloud 提供一站式后端云服务,从数据存储、实时聊天、消息推送到移动统计,涵盖应用开发的多方面后端需求。 +[家信-导购员](https://itunes.apple.com/cn/app/jia-xin-dao-gou-yuan/id918014453?mt=8)家信,专属家居导购员的商务沟通APP。家信app,将家居消费者与离他最近的导购员及时对接。消费者微信在线随时随地与导购员接触沟通;导购员家信在线时时处处为消费者提供各种资讯、商品、咨询、导购服务,辅助消费者决策,促进消费购买,提升服务体验。 ## 使用到的第三方组件 * [PathCover](https://github.com/JackTeam/PathCover)用于朋友圈的下拉刷新。 @@ -151,8 +151,7 @@ If you use this open source components in your project, please [Email us](mailto 谢谢[微信App](https://itunes.apple.com/cn/app/wei-xin/id414478124?mt=8)给予我鼓励,我参考了很多框架设计问题、也提供了许多素材,但是请网友不要直接使用素材,我不知道是否会引起侵权的问题,所以请自重,我这里只是模仿微信,而不是攻击。使用该开源库所导致的所有侵权关系与我无关,我只是提供学习机会。 ## 警告 -请不要拿该工程的所有资源文件用于商业使用,如果不遵守规则,而产生的法律责任,一律与我无关。代码按照上文描述的License 和 Notes来使用。 -该工程里面任何一个效果组件都不能擅自使用,如需使用,请告之于我。 +请不要拿该工程的微信图片资源文件用于商业使用,如果不遵守规则,而产生的法律责任,一律与我无关。代码按照上文描述的License和Notes来使用。 ## Credits Thanks to [jessesquires](https://github.com/jessesquires) who created [JSMessagesViewController](https://github.com/jessesquires/MessagesTableViewController) on which my chat list UI work is based.