├── DevPods └── InjectedContentKit │ ├── InjectedContentKit │ ├── Assets │ │ └── .gitkeep │ └── Classes │ │ ├── .gitkeep │ │ ├── InjectedContentKit.m │ │ ├── Utils │ │ ├── NSObject+ICK_NSJSON.h │ │ ├── ICK_UtilMacro.h │ │ ├── ICK_GlobalURL.h │ │ ├── ICK_NetworkInterfaceManager.m │ │ ├── NSObject+ICK_NSJSON.m │ │ ├── ICK_GlobalURL.m │ │ ├── ICK_MMSessionTask.h │ │ ├── ICK_MMSessionTask.m │ │ └── ICK_NetworkInterfaceManager.h │ │ ├── InjectedContentKit.h │ │ └── Composer │ │ ├── GameDetailDataComposer.h │ │ ├── PubSearchDataComposer.h │ │ ├── GameDetailDataComposer.m │ │ ├── WriterDataComposer.h │ │ ├── PubSearchDataComposer.m │ │ └── WriterDataComposer.m │ ├── _Pods.xcodeproj │ ├── Example │ ├── injectContentShell │ │ ├── test │ │ │ ├── testgunsedinstall │ │ │ ├── testgunsedinstall.sh │ │ │ ├── InjectedContentKit_Example │ │ │ ├── testInsertCodeToFun.sh │ │ │ └── InsertCodeToFunSourceFile.m │ │ ├── BlackListFunctionConfig.cfg │ │ ├── RenameFunctions.cfg │ │ ├── RenameFunction.sh │ │ ├── TmpCustomBlackListPropertiesConfig.cfg │ │ ├── TmpCustomPropertiesBlackListConfig.cfg │ │ ├── CustomPropertiesBlackListConfig.cfg │ │ ├── DefaultFunctionsBlackListConfig.cfg │ │ ├── RenameClasses.cfg │ │ ├── RenameProperties.cfg │ │ ├── DefaultClassesBlackListConfig.cfg │ │ ├── injectedContentConfig.cfg │ │ ├── DefaultPropertiesBlackListConfig.cfg │ │ ├── ReadMe.md │ │ ├── RenameDir.sh │ │ ├── DeleteClasses.sh │ │ ├── FileUtil.sh │ │ ├── EnvCheckUtil.sh │ │ ├── GetAndStoreClasses.sh │ │ ├── RenameProperty.sh │ │ ├── injectedContentShell.sh │ │ ├── RenameClasses.sh │ │ └── GetAndStoreProperties.sh │ ├── Tests │ │ ├── en.lproj │ │ │ └── InfoPlist.strings │ │ ├── Tests-Prefix.pch │ │ ├── Tests-Info.plist │ │ └── Tests.m │ ├── InjectedContentKit │ │ ├── en.lproj │ │ │ └── InfoPlist.strings │ │ ├── Business │ │ │ ├── SSCatchInviteScheduler.h │ │ │ ├── ICKXibTestViewController.h │ │ │ ├── SSCatchShareOrganizer.h │ │ │ ├── Pay │ │ │ │ ├── SSCatchPayMethodScheduler.h │ │ │ │ └── SSCatchPayMethodScheduler.m │ │ │ ├── SSCatchShareOrganizer.m │ │ │ ├── ICKXibTestViewController.m │ │ │ ├── ICKXibTestViewController.xib │ │ │ └── SSCatchInviteScheduler.m │ │ ├── SimpleSection-elf.o │ │ ├── SimpleSection-macho.o │ │ ├── ICKViewController.h │ │ ├── ICKAppDelegate.h │ │ ├── main.m │ │ ├── InjectedContentKit-Prefix.pch │ │ ├── InjectedContentKit-Info.plist │ │ ├── Base.lproj │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ ├── Images.xcassets │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ ├── ICKAppDelegate.m │ │ ├── ICKViewController.m │ │ └── CodeResources.plist │ ├── Pods │ │ ├── Headers │ │ │ ├── Private │ │ │ │ └── InjectedContentKit │ │ │ │ │ ├── ICK_GlobalURL.h │ │ │ │ │ ├── ICK_UtilMacro.h │ │ │ │ │ ├── InjectedContentKit.h │ │ │ │ │ ├── ICK_MMSessionTask.h │ │ │ │ │ ├── NSObject+ICK_NSJSON.h │ │ │ │ │ ├── WriterDataComposer.h │ │ │ │ │ ├── PubSearchDataComposer.h │ │ │ │ │ ├── GameDetailDataComposer.h │ │ │ │ │ └── ICK_NetworkInterfaceManager.h │ │ │ └── Public │ │ │ │ └── InjectedContentKit │ │ │ │ ├── ICK_GlobalURL.h │ │ │ │ ├── ICK_UtilMacro.h │ │ │ │ ├── InjectedContentKit.h │ │ │ │ ├── ICK_MMSessionTask.h │ │ │ │ ├── NSObject+ICK_NSJSON.h │ │ │ │ ├── WriterDataComposer.h │ │ │ │ ├── GameDetailDataComposer.h │ │ │ │ ├── PubSearchDataComposer.h │ │ │ │ └── ICK_NetworkInterfaceManager.h │ │ ├── Target Support Files │ │ │ ├── InjectedContentKit │ │ │ │ ├── InjectedContentKit-dummy.m │ │ │ │ ├── InjectedContentKit-prefix.pch │ │ │ │ └── InjectedContentKit.xcconfig │ │ │ ├── Pods-InjectedContentKit_Tests │ │ │ │ ├── Pods-InjectedContentKit_Tests-acknowledgements.markdown │ │ │ │ ├── Pods-InjectedContentKit_Tests-dummy.m │ │ │ │ ├── Pods-InjectedContentKit_Tests.debug.xcconfig │ │ │ │ ├── Pods-InjectedContentKit_Tests.release.xcconfig │ │ │ │ ├── Pods-InjectedContentKit_Tests-acknowledgements.plist │ │ │ │ ├── Pods-InjectedContentKit_Tests-frameworks.sh │ │ │ │ └── Pods-InjectedContentKit_Tests-resources.sh │ │ │ └── Pods-InjectedContentKit_Example │ │ │ │ ├── Pods-InjectedContentKit_Example-dummy.m │ │ │ │ ├── Pods-InjectedContentKit_Example.debug.xcconfig │ │ │ │ ├── Pods-InjectedContentKit_Example.release.xcconfig │ │ │ │ ├── Pods-InjectedContentKit_Example-acknowledgements.markdown │ │ │ │ ├── Pods-InjectedContentKit_Example-acknowledgements.plist │ │ │ │ ├── Pods-InjectedContentKit_Example-frameworks.sh │ │ │ │ └── Pods-InjectedContentKit_Example-resources.sh │ │ ├── Manifest.lock │ │ └── Local Podspecs │ │ │ └── InjectedContentKit.podspec.json │ ├── Podfile │ ├── InjectedContentKit.xcodeproj │ │ ├── project.xcworkspace │ │ │ └── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ └── InjectedContentKit-Example.xcscheme │ ├── InjectedContentKit.xcworkspace │ │ ├── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ │ └── contents.xcworkspacedata │ └── Podfile.lock │ ├── ZytInjectContentExampleProj │ ├── Pods │ │ ├── Headers │ │ │ ├── Private │ │ │ │ └── InjectedContentKit │ │ │ │ │ ├── ICK_GlobalURL.h │ │ │ │ │ ├── ICK_UtilMacro.h │ │ │ │ │ ├── InjectedContentKit.h │ │ │ │ │ ├── ICK_MMSessionTask.h │ │ │ │ │ ├── NSObject+ICK_NSJSON.h │ │ │ │ │ ├── WriterDataComposer.h │ │ │ │ │ ├── PubSearchDataComposer.h │ │ │ │ │ ├── GameDetailDataComposer.h │ │ │ │ │ └── ICK_NetworkInterfaceManager.h │ │ │ └── Public │ │ │ │ └── InjectedContentKit │ │ │ │ ├── ICK_GlobalURL.h │ │ │ │ ├── ICK_UtilMacro.h │ │ │ │ ├── InjectedContentKit.h │ │ │ │ ├── ICK_MMSessionTask.h │ │ │ │ ├── NSObject+ICK_NSJSON.h │ │ │ │ ├── WriterDataComposer.h │ │ │ │ ├── GameDetailDataComposer.h │ │ │ │ ├── PubSearchDataComposer.h │ │ │ │ └── ICK_NetworkInterfaceManager.h │ │ ├── Target Support Files │ │ │ ├── InjectedContentKit │ │ │ │ ├── InjectedContentKit-dummy.m │ │ │ │ ├── InjectedContentKit-prefix.pch │ │ │ │ └── InjectedContentKit.xcconfig │ │ │ └── Pods-ZytInjectContentExampleProj │ │ │ │ ├── Pods-ZytInjectContentExampleProj-dummy.m │ │ │ │ ├── Pods-ZytInjectContentExampleProj.debug.xcconfig │ │ │ │ ├── Pods-ZytInjectContentExampleProj.release.xcconfig │ │ │ │ ├── Pods-ZytInjectContentExampleProj-acknowledgements.markdown │ │ │ │ ├── Pods-ZytInjectContentExampleProj-acknowledgements.plist │ │ │ │ ├── Pods-ZytInjectContentExampleProj-frameworks.sh │ │ │ │ └── Pods-ZytInjectContentExampleProj-resources.sh │ │ ├── Manifest.lock │ │ └── Local Podspecs │ │ │ └── InjectedContentKit.podspec.json │ ├── Podfile │ ├── ZytInjectContentExampleProj │ │ ├── Assets.xcassets │ │ │ ├── Contents.json │ │ │ └── AppIcon.appiconset │ │ │ │ └── Contents.json │ │ ├── ViewController.h │ │ ├── AppDelegate.h │ │ ├── main.m │ │ ├── ViewController.m │ │ ├── Info.plist │ │ ├── Base.lproj │ │ │ ├── Main.storyboard │ │ │ └── LaunchScreen.storyboard │ │ └── AppDelegate.m │ ├── ZytInjectContentExampleProj.xcodeproj │ │ ├── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ │ └── IDEWorkspaceChecks.plist │ │ └── project.pbxproj │ ├── ZytInjectContentExampleProj.xcworkspace │ │ ├── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ │ └── contents.xcworkspacedata │ ├── Podfile.lock │ └── Shell │ │ ├── TestOriginalContent │ │ ├── TestOriginalContent.bak │ │ └── RenameProject.sh │ ├── .travis.yml │ ├── .gitignore │ ├── LICENSE │ ├── README.md │ └── InjectedContentKit.podspec ├── README.md └── .gitignore /DevPods/InjectedContentKit/InjectedContentKit/Assets/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/InjectedContentKit/Classes/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/_Pods.xcodeproj: -------------------------------------------------------------------------------- 1 | Example/Pods/Pods.xcodeproj -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/test/testgunsedinstall: -------------------------------------------------------------------------------- 1 | #!/bin/bash -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/BlackListFunctionConfig.cfg: -------------------------------------------------------------------------------- 1 | # 黑名单方法配置 -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/RenameFunctions.cfg: -------------------------------------------------------------------------------- 1 | # RenameFunctions.cfg -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/RenameFunction.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 方法重命名脚本 3 | 4 | 5 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/TmpCustomBlackListPropertiesConfig.cfg: -------------------------------------------------------------------------------- 1 | # Properties Configs 2 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/TmpCustomPropertiesBlackListConfig.cfg: -------------------------------------------------------------------------------- 1 | # Classes Configs 2 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Tests/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/CustomPropertiesBlackListConfig.cfg: -------------------------------------------------------------------------------- 1 | # 由脚本RenameProperty.sh自动生成 2 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/DefaultFunctionsBlackListConfig.cfg: -------------------------------------------------------------------------------- 1 | # DefaultFunctionsBlackListConfig.cfg 2 | 3 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Headers/Private/InjectedContentKit/ICK_GlobalURL.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Utils/ICK_GlobalURL.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Headers/Private/InjectedContentKit/ICK_UtilMacro.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Utils/ICK_UtilMacro.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Headers/Public/InjectedContentKit/ICK_GlobalURL.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Utils/ICK_GlobalURL.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Headers/Public/InjectedContentKit/ICK_UtilMacro.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Utils/ICK_UtilMacro.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Headers/Private/InjectedContentKit/InjectedContentKit.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/InjectedContentKit.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Headers/Public/InjectedContentKit/InjectedContentKit.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/InjectedContentKit.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Headers/Private/InjectedContentKit/ICK_MMSessionTask.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Utils/ICK_MMSessionTask.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Headers/Public/InjectedContentKit/ICK_MMSessionTask.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Utils/ICK_MMSessionTask.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Headers/Private/InjectedContentKit/NSObject+ICK_NSJSON.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Utils/NSObject+ICK_NSJSON.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Headers/Private/InjectedContentKit/WriterDataComposer.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Composer/WriterDataComposer.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Headers/Public/InjectedContentKit/NSObject+ICK_NSJSON.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Utils/NSObject+ICK_NSJSON.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Headers/Public/InjectedContentKit/WriterDataComposer.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Composer/WriterDataComposer.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Headers/Private/InjectedContentKit/PubSearchDataComposer.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Composer/PubSearchDataComposer.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Headers/Public/InjectedContentKit/GameDetailDataComposer.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Composer/GameDetailDataComposer.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Headers/Public/InjectedContentKit/PubSearchDataComposer.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Composer/PubSearchDataComposer.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Headers/Private/InjectedContentKit/ICK_GlobalURL.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Utils/ICK_GlobalURL.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Headers/Private/InjectedContentKit/ICK_UtilMacro.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Utils/ICK_UtilMacro.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Headers/Public/InjectedContentKit/ICK_GlobalURL.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Utils/ICK_GlobalURL.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Headers/Public/InjectedContentKit/ICK_UtilMacro.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Utils/ICK_UtilMacro.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Headers/Private/InjectedContentKit/GameDetailDataComposer.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Composer/GameDetailDataComposer.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Headers/Private/InjectedContentKit/InjectedContentKit.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/InjectedContentKit.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Headers/Public/InjectedContentKit/InjectedContentKit.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/InjectedContentKit.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Headers/Private/InjectedContentKit/ICK_NetworkInterfaceManager.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Utils/ICK_NetworkInterfaceManager.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Headers/Public/InjectedContentKit/ICK_NetworkInterfaceManager.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Utils/ICK_NetworkInterfaceManager.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Headers/Private/InjectedContentKit/ICK_MMSessionTask.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Utils/ICK_MMSessionTask.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Headers/Public/InjectedContentKit/ICK_MMSessionTask.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Utils/ICK_MMSessionTask.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Headers/Private/InjectedContentKit/NSObject+ICK_NSJSON.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Utils/NSObject+ICK_NSJSON.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Headers/Private/InjectedContentKit/WriterDataComposer.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Composer/WriterDataComposer.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Headers/Public/InjectedContentKit/NSObject+ICK_NSJSON.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Utils/NSObject+ICK_NSJSON.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Headers/Public/InjectedContentKit/WriterDataComposer.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Composer/WriterDataComposer.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/RenameClasses.cfg: -------------------------------------------------------------------------------- 1 | # Properties Configs Filtered 2 | ICKXibTestViewController 3 | SSCatchInviteScheduler 4 | SSCatchPayMethodScheduler 5 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Podfile: -------------------------------------------------------------------------------- 1 | #use_frameworks! 2 | 3 | target 'ZytInjectContentExampleProj' do 4 | pod 'InjectedContentKit', :path => '../' 5 | 6 | end 7 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Headers/Private/InjectedContentKit/PubSearchDataComposer.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Composer/PubSearchDataComposer.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Headers/Public/InjectedContentKit/GameDetailDataComposer.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Composer/GameDetailDataComposer.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Headers/Public/InjectedContentKit/PubSearchDataComposer.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Composer/PubSearchDataComposer.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit/Business/SSCatchInviteScheduler.h: -------------------------------------------------------------------------------- 1 | 2 | 3 | #import 4 | 5 | @interface SSCatchInviteScheduler : UIViewController 6 | @end 7 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Headers/Private/InjectedContentKit/GameDetailDataComposer.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Composer/GameDetailDataComposer.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/ZytInjectContentExampleProj/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Headers/Private/InjectedContentKit/ICK_NetworkInterfaceManager.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Utils/ICK_NetworkInterfaceManager.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Headers/Public/InjectedContentKit/ICK_NetworkInterfaceManager.h: -------------------------------------------------------------------------------- 1 | ../../../../../InjectedContentKit/Classes/Utils/ICK_NetworkInterfaceManager.h -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/RenameProperties.cfg: -------------------------------------------------------------------------------- 1 | # Classes Configs Filtered 2 | confirmButton 3 | inputCardBack 4 | inputTextBack 5 | invitationCode 6 | organizer 7 | ruleCardBack 8 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit/SimpleSection-elf.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iOSobfuscation/KNInjectedContentKit/HEAD/DevPods/InjectedContentKit/Example/InjectedContentKit/SimpleSection-elf.o -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Tests/Tests-Prefix.pch: -------------------------------------------------------------------------------- 1 | // The contents of this file are implicitly included at the beginning of every test case source file. 2 | 3 | #ifdef __OBJC__ 4 | 5 | 6 | 7 | #endif 8 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit/SimpleSection-macho.o: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iOSobfuscation/KNInjectedContentKit/HEAD/DevPods/InjectedContentKit/Example/InjectedContentKit/SimpleSection-macho.o -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/DefaultClassesBlackListConfig.cfg: -------------------------------------------------------------------------------- 1 | # DefaultClassesBlackListConfig.cfg 2 | SSCatchRequest 3 | SSCatchCouponSampler 4 | SSCatchRoomRecordTiler 5 | SSCatchColorFormatter -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/test/testgunsedinstall.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 导入工具脚本 4 | . ../FileUtil.sh 5 | . ../EnvCheckUtil.sh 6 | 7 | # 检测gun sed 是否安装 8 | gunSedInstallCheck 9 | 10 | echo "继续执行" -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/test/InjectedContentKit_Example: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iOSobfuscation/KNInjectedContentKit/HEAD/DevPods/InjectedContentKit/Example/injectContentShell/test/InjectedContentKit_Example -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Target Support Files/InjectedContentKit/InjectedContentKit-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_InjectedContentKit : NSObject 3 | @end 4 | @implementation PodsDummy_InjectedContentKit 5 | @end 6 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Podfile: -------------------------------------------------------------------------------- 1 | #use_frameworks! 2 | 3 | target 'InjectedContentKit_Example' do 4 | pod 'InjectedContentKit', :path => '../' 5 | 6 | target 'InjectedContentKit_Tests' do 7 | inherit! :search_paths 8 | 9 | 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Target Support Files/InjectedContentKit/InjectedContentKit-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_InjectedContentKit : NSObject 3 | @end 4 | @implementation PodsDummy_InjectedContentKit 5 | @end 6 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Target Support Files/Pods-InjectedContentKit_Tests/Pods-InjectedContentKit_Tests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/InjectedContentKit/Classes/InjectedContentKit.m: -------------------------------------------------------------------------------- 1 | // 2 | // InjectedContentKit.m 3 | // InjectedContentKit 4 | // 5 | // Created by aron on 2018/2/9. 6 | // 7 | 8 | #import "InjectedContentKit.h" 9 | 10 | @implementation InjectedContentKit 11 | 12 | @end 13 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Target Support Files/Pods-InjectedContentKit_Tests/Pods-InjectedContentKit_Tests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_InjectedContentKit_Tests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_InjectedContentKit_Tests 5 | @end 6 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Target Support Files/Pods-InjectedContentKit_Example/Pods-InjectedContentKit_Example-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_InjectedContentKit_Example : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_InjectedContentKit_Example 5 | @end 6 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/injectedContentConfig.cfg: -------------------------------------------------------------------------------- 1 | [[GameDetailDataComposer new] loadDataWithBlock:nil]; 2 | 3 | [[PubSearchDataComposer new] loadSuggestionWithCompletionBlock:nil]; 4 | 5 | [[WriterDataComposer new] loadWithType:MMLoadTypeMore completionBlock:nil]; -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/ZytInjectContentExampleProj.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Target Support Files/Pods-ZytInjectContentExampleProj/Pods-ZytInjectContentExampleProj-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_ZytInjectContentExampleProj : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_ZytInjectContentExampleProj 5 | @end 6 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit/ICKViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ICKViewController.h 3 | // InjectedContentKit 4 | // 5 | // Created by flypigrmvb on 02/09/2018. 6 | // Copyright (c) 2018 flypigrmvb. All rights reserved. 7 | // 8 | 9 | @import UIKit; 10 | 11 | @interface ICKViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # YTTInjectedContentKit 2 | 3 | iOS壳版本场景下的批量修改类名、属性名、插入混淆代码、修改项目名称的shell脚本 4 | 5 | 具体的实现和使用方法请参考我的博客文章: 6 | [iOS使用shell脚本注入混淆内容](https://my.oschina.net/FEEDFACF/blog/1621956) 7 | [iOS使用Shell脚本批量修改类名称](https://my.oschina.net/FEEDFACF/blog/1627398) 8 | [iOS使用shell脚本批量修改属性](https://my.oschina.net/FEEDFACF/blog/1626928) # KNInjectedContentKit 9 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/DefaultPropertiesBlackListConfig.cfg: -------------------------------------------------------------------------------- 1 | # BlackListPropertiesConfig.cfg 2 | # 属性黑名单配置,在此配置文件中的属性不需要替换名称 3 | window 4 | name 5 | title 6 | titleLabel 7 | layout 8 | appealSamplers 9 | # TextField setValue:colorWithARGB(b3ccc0c4) forKeyPath:@"_placeholderLabelabc.textColor"];会有问题 10 | placeholderLabel 11 | recordPress 12 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/InjectedContentKit/Classes/Utils/NSObject+ICK_NSJSON.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+NSJSON.h 3 | // MobileExperience 4 | // 5 | // Created by Fyl on 16/1/18. 6 | // Copyright (c) 2016 xzrs. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSObject (ICK_NSJSON) 12 | 13 | - (NSString *)nsjsonString; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit/Business/ICKXibTestViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ICKXibTestViewController.h 3 | // InjectedContentKit_Example 4 | // 5 | // Created by aron on 2018/4/8. 6 | // Copyright © 2018年 flypigrmvb. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ICKXibTestViewController : UIViewController 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/ZytInjectContentExampleProj.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/ZytInjectContentExampleProj/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.h 3 | // ZytInjectContentExampleProj 4 | // 5 | // Created by aron on 2018/4/20. 6 | // Copyright © 2018年 aron. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ViewController : UIViewController 12 | 13 | 14 | @end 15 | 16 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/ZytInjectContentExampleProj.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/InjectedContentKit/Classes/InjectedContentKit.h: -------------------------------------------------------------------------------- 1 | // 2 | // InjectedContentKit.h 3 | // InjectedContentKit 4 | // 5 | // Created by aron on 2018/2/9. 6 | // 7 | 8 | #import 9 | #import "GameDetailDataComposer.h" 10 | #import "PubSearchDataComposer.h" 11 | #import "WriterDataComposer.h" 12 | 13 | @interface InjectedContentKit : NSObject 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/ZytInjectContentExampleProj.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit/ICKAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // ICKAppDelegate.h 3 | // InjectedContentKit 4 | // 5 | // Created by flypigrmvb on 02/09/2018. 6 | // Copyright (c) 2018 flypigrmvb. All rights reserved. 7 | // 8 | 9 | @import UIKit; 10 | 11 | @interface ICKAppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - InjectedContentKit (0.1.0) 3 | 4 | DEPENDENCIES: 5 | - InjectedContentKit (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | InjectedContentKit: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | InjectedContentKit: d621594612f45f306acfc194ba3e0f0bb9764bc2 13 | 14 | PODFILE CHECKSUM: f8a3eb9ff012abaedff15095892b82fd1ab639a4 15 | 16 | COCOAPODS: 1.2.1 17 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - InjectedContentKit (0.1.0) 3 | 4 | DEPENDENCIES: 5 | - InjectedContentKit (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | InjectedContentKit: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | InjectedContentKit: d621594612f45f306acfc194ba3e0f0bb9764bc2 13 | 14 | PODFILE CHECKSUM: f8a3eb9ff012abaedff15095892b82fd1ab639a4 15 | 16 | COCOAPODS: 1.2.1 17 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - InjectedContentKit (0.1.0) 3 | 4 | DEPENDENCIES: 5 | - InjectedContentKit (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | InjectedContentKit: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | InjectedContentKit: d621594612f45f306acfc194ba3e0f0bb9764bc2 13 | 14 | PODFILE CHECKSUM: 7a475059e519ac0ac3a05b71ac0f0df022af6f1d 15 | 16 | COCOAPODS: 1.2.1 17 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - InjectedContentKit (0.1.0) 3 | 4 | DEPENDENCIES: 5 | - InjectedContentKit (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | InjectedContentKit: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | InjectedContentKit: d621594612f45f306acfc194ba3e0f0bb9764bc2 13 | 14 | PODFILE CHECKSUM: 7a475059e519ac0ac3a05b71ac0f0df022af6f1d 15 | 16 | COCOAPODS: 1.2.1 17 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/ZytInjectContentExampleProj/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // ZytInjectContentExampleProj 4 | // 5 | // Created by aron on 2018/4/20. 6 | // Copyright © 2018年 aron. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | 16 | @end 17 | 18 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Target Support Files/InjectedContentKit/InjectedContentKit-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "ICK_NetworkInterfaceManager.h" 14 | #import "ICK_UtilMacro.h" 15 | #import "ICK_MMSessionTask.h" 16 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // InjectedContentKit 4 | // 5 | // Created by flypigrmvb on 02/09/2018. 6 | // Copyright (c) 2018 flypigrmvb. All rights reserved. 7 | // 8 | 9 | @import UIKit; 10 | #import "ICKAppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) 13 | { 14 | @autoreleasepool { 15 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([ICKAppDelegate class])); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Target Support Files/InjectedContentKit/InjectedContentKit-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "ICK_NetworkInterfaceManager.h" 14 | #import "ICK_UtilMacro.h" 15 | #import "ICK_MMSessionTask.h" 16 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/InjectedContentKit/Classes/Composer/GameDetailDataComposer.h: -------------------------------------------------------------------------------- 1 | // 2 | // GameDetailDataComposer.h 3 | // mmosite 4 | // 5 | // Created by yuan he on 2017/5/24. 6 | // Copyright © 2017年 qingot. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface GameDetailDataComposer : NSObject 12 | 13 | @property (nonatomic, assign) NSInteger gameID; 14 | 15 | - (void)loadDataWithBlock:(void (^)(void))block; 16 | 17 | @end 18 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/ZytInjectContentExampleProj/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // ZytInjectContentExampleProj 4 | // 5 | // Created by aron on 2018/4/20. 6 | // Copyright © 2018年 aron. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "AppDelegate.h" 11 | 12 | int main(int argc, char * argv[]) { 13 | @autoreleasepool { 14 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit/InjectedContentKit-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header 3 | // 4 | // The contents of this file are implicitly included at the beginning of every source file. 5 | // 6 | 7 | #import 8 | 9 | #ifndef __IPHONE_5_0 10 | #warning "This project uses features only available in iOS SDK 5.0 and later." 11 | #endif 12 | 13 | #ifdef __OBJC__ 14 | @import UIKit; 15 | @import Foundation; 16 | #import 17 | #endif 18 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/ReadMe.md: -------------------------------------------------------------------------------- 1 | ReadMe.md 2 | 3 | ## 文件及其作用 4 | 5 | ### 文件夹处理相关文件 6 | - RenameDir.sh 修改文件夹脚本 7 | 8 | ### 类处理相关文件 9 | - GenRenameClasses.sh 从指定的目录读取类文件生成重命名类的配置文件RenameClasses.cfg 10 | - RenameClasses.cfg 生成的重命名类的配置文件 11 | - RenameClasses.sh 读取RenameClasses.cfg配置文件,修改配置的类名、修改引用、修改在pbxproj文件中的索引 12 | 13 | ### 属性处理相关文件 14 | 15 | ### 方法处理相关文件 16 | 17 | ### 注入内容处理相关文件 18 | - injectedContentConfig.cfg 注入内容配置文件 19 | - injectedContentShell.sh 注入内容脚本 20 | 21 | 22 | ## 使用方法 23 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/InjectedContentKit/Classes/Utils/ICK_UtilMacro.h: -------------------------------------------------------------------------------- 1 | // 2 | // ICK_UtilMacro.h 3 | // MobileExperience 4 | // 5 | // Created by Liyu on 15/7/16. 6 | // Copyright (c) 2015年 NetDragon. All rights reserved. 7 | // 8 | 9 | #ifndef MobileExperience_ICK_UtilMacro_h 10 | #define MobileExperience_ICK_UtilMacro_h 11 | 12 | #import 13 | #import 14 | 15 | // 工具类 16 | #define ICK_ValueOrEmpty(value) ((value != nil)?(value):@"") 17 | 18 | #define _(x) NSLocalizedString(x, @"") 19 | 20 | #endif 21 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit/Business/SSCatchShareOrganizer.h: -------------------------------------------------------------------------------- 1 | 2 | 3 | #import 4 | 5 | @class SSCatchActivityCouponSampler; 6 | 7 | @interface SSCatchShareOrganizer : NSObject 8 | 9 | @property (nonatomic, strong) NSString* invitationCode; 10 | 11 | - (void)fetchCodeWithToast:(BOOL)showToast completion:(void (^)(NSString* invitationCode))block; 12 | - (void)fetchInvitateWithCode:(NSString*)invitationCode toast:(BOOL)showToast completion:(void (^)(BOOL result, SSCatchActivityCouponSampler* item))block; 13 | 14 | @end 15 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit/Business/Pay/SSCatchPayMethodScheduler.h: -------------------------------------------------------------------------------- 1 | 2 | 3 | #import 4 | 5 | @class SSCatchPayMethodSampler; 6 | 7 | @protocol SSCatchPayMethodDelegate 8 | 9 | - (void)pickPayMethod:(SSCatchPayMethodSampler*)payMethod; 10 | 11 | @end 12 | 13 | @class SSCatchRechargeSampler; 14 | 15 | @interface SSCatchPayMethodScheduler : UIViewController 16 | 17 | - (instancetype)initWithRechargeSampler:(SSCatchRechargeSampler *)item; 18 | @property (nonatomic, weak) id delegate; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/InjectedContentKit/Classes/Composer/PubSearchDataComposer.h: -------------------------------------------------------------------------------- 1 | // 2 | // PubSearchDataComposer.h 3 | // mmosite 4 | // 5 | // Created by aron on 2017/8/16. 6 | // Copyright © 2017年 qingot. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @class MMSearchSuggestionModel; 12 | 13 | @interface PubSearchDataComposer : NSObject 14 | 15 | @property (strong, nonatomic) NSMutableArray* cardItems; 16 | @property (nonatomic, strong) NSString* searchPredicateStr;///<搜索条件 17 | 18 | - (void)loadSuggestionWithCompletionBlock:(void (^)(void))block; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/.travis.yml: -------------------------------------------------------------------------------- 1 | # references: 2 | # * http://www.objc.io/issue-6/travis-ci.html 3 | # * https://github.com/supermarin/xcpretty#usage 4 | 5 | osx_image: xcode7.3 6 | language: objective-c 7 | # cache: cocoapods 8 | # podfile: Example/Podfile 9 | # before_install: 10 | # - gem install cocoapods # Since Travis is not always on latest version 11 | # - pod install --project-directory=Example 12 | script: 13 | - set -o pipefail && xcodebuild test -enableCodeCoverage YES -workspace Example/InjectedContentKit.xcworkspace -scheme InjectedContentKit-Example -sdk iphonesimulator9.3 ONLY_ACTIVE_ARCH=NO | xcpretty 14 | - pod lib lint 15 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/InjectedContentKit/Classes/Composer/GameDetailDataComposer.m: -------------------------------------------------------------------------------- 1 | // 2 | // GameDetailDataComposer.m 3 | // mmosite 4 | // 5 | // Created by yuan he on 2017/5/24. 6 | // Copyright © 2017年 qingot. All rights reserved. 7 | // 8 | 9 | #import "GameDetailDataComposer.h" 10 | 11 | 12 | @interface GameDetailDataComposer () 13 | 14 | @end 15 | 16 | @implementation GameDetailDataComposer 17 | 18 | - (void)loadDataWithBlock:(void (^)(void))block { 19 | 20 | } 21 | 22 | #pragma mark - getters 23 | 24 | - (NSString *)cacheName { 25 | return [NSString stringWithFormat:@"GameDetail_%@", @(self.gameID)]; 26 | } 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/InjectedContentKit/Classes/Composer/WriterDataComposer.h: -------------------------------------------------------------------------------- 1 | // 2 | // WriterDataComposer.h 3 | // mmosite 4 | // 5 | // Created by yuan he on 2017/3/2. 6 | // Copyright © 2017年 qingot. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "ICK_NetworkInterfaceManager.h" 11 | 12 | @interface WriterDataComposer : NSObject 13 | 14 | @property (strong, nonatomic) NSString *authorId; 15 | @property (strong, nonatomic) NSMutableArray *cardItems; 16 | @property (assign, nonatomic) BOOL isLastPage; 17 | 18 | - (void)loadWithType:(MMLoadType)loadType completionBlock:(void (^)(void))block; 19 | 20 | @end 21 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/RenameDir.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ############## 配置 4 | 5 | # 需处理文件目录 6 | # mark: TODO 7 | to_process_file_dir="$(pwd)/../injectedContentKit/Business000" 8 | 9 | 10 | # 循环检测输入的文件夹 11 | function checkInputDestDir { 12 | echo -n "请输入需处理源码目录: " 13 | read path 14 | if [[ -d $path ]]; then 15 | to_process_file_dir=$path 16 | else 17 | echo -n "输入的目录无效," 18 | checkInputDestDir 19 | fi 20 | } 21 | 22 | # 需处理源码目录检查 23 | if [[ -d $to_process_file_dir ]]; then 24 | echo "需处理源码目录存在 $to_process_file_dir" 25 | else 26 | echo "请确认需处理源码目录是否存在 $to_process_file_dir" 27 | checkInputDestDir 28 | fi 29 | 30 | echo "目标目录:${to_process_file_dir}" -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Target Support Files/InjectedContentKit/InjectedContentKit.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/InjectedContentKit 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/InjectedContentKit" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/InjectedContentKit" 4 | PODS_BUILD_DIR = $BUILD_DIR 5 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/ZytInjectContentExampleProj/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.m 3 | // ZytInjectContentExampleProj 4 | // 5 | // Created by aron on 2018/4/20. 6 | // Copyright © 2018年 aron. All rights reserved. 7 | // 8 | 9 | #import "ViewController.h" 10 | 11 | @interface ViewController () 12 | 13 | @end 14 | 15 | @implementation ViewController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | // Do any additional setup after loading the view, typically from a nib. 20 | } 21 | 22 | 23 | - (void)didReceiveMemoryWarning { 24 | [super didReceiveMemoryWarning]; 25 | // Dispose of any resources that can be recreated. 26 | } 27 | 28 | 29 | @end 30 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Target Support Files/InjectedContentKit/InjectedContentKit.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/InjectedContentKit 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Private/InjectedContentKit" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/InjectedContentKit" 4 | PODS_BUILD_DIR = $BUILD_DIR 5 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Target Support Files/Pods-InjectedContentKit_Tests/Pods-InjectedContentKit_Tests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/InjectedContentKit" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/InjectedContentKit" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/InjectedContentKit" 5 | OTHER_LDFLAGS = $(inherited) -ObjC 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Target Support Files/Pods-InjectedContentKit_Tests/Pods-InjectedContentKit_Tests.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/InjectedContentKit" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/InjectedContentKit" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/InjectedContentKit" 5 | OTHER_LDFLAGS = $(inherited) -ObjC 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/InjectedContentKit/Classes/Utils/ICK_GlobalURL.h: -------------------------------------------------------------------------------- 1 | // 2 | // ICK_GlobalURL.h 3 | // MoboKey 4 | // 5 | // Created by heyuan on 16/2/5. 6 | // Copyright © 2016年 xzrs. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface ICK_GlobalURL : NSObject 12 | 13 | + (NSString *)URLEncode:(NSString *)unencodedString; 14 | + (NSString *)URLDecode:(NSString *)encodedString; 15 | 16 | + (NSString *)additionWithUrlString:(NSString *)url; 17 | + (NSString* )URLStringWithBaseURLString:(NSString*)baseURLString params:(NSDictionary*)params; 18 | 19 | + (NSMutableDictionary *)paramsDictionaryFromUrl:(NSString *)urlString; 20 | + (NSString *)parmasURL:(NSString *)URL key:(NSString *)key value:(NSString *)value; 21 | @end 22 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Target Support Files/Pods-InjectedContentKit_Example/Pods-InjectedContentKit_Example.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/InjectedContentKit" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/InjectedContentKit" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/InjectedContentKit" 5 | OTHER_LDFLAGS = $(inherited) -ObjC -l"InjectedContentKit" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Target Support Files/Pods-InjectedContentKit_Example/Pods-InjectedContentKit_Example.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/InjectedContentKit" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/InjectedContentKit" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/InjectedContentKit" 5 | OTHER_LDFLAGS = $(inherited) -ObjC -l"InjectedContentKit" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/InjectedContentKit/Classes/Utils/ICK_NetworkInterfaceManager.m: -------------------------------------------------------------------------------- 1 | // 2 | // ICK_NetworkInterfaceManager.m 3 | // Momoji 4 | // 5 | // Created by yuan he on 2016/11/9. 6 | // Copyright © 2016年 yuan he. All rights reserved. 7 | // 8 | 9 | #import "ICK_NetworkInterfaceManager.h" 10 | #import "ICK_GlobalURL.h" 11 | 12 | @interface ICK_NetworkInterfaceManager () 13 | 14 | @end 15 | 16 | @implementation ICK_NetworkInterfaceManager 17 | 18 | + (NSString *)URLStringWithType:(MMURLType)type { 19 | NSString *resultString = [self pureURLStringWithType:type]; 20 | resultString = [ICK_GlobalURL additionWithUrlString:resultString]; 21 | return resultString; 22 | } 23 | 24 | + (NSString *)pureURLStringWithType:(MMURLType)type { 25 | return @""; 26 | } 27 | 28 | @end 29 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Target Support Files/Pods-ZytInjectContentExampleProj/Pods-ZytInjectContentExampleProj.debug.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/InjectedContentKit" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/InjectedContentKit" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/InjectedContentKit" 5 | OTHER_LDFLAGS = $(inherited) -ObjC -l"InjectedContentKit" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Target Support Files/Pods-ZytInjectContentExampleProj/Pods-ZytInjectContentExampleProj.release.xcconfig: -------------------------------------------------------------------------------- 1 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 2 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/InjectedContentKit" 3 | LIBRARY_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/InjectedContentKit" 4 | OTHER_CFLAGS = $(inherited) -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/InjectedContentKit" 5 | OTHER_LDFLAGS = $(inherited) -ObjC -l"InjectedContentKit" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 9 | PODS_ROOT = ${SRCROOT}/Pods 10 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Tests/Tests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | BNDL 15 | CFBundleShortVersionString 16 | 1.0 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit/Business/SSCatchShareOrganizer.m: -------------------------------------------------------------------------------- 1 | 2 | 3 | #import "SSCatchShareOrganizer.h" 4 | 5 | @implementation SSCatchShareOrganizer 6 | 7 | - (void)fetchCodeWithToast:(BOOL)showToast completion:(void (^)(NSString* invitationCode))block { 8 | 9 | 10 | } 11 | 12 | - (void)fetchInvitateWithCode:(NSString*)invitationCode 13 | toast:(BOOL)showToast 14 | completion:(void (^)(BOOL result, SSCatchActivityCouponSampler* item))block { 15 | 16 | } 17 | 18 | 19 | #pragma mark - ......::::::: Getter :::::::...... 20 | 21 | - (NSString*)invitationCode { 22 | 23 | return @""; 24 | } 25 | 26 | 27 | #pragma mark - ......::::::: Private :::::::...... 28 | 29 | - (NSString*)cacheName { 30 | 31 | return @""; 32 | } 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Tests/Tests.m: -------------------------------------------------------------------------------- 1 | // 2 | // InjectedContentKitTests.m 3 | // InjectedContentKitTests 4 | // 5 | // Created by flypigrmvb on 02/09/2018. 6 | // Copyright (c) 2018 flypigrmvb. All rights reserved. 7 | // 8 | 9 | @import XCTest; 10 | 11 | @interface Tests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation Tests 16 | 17 | - (void)setUp 18 | { 19 | [super setUp]; 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | } 22 | 23 | - (void)tearDown 24 | { 25 | // Put teardown code here. This method is called after the invocation of each test method in the class. 26 | [super tearDown]; 27 | } 28 | 29 | - (void)testExample 30 | { 31 | XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); 32 | } 33 | 34 | @end 35 | 36 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/.gitignore: -------------------------------------------------------------------------------- 1 | # OS X 2 | .DS_Store 3 | 4 | # Xcode 5 | build/ 6 | *.pbxuser 7 | !default.pbxuser 8 | *.mode1v3 9 | !default.mode1v3 10 | *.mode2v3 11 | !default.mode2v3 12 | *.perspectivev3 13 | !default.perspectivev3 14 | xcuserdata/ 15 | *.xccheckout 16 | profile 17 | *.moved-aside 18 | DerivedData 19 | *.hmap 20 | *.ipa 21 | 22 | # Bundler 23 | .bundle 24 | 25 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 26 | # Carthage/Checkouts 27 | 28 | Carthage/Build 29 | 30 | # We recommend against adding the Pods directory to your .gitignore. However 31 | # you should judge for yourself, the pros and cons are mentioned at: 32 | # http://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 33 | # 34 | # Note: if you ignore the Pods directory, make sure to uncomment 35 | # `pod install` in .travis.yml 36 | # 37 | # Pods/ 38 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/InjectedContentKit/Classes/Utils/NSObject+ICK_NSJSON.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+NSJSON.m 3 | // MobileExperience 4 | // 5 | // Created by Fyl on 16/1/18. 6 | // Copyright (c) 2016 xzrs. All rights reserved. 7 | // 8 | 9 | #import "NSObject+ICK_NSJSON.h" 10 | 11 | @implementation NSObject (NSJSON) 12 | 13 | - (NSString *)nsjsonString 14 | { 15 | if (![NSJSONSerialization isValidJSONObject:self]) { 16 | return nil; 17 | } 18 | NSError *error = NULL; 19 | NSData *jsonData = [NSJSONSerialization dataWithJSONObject:self options:NSJSONWritingPrettyPrinted error:&error]; 20 | NSString *jsonString = @""; 21 | if ([jsonData length] && !error) { 22 | jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 23 | } else { 24 | NSLog(@"-NSJSONString failed. Error trace is: %@", error); 25 | } 26 | 27 | return jsonString; 28 | } 29 | 30 | @end 31 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/test/testInsertCodeToFun.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | injected_content="//#Test content"; 4 | 5 | # sed -i '/^- \(.*\){$/{ 6 | # a\ '"$injected_content"' 7 | # }' InsertCodeToFunSourceFile.m 8 | 9 | 10 | # sed -i -E '/^- \(.*\)[.\s\D]*?\{$/{ 11 | # a\ '"$injected_content"' 12 | # }' InsertCodeToFunSourceFile.m 13 | 14 | # sed -E '/^- \(.*\).*\{$/{ 15 | # a\ '"$injected_content"' 16 | # }' InsertCodeToFunSourceFile.m 17 | 18 | 19 | # sed '/\/\*/{ 20 | # :1; 21 | # N; 22 | # /\*\//!b1; 23 | # s/\/\*.*\*\/// 24 | # }' InsertCodeToFunSourceFile.m 25 | 26 | # sed '/^- \(.*\){$/{ 27 | # a\ '"$injected_content"' 28 | # }' InsertCodeToFunSourceFile.m 29 | 30 | sed -i '/^- \(.*\)/{ 31 | :tag1; 32 | N; 33 | /{$/!b tag1; 34 | a '"$injected_content"' 35 | }' InsertCodeToFunSourceFile.m 36 | 37 | sed -i '/^- \(.*\){$/{ 38 | a\ '"$injected_content"' 39 | }' InsertCodeToFunSourceFile.m 40 | 41 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Local Podspecs/InjectedContentKit.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "InjectedContentKit", 3 | "version": "0.1.0", 4 | "summary": "A short description of InjectedContentKit.", 5 | "description": "TODO: Add long description of the pod here.", 6 | "homepage": "https://github.com/flypigrmvb/InjectedContentKit", 7 | "license": { 8 | "type": "MIT", 9 | "file": "LICENSE" 10 | }, 11 | "authors": { 12 | "flypigrmvb": "862709539@qq.com" 13 | }, 14 | "source": { 15 | "git": "https://github.com/flypigrmvb/InjectedContentKit.git", 16 | "tag": "0.1.0" 17 | }, 18 | "platforms": { 19 | "ios": "8.0" 20 | }, 21 | "source_files": "InjectedContentKit/Classes/**/*", 22 | "public_header_files": "Pod/Classes/**/*.h", 23 | "prefix_header_contents": [ 24 | "#import \"ICK_NetworkInterfaceManager.h\"", 25 | "#import \"ICK_UtilMacro.h\"", 26 | "#import \"ICK_MMSessionTask.h\"" 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Local Podspecs/InjectedContentKit.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "InjectedContentKit", 3 | "version": "0.1.0", 4 | "summary": "A short description of InjectedContentKit.", 5 | "description": "TODO: Add long description of the pod here.", 6 | "homepage": "https://github.com/flypigrmvb/InjectedContentKit", 7 | "license": { 8 | "type": "MIT", 9 | "file": "LICENSE" 10 | }, 11 | "authors": { 12 | "flypigrmvb": "862709539@qq.com" 13 | }, 14 | "source": { 15 | "git": "https://github.com/flypigrmvb/InjectedContentKit.git", 16 | "tag": "0.1.0" 17 | }, 18 | "platforms": { 19 | "ios": "8.0" 20 | }, 21 | "source_files": "InjectedContentKit/Classes/**/*", 22 | "public_header_files": "Pod/Classes/**/*.h", 23 | "prefix_header_contents": [ 24 | "#import \"ICK_NetworkInterfaceManager.h\"", 25 | "#import \"ICK_UtilMacro.h\"", 26 | "#import \"ICK_MMSessionTask.h\"" 27 | ] 28 | } 29 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/InjectedContentKit/Classes/Composer/PubSearchDataComposer.m: -------------------------------------------------------------------------------- 1 | // 2 | // PubSearchDataComposer.m 3 | // mmosite 4 | // 5 | // Created by aron on 2017/8/16. 6 | // Copyright © 2017年 qingot. All rights reserved. 7 | // 8 | 9 | #import "PubSearchDataComposer.h" 10 | 11 | @interface PubSearchDataComposer () 12 | @property (nonatomic, strong) NSHashTable* searchTaskList; 13 | @end 14 | 15 | @implementation PubSearchDataComposer 16 | 17 | - (NSHashTable *)searchTaskList { 18 | if (!_searchTaskList) { 19 | _searchTaskList = [NSHashTable hashTableWithOptions:NSHashTableWeakMemory];; 20 | } 21 | return _searchTaskList; 22 | } 23 | 24 | - (void)loadSuggestionWithCompletionBlock:(void (^)(void))block { 25 | } 26 | 27 | 28 | - (NSMutableArray *)cardItems { 29 | if (!_cardItems) { 30 | _cardItems = [[NSMutableArray alloc] init]; 31 | } 32 | return _cardItems; 33 | } 34 | @end 35 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Target Support Files/Pods-InjectedContentKit_Tests/Pods-InjectedContentKit_Tests-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Shell/TestOriginalContent: -------------------------------------------------------------------------------- 1 | ######## test Original Content ######## 2 | 3 | ### Project.pbxproj 4 | 5 | path = ZytInjectContentExampleProj; 6 | 7 | /* Begin PBXNativeTarget section */ 8 | name = ZytInjectContentExample2222; 9 | productName = ZytInjectContentExample2222; 10 | 11 | /* Begin XCBuildConfiguration section */ 12 | INFOPLIST_FILE = ZytInjectContentExampleProj/Info.plist; 13 | PRODUCT_BUNDLE_IDENTIFIER = YTT.ZytInjectContentExampleProj; 14 | 15 | 16 | ### Podfile 17 | 18 | target 'ZytInjectContentExample2222' do 19 | 20 | ### ZytInjectContentExampleProj.xcodeproj/project.xcworkspace/contents.xcworkspacedata 21 | location = "self:ZytInjectContentExampleProj.xcodeproj"> 22 | 23 | 24 | ### ZytInjectContentExampleProj.xcodeproj/xcuserdata/aron.xcuserdatad/xcschemes/xcschememanagement.plist 25 | 26 | ZytInjectContentExampleProj.xcscheme 27 | 28 | 29 | ### ZytInjectContentExampleProj.xcworkspace/contents.xcworkspacedata 30 | 31 | location = "group:ZytInjectContentExampleProj.xcodeproj"> 32 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Shell/TestOriginalContent.bak: -------------------------------------------------------------------------------- 1 | ######## test Original Content ######## 2 | 3 | ### Project.pbxproj 4 | 5 | path = ZytInjectContentExampleProj; 6 | 7 | /* Begin PBXNativeTarget section */ 8 | name = ZytInjectContentExampleProj; 9 | productName = ZytInjectContentExampleProj; 10 | 11 | /* Begin XCBuildConfiguration section */ 12 | INFOPLIST_FILE = ZytInjectContentExampleProj/Info.plist; 13 | PRODUCT_BUNDLE_IDENTIFIER = YTT.ZytInjectContentExampleProj; 14 | 15 | 16 | ### Podfile 17 | 18 | target 'ZytInjectContentExampleProj' do 19 | 20 | ### ZytInjectContentExampleProj.xcodeproj/project.xcworkspace/contents.xcworkspacedata 21 | location = "self:ZytInjectContentExampleProj.xcodeproj"> 22 | 23 | 24 | ### ZytInjectContentExampleProj.xcodeproj/xcuserdata/aron.xcuserdatad/xcschemes/xcschememanagement.plist 25 | 26 | ZytInjectContentExampleProj.xcscheme 27 | 28 | 29 | ### ZytInjectContentExampleProj.xcworkspace/contents.xcworkspacedata 30 | 31 | location = "group:ZytInjectContentExampleProj.xcodeproj"> 32 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit/Business/Pay/SSCatchPayMethodScheduler.m: -------------------------------------------------------------------------------- 1 | 2 | 3 | #import "SSCatchPayMethodScheduler.h" 4 | 5 | @interface SSCatchPayMethodScheduler () 6 | 7 | @end 8 | 9 | @implementation SSCatchPayMethodScheduler 10 | 11 | - (instancetype)initWithRechargeSampler:(SSCatchRechargeSampler *)item { 12 | self = [super init]; 13 | if (self) { 14 | } 15 | return self; 16 | } 17 | 18 | - (void)viewDidLoad { 19 | [super viewDidLoad]; 20 | 21 | [self makeAppearance]; 22 | [self updateDataToUI]; 23 | 24 | } 25 | 26 | - (void)didReceiveMemoryWarning { 27 | [super didReceiveMemoryWarning]; 28 | // Dispose of any resources that can be recreated. 29 | } 30 | 31 | - (void)dealloc { 32 | NSLog(@"=="); 33 | } 34 | 35 | - (void)makeAppearance { 36 | } 37 | 38 | - (void)updateDataToUI { 39 | 40 | } 41 | 42 | - (UIButton*)thirdLoginButtonWithTypeModel:(SSCatchPayMethodSampler*)paymentMethodModel { 43 | return nil; 44 | } 45 | 46 | - (void)thirdButtonTapped:(UIButton*)sender { 47 | 48 | 49 | } 50 | 51 | @end 52 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/test/InsertCodeToFunSourceFile.m: -------------------------------------------------------------------------------- 1 | int abc; 2 | 3 | - (void)fetchCodeWithToast:(BOOL)showToast completion:(void (^)(NSString* invitationCode))block { 4 | //#Test content 5 | 6 | } 7 | 8 | - fetchCodeWithToast:(BOOL)showToast completion:(void (^)(NSString* invitationCode))block { 9 | //#Test content 10 | //#Test content 11 | 12 | } 13 | 14 | - (void)fetchInvitateWithCode:(NSString*)invitationCode 15 | toast:(BOOL)showToast 16 | completion:(void (^)(BOOL result, SSCatchActivityCouponSampler* item))block { 17 | //#Test content 18 | 19 | } 20 | 21 | - (void)fetchInvitateWithCode:(NSString*)invitationCode 22 | toast:(BOOL)showToast { 23 | //#Test content 24 | 25 | } 26 | 27 | int a; 28 | /* fldajlkfjdlgkjdlkjgl 29 | jldjgkdjlgjdjld;ajgl 30 | jldjgkdjlgjdjld;ajgl 31 | */ 32 | /* 33 | fldajlkfjdlgkjdlkjgl 34 | jldjgkdjlgjdjld;ajgl 35 | jldjgkdjlgjdjld;ajgl 36 | */ 37 | /* sssss */ 38 | /* sssss */ 39 | int b; -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore, theos & Swift.gitignore 2 | 3 | 4 | # wepy 5 | node_modules 6 | dist 7 | .DB_store 8 | package-lock.json 9 | .wepycache 10 | 11 | 12 | # theos 13 | .DS_Store 14 | /.theos/ 15 | /debs/ 16 | /obj/ 17 | /packages/ 18 | #pod 19 | /Pods/ 20 | ._* 21 | *.deb 22 | .debmake 23 | 24 | # Xcode 25 | # 26 | dSYM/ 27 | 28 | 29 | ## Build generated 30 | build/ 31 | DerivedData/ 32 | 33 | ## Various settings 34 | 35 | 36 | *.pbxuser 37 | !default.pbxuser 38 | 39 | *.mode1v3 40 | !default.mode1v3 41 | 42 | *.mode2v3 43 | !default.mode2v3 44 | 45 | *.perspectivev3 46 | !default.perspectivev3 47 | 48 | xcuserdata/ 49 | 50 | ## Other 51 | 52 | *.xccheckout 53 | 54 | *.moved-aside 55 | *.xcscmblueprint 56 | 57 | .DS_Store 58 | *.hmap 59 | *.ipa 60 | *.xcuserstate 61 | *.o 62 | 63 | #qt 64 | 65 | build-DirWatcher-Desktop_Qt_5_5_1_GCC_32bit-Debug/ 66 | Release/*.cpp 67 | Release/*.o 68 | Release/Makefile 69 | _site 70 | .sass-cache 71 | .jekyll-metadata 72 | 73 | #R.swift 74 | *.generated.swift 75 | 76 | 77 | #py 78 | .idea/ 79 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2018 flypigrmvb <862709539@qq.com> 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/README.md: -------------------------------------------------------------------------------- 1 | # InjectedContentKit 2 | 3 | [![CI Status](http://img.shields.io/travis/flypigrmvb/InjectedContentKit.svg?style=flat)](https://travis-ci.org/flypigrmvb/InjectedContentKit) 4 | [![Version](https://img.shields.io/cocoapods/v/InjectedContentKit.svg?style=flat)](http://cocoapods.org/pods/InjectedContentKit) 5 | [![License](https://img.shields.io/cocoapods/l/InjectedContentKit.svg?style=flat)](http://cocoapods.org/pods/InjectedContentKit) 6 | [![Platform](https://img.shields.io/cocoapods/p/InjectedContentKit.svg?style=flat)](http://cocoapods.org/pods/InjectedContentKit) 7 | 8 | ## Example 9 | 10 | To run the example project, clone the repo, and run `pod install` from the Example directory first. 11 | 12 | ## Requirements 13 | 14 | ## Installation 15 | 16 | InjectedContentKit is available through [CocoaPods](http://cocoapods.org). To install 17 | it, simply add the following line to your Podfile: 18 | 19 | ```ruby 20 | pod 'InjectedContentKit' 21 | ``` 22 | 23 | ## Author 24 | 25 | flypigrmvb, 862709539@qq.com 26 | 27 | ## License 28 | 29 | InjectedContentKit is available under the MIT license. See the LICENSE file for more info. 30 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/DeleteClasses.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ######################## 3 | # 脚本功能:删除类重命名脚本产生生成的类 4 | ######################## 5 | 6 | ####### 配置 7 | # 定义需要替换的类的查找目录,作为参数传递给GenRenameClasses.sh脚本使用,最终获取到的类名称保存到配置文件中,以给后续步骤使用 8 | class_search_dir="$(pwd)/../injectedContentKit/Business000" 9 | class_search_dir="/Users/aron/git-repo/YTTInjectedContentKit/DevPods/InjectedContentKit/Example/InjectedContentKit/Business" 10 | 11 | # 类前缀 12 | class_prefix="XYZ" 13 | # 类后缀 14 | class_suffix="ABC" 15 | 16 | 17 | ####### 配置检查处理 18 | # 导入工具脚本 19 | . ./FileUtil.sh 20 | 21 | # 检测 class_search_dir 22 | checkDirCore $class_search_dir "指定类的查找目录不存在" 23 | class_search_dir=${CheckInputDestDirRecursiveReturnValue} 24 | 25 | # 也可以使用$(grep -rl "XYZ.*ABC" ${class_search_dir}) 26 | # 也可以使用$(find ${class_search_dir} -name "XYZ*ABC.[h|m]") 27 | for class_file_path in `find ${class_search_dir} -name "XYZ*ABC.[h|m]"`; do 28 | echo "删除文件>>>${class_file_path}" 29 | rm -f ${class_file_path} 30 | done 31 | 32 | for class_file_path in `find ${class_search_dir} -name "XYZ*ABC.xib"`; do 33 | echo "删除文件>>>${class_file_path}" 34 | rm -f ${class_file_path} 35 | done 36 | 37 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/FileUtil.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | # 循环检测输入的文件夹 4 | checkInputDestDirRecursive() { 5 | echo -n "请输入目录: " 6 | read path 7 | if [[ -d $path ]]; then 8 | CheckInputDestDirRecursiveReturnValue=$path 9 | else 10 | echo -n "输入的目录无效," 11 | checkInputDestDirRecursive 12 | fi 13 | } 14 | 15 | # 检测文件夹存在的方法,结果保存在全局变量`CheckInputDestDirRecursiveReturnValue`中 16 | # 参数一:检测的文件夹路径 17 | # 参数二:提示消息字符串 18 | # 使用方式如下,去掉注释 19 | # # 导入工具脚本 20 | # . ./FileUtil.sh 21 | # # 检测class_search_dir 22 | # checkDirCore $class_search_dir "指定类的查找目录不存在" 23 | # class_search_dir=${CheckInputDestDirRecursiveReturnValue} 24 | checkDirCore() { 25 | to_process_dir=$1 26 | message=$2 27 | # 需处理源码目录检查 28 | if [[ -d $to_process_dir ]]; then 29 | echo "目录存在 $to_process_dir" 30 | CheckInputDestDirRecursiveReturnValue=$to_process_dir 31 | return 1 32 | else 33 | echo "${message} ${to_process_dir}" 34 | checkInputDestDirRecursive ${to_process_dir} 35 | fi 36 | } 37 | 38 | # 检测文件是否存在,不存在则创建 39 | checkOrCreateFile() { 40 | file=$1 41 | if [[ -f $file ]]; then 42 | echo "检测到文件存在 $file" 43 | else 44 | echo "创建文件 $file" 45 | touch $file 46 | fi 47 | } -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Shell/RenameProject.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ProjectDir="$(pwd)/../" 4 | 5 | # 原始项目名称 6 | originalProjName="ZytInjectContentExampleProj" 7 | # 需要修改的项目名称 8 | replacedProjName="ZytInjectContentExample2222" 9 | file="TestOriginalContent" 10 | 11 | # project.pbxproj 文件位置 12 | pbxprojFile="$(pwd)/../ZytInjectContentExampleProj.xcodeproj/project.pbxproj" 13 | # Podfile文件位置 14 | podFile="$(pwd)/../Podfile" 15 | 16 | 17 | name="name = ${originalProjName}" 18 | productName="productName = ${originalProjName}" 19 | target="target '${originalProjName}'" 20 | 21 | declare -a searchContents 22 | searchContents[0]=${name} 23 | searchContents[1]=${productName} 24 | searchContents[2]=${target} 25 | 26 | declare -a searchContentInFiles 27 | searchContentInFiles[0]=${pbxprojFile} 28 | searchContentInFiles[1]=${pbxprojFile} 29 | searchContentInFiles[2]=${podFile} 30 | 31 | for(( i=0;i<${#searchContents[@]};i++)) do 32 | searchContent=${searchContents[$i]}; 33 | file=${searchContentInFiles[$i]}; 34 | echo "searchContent = ${searchContent}" 35 | sed -i '/'"${searchContent}"'/{ 36 | s/'"${originalProjName}"'/'"${replacedProjName}"'/ 37 | }' ${file} 38 | done; 39 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/InjectedContentKit.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # Be sure to run `pod lib lint InjectedContentKit.podspec' to ensure this is a 3 | # valid spec before submitting. 4 | # 5 | # Any lines starting with a # are optional, but their use is encouraged 6 | # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html 7 | # 8 | 9 | Pod::Spec.new do |s| 10 | s.name = 'InjectedContentKit' 11 | s.version = '0.1.0' 12 | s.summary = 'A short description of InjectedContentKit.' 13 | s.description = <<-DESC 14 | TODO: Add long description of the pod here. 15 | DESC 16 | 17 | s.homepage = 'https://github.com/flypigrmvb/InjectedContentKit' 18 | s.license = { :type => 'MIT', :file => 'LICENSE' } 19 | s.author = { 'flypigrmvb' => '862709539@qq.com' } 20 | s.source = { :git => 'https://github.com/flypigrmvb/InjectedContentKit.git', :tag => s.version.to_s } 21 | 22 | s.ios.deployment_target = '8.0' 23 | s.source_files = 'InjectedContentKit/Classes/**/*' 24 | s.public_header_files = 'Pod/Classes/**/*.h' 25 | s.prefix_header_contents = '#import "ICK_NetworkInterfaceManager.h"', '#import "ICK_UtilMacro.h"', '#import "ICK_MMSessionTask.h"' 26 | end 27 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/EnvCheckUtil.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ############## 工具类方法 4 | function printHighlightMessage { 5 | #mark: echo 颜色选项 http://www.jb51.net/article/43968.htm 6 | echo -e "\033[31m $1 \033[0m" 7 | } 8 | 9 | # 检测是否安装gun sed,mac 内置的sed会有些问题,所以需要安装gun sed 10 | gunSedInstallCheck() { 11 | # 检查是否安装gunsed 12 | # mac安装gunSed http://blog.csdn.net/sun_wangdong/article/details/71078083 13 | which_sed=`which sed` 14 | echo $which_sed 15 | echo "testresult = $(expr "$which_sed" : '.*/gnu-sed/')" 16 | which_sed=`ls -al ${which_sed}` 17 | echo $which_sed 18 | echo "testresult = $(expr "$which_sed" : '.*/gnu-sed/')" 19 | if [[ $(expr "$which_sed" : '.*/gnu-sed/') -gt 0 ]]; then 20 | echo "检测到使用gun sed" 21 | else 22 | if [ ! `which brew` ] 23 | then 24 | echo 'Homebrew not found. Trying to install...' 25 | ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" \ 26 | || exit 1 27 | fi 28 | echo 'Trying to install gun sed...' 29 | brew install gnu-sed --with-default-names || exit 1 30 | # 设置局部环境变量 31 | # echo "set PATH...." 32 | # source ./set-gun-sed-path.sh 33 | # echo "set PATH done" 34 | 35 | echo "请手动执行命令,然后重新执行" 36 | command="PATH=\"/usr/local/Cellar/gnu-sed/4.4/bin:\$PATH\"" 37 | printHighlightMessage $command 38 | echo "" 39 | exit 1 40 | fi 41 | } -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/InjectedContentKit/Classes/Utils/ICK_GlobalURL.m: -------------------------------------------------------------------------------- 1 | // 2 | // ICK_GlobalURL.m 3 | // MoboKey 4 | // 5 | // Created by heyuan on 16/2/5. 6 | // Copyright © 2016年 xzrs. All rights reserved. 7 | // 8 | 9 | #import "ICK_GlobalURL.h" 10 | 11 | @implementation ICK_GlobalURL 12 | 13 | + (NSString *)URLEncode:(NSString *)unencodedString 14 | { 15 | return (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)unencodedString, NULL, (CFStringRef)@"!*'();:@&=+$,/?%#[]", kCFStringEncodingUTF8)); 16 | } 17 | 18 | + (NSString *)URLDecode:(NSString *)encodedString 19 | { 20 | return [encodedString stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 21 | } 22 | 23 | + (NSString *)additionWithUrlString:(NSString *)urlSring 24 | { 25 | return urlSring; 26 | } 27 | 28 | + (NSString*)URLStringWithBaseURLString:(NSString*)baseURLString params:(NSDictionary*)params { 29 | //获取全局附加参数 30 | NSString *baseUrl = nil; 31 | return baseUrl; 32 | } 33 | 34 | + (NSMutableDictionary *)paramsDictionaryFromUrl:(NSString *)urlString 35 | { 36 | NSMutableDictionary *params = [[NSMutableDictionary alloc] init]; 37 | 38 | return params; 39 | } 40 | +(NSString *)parmasURL:(NSString *)URL key:(NSString *)key value:(NSString *)value 41 | { 42 | return nil; 43 | } 44 | +(NSString *)signature:(NSMutableDictionary *)dic 45 | { 46 | return @""; 47 | } 48 | @end 49 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Target Support Files/Pods-InjectedContentKit_Example/Pods-InjectedContentKit_Example-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## InjectedContentKit 5 | 6 | Copyright (c) 2018 flypigrmvb <862709539@qq.com> 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy 9 | of this software and associated documentation files (the "Software"), to deal 10 | in the Software without restriction, including without limitation the rights 11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the Software is 13 | furnished to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in 16 | all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | THE SOFTWARE. 25 | 26 | Generated by CocoaPods - https://cocoapods.org 27 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Target Support Files/Pods-ZytInjectContentExampleProj/Pods-ZytInjectContentExampleProj-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## InjectedContentKit 5 | 6 | Copyright (c) 2018 flypigrmvb <862709539@qq.com> 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy 9 | of this software and associated documentation files (the "Software"), to deal 10 | in the Software without restriction, including without limitation the rights 11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the Software is 13 | furnished to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in 16 | all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | THE SOFTWARE. 25 | 26 | Generated by CocoaPods - https://cocoapods.org 27 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit/Business/ICKXibTestViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ICKXibTestViewController.m 3 | // InjectedContentKit_Example 4 | // 5 | // Created by aron on 2018/4/8. 6 | // Copyright © 2018年 flypigrmvb. All rights reserved. 7 | // 8 | 9 | #import "ICKXibTestViewController.h" 10 | 11 | @interface ICKXibTestViewController () 12 | 13 | @end 14 | 15 | @implementation ICKXibTestViewController 16 | 17 | - (void)viewDidLoad { 18 | [super viewDidLoad]; 19 | // Do any additional setup after loading the view from its nib. 20 | } 21 | 22 | - (void)didReceiveMemoryWarning { 23 | [super didReceiveMemoryWarning]; 24 | // Dispose of any resources that can be recreated. 25 | } 26 | 27 | /* 28 | #pragma mark - Navigation 29 | 30 | // In a storyboard-based application, you will often want to do a little preparation before navigation 31 | - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { 32 | // Get the new view controller using [segue destinationViewController]. 33 | // Pass the selected object to the new view controller. 34 | } 35 | */ 36 | 37 | - (void)hello:(NSString*)name 38 | age:(NSUInteger)age { 39 | 40 | } 41 | 42 | - (void)fetchCodeWithToast:(BOOL)showToast completion:(void (^)(NSString* invitationCode))block { 43 | 44 | 45 | 46 | } 47 | 48 | - (void)fetchInvitateWithCode:(NSString*)invitationCode 49 | toast:(BOOL)showToast 50 | completion:(void (^)(BOOL result))block { 51 | 52 | 53 | } 54 | 55 | 56 | @end 57 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/InjectedContentKit/Classes/Utils/ICK_MMSessionTask.h: -------------------------------------------------------------------------------- 1 | // 2 | // MWSessionTask.h 3 | // MoboWiFi 4 | // 5 | // Created by heyuan on 16/3/4. 6 | // Copyright © 2016年 mobo. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "NSObject+ICK_NSJSON.h" 11 | 12 | typedef NS_ENUM(NSInteger, MMServerStateCode) { 13 | MMServerStateCodeSuccess = 0, 14 | MMServerStateCodeFail = 1, 15 | MMServerStateAlreadyZan = 3, 16 | MMServerStatePostAlreadyZan = 4, 17 | MMServerStateNeedBindEmail = -5, 18 | }; 19 | 20 | @interface ICK_MMSessionTask : NSObject 21 | 22 | + (NSURLSessionDataTask *)beginTaskWithUrlString:(NSString *)urlString postData:(NSData *)data completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler; 23 | 24 | + (NSURLSessionDataTask *)beginTaskWithUrlString:(NSString *)urlString postData:(NSData *)data contentType:(NSString *)contentType completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler; 25 | 26 | + (NSURLSessionDataTask *)mmTaskWithUrlString:(NSString *)urlString postData:(NSData *)data mmCodeHandler:(void (^)(id dictOrArray, NSInteger code))mmCodeHandler; 27 | 28 | + (NSURLSessionDataTask *)mmTaskWithUrlString:(NSString *)urlString postData:(NSData *)data mmHandler:(void (^)(id dictOrArray))mmHandler; 29 | 30 | + (NSURLSessionDataTask *)mmTaskWithUrlString:(NSString *)urlString postData:(NSData *)data mmCodeMessageHandler:(void (^)(id dictOrArray, NSInteger code, NSString *message))mmCodeMessageHandler; 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/ZytInjectContentExampleProj/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/InjectedContentKit/Classes/Composer/WriterDataComposer.m: -------------------------------------------------------------------------------- 1 | // 2 | // WriterDataComposer.m 3 | // mmosite 4 | // 5 | // Created by yuan he on 2017/3/2. 6 | // Copyright © 2017年 qingot. All rights reserved. 7 | // 8 | 9 | #import "WriterDataComposer.h" 10 | 11 | @interface WriterDataComposer () 12 | 13 | @property (nonatomic, assign) NSInteger pageIndex; 14 | @property (nonatomic, assign) BOOL isRequesting; 15 | 16 | @end 17 | 18 | @implementation WriterDataComposer 19 | 20 | - (instancetype)init { 21 | if (self = [super init]) { 22 | self.pageIndex = 1; 23 | } 24 | return self; 25 | } 26 | 27 | #pragma mark - public methods 28 | 29 | - (void)loadWithType:(MMLoadType)loadType completionBlock:(void (^)(void))block { 30 | if (!_authorId) { 31 | return; 32 | } 33 | if (loadType == MMLoadTypeRefresh) { 34 | self.pageIndex = 1; 35 | } else if (loadType == MMLoadTypeMore) { 36 | self.pageIndex++; 37 | } 38 | [self loadItemsWithPageIndex:self.pageIndex completionBlock:block]; 39 | } 40 | 41 | #pragma mark - private methods 42 | 43 | - (void)loadItemsWithPageIndex:(NSInteger)pageIndex completionBlock:(void (^)(void))block { 44 | 45 | } 46 | 47 | #pragma mark - getters 48 | 49 | - (NSMutableArray *)cardItems { 50 | if (!_cardItems) { 51 | if (!_cardItems) { 52 | _cardItems = [[NSMutableArray alloc] init]; 53 | } 54 | } 55 | return _cardItems; 56 | } 57 | 58 | - (NSString *)cardCacheName { 59 | return [NSString stringWithFormat:@"AuthorCardItems_%@", _authorId]; 60 | } 61 | 62 | - (NSString *)authorCacheName { 63 | return [NSString stringWithFormat:@"AuthorItems_%@", _authorId]; 64 | } 65 | 66 | @end 67 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/ZytInjectContentExampleProj/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit/InjectedContentKit-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDisplayName 8 | ${PRODUCT_NAME} 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.0 25 | LSRequiresIPhoneOS 26 | 27 | UILaunchStoryboardName 28 | LaunchScreen 29 | UIMainStoryboardFile 30 | Main 31 | UIRequiredDeviceCapabilities 32 | 33 | armv7 34 | 35 | UISupportedInterfaceOrientations 36 | 37 | UIInterfaceOrientationPortrait 38 | UIInterfaceOrientationLandscapeLeft 39 | UIInterfaceOrientationLandscapeRight 40 | 41 | UISupportedInterfaceOrientations~ipad 42 | 43 | UIInterfaceOrientationPortrait 44 | UIInterfaceOrientationPortraitUpsideDown 45 | UIInterfaceOrientationLandscapeLeft 46 | UIInterfaceOrientationLandscapeRight 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/ZytInjectContentExampleProj/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit/Base.lproj/LaunchScreen.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "size" : "1024x1024", 91 | "scale" : "1x" 92 | } 93 | ], 94 | "info" : { 95 | "version" : 1, 96 | "author" : "xcode" 97 | } 98 | } 99 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/ZytInjectContentExampleProj/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "size" : "1024x1024", 91 | "scale" : "1x" 92 | } 93 | ], 94 | "info" : { 95 | "version" : 1, 96 | "author" : "xcode" 97 | } 98 | } -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/ZytInjectContentExampleProj/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // ZytInjectContentExampleProj 4 | // 5 | // Created by aron on 2018/4/20. 6 | // Copyright © 2018年 aron. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | 11 | @interface AppDelegate () 12 | 13 | @end 14 | 15 | @implementation AppDelegate 16 | 17 | 18 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 19 | // Override point for customization after application launch. 20 | return YES; 21 | } 22 | 23 | 24 | - (void)applicationWillResignActive:(UIApplication *)application { 25 | // 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. 26 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 27 | } 28 | 29 | 30 | - (void)applicationDidEnterBackground:(UIApplication *)application { 31 | // 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. 32 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 33 | } 34 | 35 | 36 | - (void)applicationWillEnterForeground:(UIApplication *)application { 37 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 38 | } 39 | 40 | 41 | - (void)applicationDidBecomeActive:(UIApplication *)application { 42 | // 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. 43 | } 44 | 45 | 46 | - (void)applicationWillTerminate:(UIApplication *)application { 47 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 48 | } 49 | 50 | 51 | @end 52 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Target Support Files/Pods-InjectedContentKit_Example/Pods-InjectedContentKit_Example-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Copyright (c) 2018 flypigrmvb <862709539@qq.com> 18 | 19 | Permission is hereby granted, free of charge, to any person obtaining a copy 20 | of this software and associated documentation files (the "Software"), to deal 21 | in the Software without restriction, including without limitation the rights 22 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 23 | copies of the Software, and to permit persons to whom the Software is 24 | furnished to do so, subject to the following conditions: 25 | 26 | The above copyright notice and this permission notice shall be included in 27 | all copies or substantial portions of the Software. 28 | 29 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 30 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 31 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 32 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 33 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 34 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 35 | THE SOFTWARE. 36 | 37 | License 38 | MIT 39 | Title 40 | InjectedContentKit 41 | Type 42 | PSGroupSpecifier 43 | 44 | 45 | FooterText 46 | Generated by CocoaPods - https://cocoapods.org 47 | Title 48 | 49 | Type 50 | PSGroupSpecifier 51 | 52 | 53 | StringsTable 54 | Acknowledgements 55 | Title 56 | Acknowledgements 57 | 58 | 59 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Target Support Files/Pods-ZytInjectContentExampleProj/Pods-ZytInjectContentExampleProj-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Copyright (c) 2018 flypigrmvb <862709539@qq.com> 18 | 19 | Permission is hereby granted, free of charge, to any person obtaining a copy 20 | of this software and associated documentation files (the "Software"), to deal 21 | in the Software without restriction, including without limitation the rights 22 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 23 | copies of the Software, and to permit persons to whom the Software is 24 | furnished to do so, subject to the following conditions: 25 | 26 | The above copyright notice and this permission notice shall be included in 27 | all copies or substantial portions of the Software. 28 | 29 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 30 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 31 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 32 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 33 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 34 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 35 | THE SOFTWARE. 36 | 37 | License 38 | MIT 39 | Title 40 | InjectedContentKit 41 | Type 42 | PSGroupSpecifier 43 | 44 | 45 | FooterText 46 | Generated by CocoaPods - https://cocoapods.org 47 | Title 48 | 49 | Type 50 | PSGroupSpecifier 51 | 52 | 53 | StringsTable 54 | Acknowledgements 55 | Title 56 | Acknowledgements 57 | 58 | 59 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit/ICKAppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // ICKAppDelegate.m 3 | // InjectedContentKit 4 | // 5 | // Created by flypigrmvb on 02/09/2018. 6 | // Copyright (c) 2018 flypigrmvb. All rights reserved. 7 | // 8 | 9 | #import "ICKAppDelegate.h" 10 | 11 | @implementation ICKAppDelegate 12 | 13 | //#define barrier() __asm__ volatile ("lwsync") 14 | static ICKAppDelegate* instance; 15 | 16 | + (instancetype)shareInstance { 17 | if (!instance) { 18 | @synchronized(self) { 19 | ICKAppDelegate* obj = [[ICKAppDelegate alloc] init]; 20 | // barrier(); 21 | instance = obj; 22 | } 23 | } 24 | return instance; 25 | } 26 | 27 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 28 | { 29 | // Override point for customization after application launch. 30 | return YES; 31 | } 32 | 33 | - (void)applicationWillResignActive:(UIApplication *)application 34 | { 35 | // 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. 36 | // 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. 37 | } 38 | 39 | - (void)applicationDidEnterBackground:(UIApplication *)application 40 | { 41 | // 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. 42 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 43 | } 44 | 45 | - (void)applicationWillEnterForeground:(UIApplication *)application 46 | { 47 | // 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. 48 | } 49 | 50 | - (void)applicationDidBecomeActive:(UIApplication *)application 51 | { 52 | // 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. 53 | } 54 | 55 | - (void)applicationWillTerminate:(UIApplication *)application 56 | { 57 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 58 | } 59 | 60 | @end 61 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/InjectedContentKit/Classes/Utils/ICK_MMSessionTask.m: -------------------------------------------------------------------------------- 1 | // 2 | // MWSessionTask.m 3 | // MoboWiFi 4 | // 5 | // Created by heyuan on 16/3/4. 6 | // Copyright © 2016年 mobo. All rights reserved. 7 | // 8 | 9 | #import "ICK_MMSessionTask.h" 10 | 11 | @implementation ICK_MMSessionTask 12 | 13 | + (NSURLSessionDataTask *)mmTaskWithUrlString:(NSString *)urlString postData:(NSData *)data mmHandler:(void (^)(id))mmHandler { 14 | return [self mmTaskWithUrlString:urlString postData:data mmCodeHandler:^(id dictOrArray, NSInteger code) { 15 | if (mmHandler) { 16 | mmHandler(dictOrArray); 17 | } 18 | }]; 19 | } 20 | 21 | + (NSURLSessionDataTask *)mmTaskWithUrlString:(NSString *)urlString postData:(NSData *)data mmCodeMessageHandler:(void (^)(id dictOrArray, NSInteger code, NSString *message))mmCodeMessageHandler { 22 | return [self beginTaskWithUrlString:urlString postData:data contentType:nil isMMRequest:YES mmCodeMessageHandler:mmCodeMessageHandler completionHandler:nil]; 23 | } 24 | 25 | + (NSURLSessionDataTask *)beginTaskWithUrlString:(NSString *)urlString postData:(NSData *)data completionHandler:(void (^)(NSData *, NSURLResponse *, NSError *))completionHandler { 26 | return [self beginTaskWithUrlString:urlString postData:data contentType:nil completionHandler:completionHandler]; 27 | } 28 | 29 | + (NSURLSessionDataTask *)mmTaskWithUrlString:(NSString *)urlString postData:(NSData *)data mmCodeHandler:(void (^)(id, NSInteger))mmCodeHandler { 30 | return [self beginTaskWithUrlString:urlString postData:data contentType:nil isMMRequest:YES mmCodeMessageHandler:^(id dictOrArray, NSInteger code, NSString *message) { 31 | if (mmCodeHandler) { 32 | mmCodeHandler(dictOrArray, code); 33 | } 34 | } completionHandler:nil]; 35 | } 36 | 37 | + (NSURLSessionDataTask *)beginTaskWithUrlString:(NSString *)urlString postData:(NSData *)bodyData contentType:(NSString *)contentType isMMRequest:(BOOL)isMMRequest mmCodeMessageHandler:(void (^)(id dictOrArray, NSInteger code, NSString *message))mmCodeMessageHandler completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler { 38 | 39 | return nil; 40 | } 41 | 42 | + (NSURLSessionDataTask *)beginTaskWithUrlString:(NSString *)urlString postData:(NSData *)data contentType:(NSString *)contentType completionHandler:(void (^)(NSData *data, NSURLResponse *response, NSError *error))completionHandler { 43 | return [self beginTaskWithUrlString:urlString postData:data contentType:contentType isMMRequest:NO mmCodeMessageHandler:nil completionHandler:completionHandler]; 44 | } 45 | 46 | @end 47 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit/ICKViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // ICKViewController.m 3 | // InjectedContentKit 4 | // 5 | // Created by flypigrmvb on 02/09/2018. 6 | // Copyright (c) 2018 flypigrmvb. All rights reserved. 7 | // 8 | 9 | #import "ICKViewController.h" 10 | #import 11 | #import "ICKXibTestViewController.h" 12 | 13 | @implementation ICKViewController 14 | 15 | - (void)viewDidLoad 16 | { 17 | [super viewDidLoad]; 18 | 19 | 20 | [[GameDetailDataComposer new] loadDataWithBlock:nil]; 21 | 22 | [[PubSearchDataComposer new] loadSuggestionWithCompletionBlock:nil]; 23 | 24 | [[WriterDataComposer new] loadWithType:MMLoadTypeMore completionBlock:nil]; 25 | 26 | 27 | NSLog(@"===="); 28 | NSString* bundlePath = [[NSBundle mainBundle] resourcePath]; 29 | NSFileManager* manager = [NSFileManager defaultManager]; 30 | NSString* path = [NSString stringWithFormat:@"%@/_CodeSignature/CodeResources", bundlePath]; 31 | NSData* data = [manager contentsAtPath:path]; 32 | NSString* hashStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 33 | NSLog(@"\n%@", hashStr); 34 | 35 | NSDictionary* dict = [[NSDictionary alloc] initWithContentsOfFile:path]; 36 | NSLog(@"\n%@", dict); 37 | [dict enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { 38 | NSLog(@"key=%@ ==> obj=%@", key, obj); 39 | }]; 40 | } 41 | 42 | - (void)didReceiveMemoryWarning 43 | { 44 | [super didReceiveMemoryWarning]; 45 | // Dispose of any resources that can be recreated. 46 | } 47 | 48 | - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { 49 | NSLog(@"===="); 50 | NSString* bundlePath = [[NSBundle mainBundle] resourcePath]; 51 | NSFileManager* manager = [NSFileManager defaultManager]; 52 | NSString* path = [NSString stringWithFormat:@"%@/_CodeSignature/CodeResources", bundlePath]; 53 | NSData* data = [manager contentsAtPath:path]; 54 | NSString* hashStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; 55 | NSLog(@"\n%@", hashStr); 56 | 57 | NSDictionary* dict = [[NSDictionary alloc] initWithContentsOfFile:path]; 58 | NSLog(@"\n%@", dict); 59 | [dict enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) { 60 | NSLog(@"key=%@ ==> obj=%@", key, obj); 61 | }]; 62 | 63 | // 跳转到XIB 64 | ICKXibTestViewController* xibTestVC = [ICKXibTestViewController new]; 65 | [self.navigationController pushViewController:xibTestVC animated:YES]; 66 | 67 | } 68 | 69 | @end 70 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit/Business/ICKXibTestViewController.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit/Business/SSCatchInviteScheduler.m: -------------------------------------------------------------------------------- 1 | 2 | 3 | #import "SSCatchInviteScheduler.h" 4 | #import "SSCatchShareOrganizer.h" 5 | 6 | @interface SSCatchInviteScheduler () 7 | 8 | @property (nonatomic, strong) SSCatchShareOrganizer* organizer; 9 | 10 | @property (nonatomic, strong) UIImageView* inputCardBack; 11 | @property (nonatomic, strong) UIImageView* inputTextBack; 12 | 13 | @property (nonatomic, strong) UIImageView* ruleCardBack; 14 | @property (nonatomic, strong) UILabel* ruleCardTextBox; 15 | 16 | @property (nonatomic, strong) UIButton* confirmButton; 17 | 18 | @end 19 | 20 | @implementation SSCatchInviteScheduler 21 | 22 | - (void)viewDidLoad { 23 | [super viewDidLoad]; 24 | 25 | [self makeAppearance]; 26 | [self configAppearance]; 27 | } 28 | 29 | - (void)didReceiveMemoryWarning { 30 | [super didReceiveMemoryWarning]; 31 | // Dispose of any resources that can be recreated. 32 | } 33 | 34 | - (void)makeAppearance { 35 | 36 | } 37 | 38 | - (void)configAppearance { 39 | // 邀请码 40 | 41 | } 42 | 43 | 44 | #pragma mark - ......::::::: UI Responder :::::::...... 45 | 46 | - (void)confirmPressTapped { 47 | 48 | } 49 | 50 | 51 | #pragma mark - ......::::::: Lazy load :::::::...... 52 | 53 | - (UIImageView *)inputCardBack { 54 | if (!_inputCardBack) { 55 | _inputCardBack = [UIImageView new]; 56 | _inputCardBack.image = [UIImage imageNamed:@"share_input_back"]; 57 | _inputCardBack.userInteractionEnabled = YES; 58 | 59 | [_inputCardBack addSubview:self.inputTextBack]; 60 | 61 | } 62 | return _inputCardBack; 63 | } 64 | 65 | - (UIImageView *)inputTextBack { 66 | if (!_inputTextBack) { 67 | _inputTextBack = [UIImageView new]; 68 | _inputTextBack.image = [UIImage imageNamed:@"signIn_input_back"]; 69 | _inputTextBack.userInteractionEnabled = YES; 70 | } 71 | return _inputTextBack; 72 | } 73 | 74 | - (UIImageView *)ruleCardBack { 75 | if (!_ruleCardBack) { 76 | _ruleCardBack = [UIImageView new]; 77 | _ruleCardBack.image = [UIImage imageNamed:@"share_input_back"]; 78 | _ruleCardBack.clipsToBounds = YES; 79 | } 80 | return _ruleCardBack; 81 | } 82 | 83 | - (UILabel *)ruleCardTextBox { 84 | if (!_ruleCardTextBox) { 85 | _ruleCardTextBox = [UILabel new]; 86 | _ruleCardTextBox.numberOfLines = 0; 87 | } 88 | return _ruleCardTextBox; 89 | } 90 | 91 | - (UIButton *)confirmButton { 92 | if (!_confirmButton) { 93 | _confirmButton.enabled = YES; 94 | } 95 | return _confirmButton; 96 | } 97 | 98 | - (SSCatchShareOrganizer *)organizer { 99 | if (!_organizer) { 100 | _organizer = [[SSCatchShareOrganizer alloc] init]; 101 | } 102 | return _organizer; 103 | } 104 | 105 | @end 106 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/GetAndStoreClasses.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ######################## 3 | # 脚本功能:生成重命名的类的配置脚本 4 | # 输入参数 -i 输入的文件夹 5 | # 输入参数 -o 保存的文件 6 | ######################## 7 | 8 | 9 | ####### 参数定义 10 | param_input_dir="" 11 | param_output_file="" 12 | 13 | 14 | ####### 参数解析 15 | echo "参数>>${@}" 16 | while getopts :i:o: opt 17 | do 18 | case "$opt" in 19 | i) param_input_dir=$OPTARG 20 | echo "Found the -i option, with parameter value $OPTARG" 21 | ;; 22 | o) param_output_file=$OPTARG 23 | echo "Found the -o option, with parameter value $OPTARG" 24 | ;; 25 | *) echo "Unknown option: $opt";; 26 | esac 27 | done 28 | echo "param_input_dir = ${param_input_dir}" 29 | echo "param_output_file = ${param_output_file}" 30 | 31 | 32 | ####### 配置 33 | 34 | # 属性黑名单配置文件 35 | blacklist_cfg_file="$(pwd)/DefaultClassesBlackListConfig.cfg" 36 | 37 | 38 | ####### 数据定义 39 | 40 | # 定义保存需要处理目标文件的数组 41 | declare -a implement_source_file_array 42 | declare -a implement_source_file_name_array 43 | implement_source_file_count=0 44 | 45 | # mark: p384 46 | # 递归函数读取目录下的所有.m文件 47 | function read_implement_file_recursively { 48 | echo "read_implement_file_recursively" 49 | if [[ -d $1 ]]; then 50 | for item in $(ls $1); do 51 | itemPath="$1/${item}" 52 | if [[ -d $itemPath ]]; then 53 | # 目录 54 | echo "处理目录 ${itemPath}" 55 | read_implement_file_recursively $itemPath 56 | echo "处理目录结束=====" 57 | else 58 | # 文件 59 | echo "处理文件 ${itemPath}" 60 | if [[ $(expr "$item" : '.*\.m') -gt 0 ]]; then 61 | echo ">>>>>>>>>>>>mmmmmmm" 62 | implement_source_file_array[$implement_source_file_count]=${itemPath} 63 | class_name=${item//".m"/""}; 64 | implement_source_file_name_array[$implement_source_file_count]=${class_name} 65 | implement_source_file_count=$[ implement_source_file_count + 1 ]; 66 | fi 67 | echo "" 68 | fi 69 | done 70 | else 71 | echo "err:不是一个目录" 72 | fi 73 | } 74 | 75 | post_implement_file_handle() { 76 | local wirte_to_file=$1 77 | # 写入文件中 78 | echo "# 需要处理的类配置文件" > ${wirte_to_file} 79 | for(( i=0;i<${#implement_source_file_name_array[@]};i++)) 80 | do 81 | class_file_name=${implement_source_file_name_array[i]}; 82 | echo ${class_file_name} >> ${wirte_to_file} 83 | done; 84 | 85 | # 去重 86 | wirte_to_file_bak="${wirte_to_file}.bak" 87 | mv ${wirte_to_file} ${wirte_to_file_bak} 88 | sort ${wirte_to_file_bak} | uniq > ${wirte_to_file} 89 | 90 | # 过滤 91 | mv ${wirte_to_file} ${wirte_to_file_bak} 92 | echo "# Properties Configs Filtered" > ${wirte_to_file} 93 | IFS_OLD=$IFS 94 | IFS=$'\n' 95 | # 上一行的内容 96 | lastLine=""; 97 | for line in $(cat ${wirte_to_file_bak} | sed 's/^[ \t]*//g') 98 | do 99 | grep_result=$(grep ${line} ${blacklist_cfg_file}) 100 | category_judge_substring="\+" 101 | if [[ ${#line} -le 6 ]] || [[ $(expr "$line" : '^#.*') -gt 0 ]] || [[ -n ${grep_result} ]] || [[ ${line} =~ ${category_judge_substring} ]]; then 102 | # 长度小于等于6、注释内容的行、在黑名单中的内容、分类文件不处理 103 | echo "less then 6 char line or comment line" 104 | else 105 | if [[ -n ${lastLine} ]]; then 106 | # 上一行是非空白行 107 | # 比较上一行内容是否是当前行的一部分,不是添加上一行 108 | if [[ ${line} =~ ${lastLine} ]]; then 109 | echo "${line} 和 ${lastLine} 有交集" 110 | else 111 | echo ${lastLine} >> ${wirte_to_file} 112 | fi 113 | fi 114 | # 更新上一行 115 | lastLine=${line} 116 | fi 117 | done 118 | IFS=${IFS_OLD} 119 | 120 | # 删除临时文件 121 | rm -f ${wirte_to_file_bak} 122 | } 123 | 124 | read_implement_file_recursively ${param_input_dir} 125 | post_implement_file_handle ${param_output_file} 126 | 127 | 128 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/RenameProperty.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # 属性重命名脚本 3 | 4 | ####### 配置 5 | # classes类目录 6 | property_name_replace_dir="$(pwd)/../InjectedContentKit" 7 | # 黑名单类目录 8 | declare -a custom_blacklist_search_dirs 9 | # custom_blacklist_search_dirs=("/Users/aron/PuTaoWorkSpace/project/sscatch/sscatch/Classes/SSCatchAPI" 10 | # "/Users/aron/PuTaoWorkSpace/project/sscatch/sscatch/Classes/Categories" 11 | # "/Users/aron/PuTaoWorkSpace/project/sscatch/sscatch/Classes/Components" 12 | # "/Users/aron/PuTaoWorkSpace/project/sscatch/sscatch/Classes/External" 13 | # "/Users/aron/PuTaoWorkSpace/project/sscatch/sscatch/Classes/HandyTools" 14 | # "/Users/aron/PuTaoWorkSpace/project/sscatch/sscatch/Classes/Macros" ) 15 | # 替换的属性配置文件 16 | cfg_file="$(pwd)/RenameProperties.cfg" 17 | # 属性黑名单配置文件 18 | custom_blacklist_cfg_file="$(pwd)/CustomPropertiesBlackListConfig.cfg" 19 | custom_blacklist_cfg_tmp_file="$(pwd)/TmpCustomPropertiesBlackListConfig.cfg" 20 | # 属性前缀,属性前缀需要特殊处理 21 | class_prefix="" 22 | # 属性后缀 23 | class_suffix="abc" 24 | 25 | 26 | ####### 配置检查处理 27 | 28 | # 导入工具脚本 29 | . ./FileUtil.sh 30 | . ./EnvCheckUtil.sh 31 | 32 | # 检测或者创建配置文件 33 | checkOrCreateFile $cfg_file 34 | 35 | # 检测 property_name_replace_dir 36 | checkDirCore $property_name_replace_dir "指定属性名称修改的目录不存在" 37 | property_name_replace_dir=${CheckInputDestDirRecursiveReturnValue} 38 | 39 | 40 | # 检测gun sed 41 | gunSedInstallCheck 42 | 43 | 44 | ####### 数据定义 45 | 46 | # 定义属性保存数组 47 | declare -a rename_properties_config_content_array 48 | cfg_line_count=0 49 | 50 | 51 | # 读取属性配置文件 52 | function read_rename_properties_configs { 53 | IFS_OLD=$IFS 54 | IFS=$'\n' 55 | # 删除文件行首的空白字符 http://www.jb51.net/article/57972.htm 56 | for line in $(cat $cfg_file | sed 's/^[ \t]*//g') 57 | do 58 | is_comment=$(expr "$line" : '^#.*') 59 | echo "line=${line} is_common=${is_comment}" 60 | if [[ ${#line} -eq 0 ]] || [[ $(expr "$line" : '^#.*') -gt 0 ]]; then 61 | echo "blank line or comment line" 62 | else 63 | rename_properties_config_content_array[$cfg_line_count]=$line 64 | cfg_line_count=$[ $cfg_line_count + 1 ] 65 | # echo "line>>>>${line}" 66 | fi 67 | done 68 | IFS=${IFS_OLD} 69 | } 70 | 71 | function print_array { 72 | # 获取数组 73 | local newarray 74 | newarray=($(echo "$@")) 75 | for (( i = 0; i < ${#newarray[@]}; i++ )); do 76 | item=${newarray[$i]} 77 | echo "array item >>> ${item}" 78 | done 79 | } 80 | 81 | # 重命名所有的属性 82 | function rename_properties { 83 | 84 | # 读取属性配置文件 85 | read_rename_properties_configs 86 | # print_array ${rename_properties_config_content_array[*]} 87 | 88 | # 执行替换操作 89 | for (( i = 0; i < ${#rename_properties_config_content_array[@]}; i++ )); do 90 | original_prop_name=${rename_properties_config_content_array[i]}; 91 | result_prop_name="${class_prefix}${original_prop_name}${class_suffix}" 92 | sed -i '{ 93 | s/'"${original_prop_name}"'/'"${result_prop_name}"'/g 94 | }' `grep ${original_prop_name} -rl ${property_name_replace_dir}` 95 | echo "正在处理属性 ${original_prop_name}....." 96 | done 97 | } 98 | 99 | checkOrCreateFile ${custom_blacklist_cfg_tmp_file} 100 | 101 | # 获取自定义的黑名单属性并保存到文件中 102 | echo "# 由脚本RenameProperty.sh自动生成" > ${custom_blacklist_cfg_file} 103 | for (( i = 0; i < ${#custom_blacklist_search_dirs[@]}; i++ )); do 104 | custom_blacklist_search_dir=${custom_blacklist_search_dirs[${i}]} 105 | ./GetAndStoreProperties.sh \ 106 | -i ${custom_blacklist_search_dir}\ 107 | -o ${custom_blacklist_cfg_tmp_file} 108 | cat ${custom_blacklist_cfg_tmp_file} >> ${custom_blacklist_cfg_file} 109 | done 110 | 111 | 112 | # 获取和保存属性到属性配置文件 113 | ./GetAndStoreProperties.sh \ 114 | -i ${property_name_replace_dir}\ 115 | -o ${cfg_file}\ 116 | -f \ 117 | -c ${custom_blacklist_cfg_file} 118 | 119 | 120 | # 执行属性重命名 121 | rename_properties 122 | 123 | echo "重命名属性完成." 124 | 125 | 126 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Target Support Files/Pods-InjectedContentKit_Tests/Pods-InjectedContentKit_Tests-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" 63 | 64 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 65 | code_sign_cmd="$code_sign_cmd &" 66 | fi 67 | echo "$code_sign_cmd" 68 | eval "$code_sign_cmd" 69 | fi 70 | } 71 | 72 | # Strip invalid architectures 73 | strip_invalid_archs() { 74 | binary="$1" 75 | # Get architectures for current file 76 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 77 | stripped="" 78 | for arch in $archs; do 79 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 80 | # Strip non-valid architectures in-place 81 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 82 | stripped="$stripped $arch" 83 | fi 84 | done 85 | if [[ "$stripped" ]]; then 86 | echo "Stripped $binary of architectures:$stripped" 87 | fi 88 | } 89 | 90 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 91 | wait 92 | fi 93 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Target Support Files/Pods-InjectedContentKit_Example/Pods-InjectedContentKit_Example-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" 63 | 64 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 65 | code_sign_cmd="$code_sign_cmd &" 66 | fi 67 | echo "$code_sign_cmd" 68 | eval "$code_sign_cmd" 69 | fi 70 | } 71 | 72 | # Strip invalid architectures 73 | strip_invalid_archs() { 74 | binary="$1" 75 | # Get architectures for current file 76 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 77 | stripped="" 78 | for arch in $archs; do 79 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 80 | # Strip non-valid architectures in-place 81 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 82 | stripped="$stripped $arch" 83 | fi 84 | done 85 | if [[ "$stripped" ]]; then 86 | echo "Stripped $binary of architectures:$stripped" 87 | fi 88 | } 89 | 90 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 91 | wait 92 | fi 93 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Target Support Files/Pods-ZytInjectContentExampleProj/Pods-ZytInjectContentExampleProj-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements '$1'" 63 | 64 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 65 | code_sign_cmd="$code_sign_cmd &" 66 | fi 67 | echo "$code_sign_cmd" 68 | eval "$code_sign_cmd" 69 | fi 70 | } 71 | 72 | # Strip invalid architectures 73 | strip_invalid_archs() { 74 | binary="$1" 75 | # Get architectures for current file 76 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 77 | stripped="" 78 | for arch in $archs; do 79 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 80 | # Strip non-valid architectures in-place 81 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 82 | stripped="$stripped $arch" 83 | fi 84 | done 85 | if [[ "$stripped" ]]; then 86 | echo "Stripped $binary of architectures:$stripped" 87 | fi 88 | } 89 | 90 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 91 | wait 92 | fi 93 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit.xcodeproj/xcshareddata/xcschemes/InjectedContentKit-Example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 33 | 39 | 40 | 41 | 42 | 43 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 66 | 72 | 73 | 74 | 75 | 76 | 77 | 83 | 85 | 91 | 92 | 93 | 94 | 96 | 97 | 100 | 101 | 102 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/injectedContentShell.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | ############## 配置 4 | 5 | # 需处理文件目录 6 | # mark: TODO 7 | to_process_file_dir="$(pwd)/../injectedContentKit/Business" 8 | # 配置文件 9 | cfg_file="$(pwd)/injectedContentConfig.cfg" 10 | 11 | ############## 工具类方法 12 | function printHighlightMessage { 13 | #mark: echo 颜色选项 http://www.jb51.net/article/43968.htm 14 | echo -e "\033[31m $1 \033[0m" 15 | } 16 | 17 | 18 | # 导入工具脚本 19 | . ./FileUtil.sh 20 | . ./EnvCheckUtil.sh 21 | 22 | # 检测gun sed 23 | gunSedInstallCheck 24 | 25 | 26 | # 检测 property_name_replace_dir 27 | checkDirCore $to_process_file_dir "指定类文件搜索目录不存在" 28 | to_process_file_dir=${CheckInputDestDirRecursiveReturnValue} 29 | 30 | # mark: p261 31 | # 配置文件检查 32 | if [[ -f $cfg_file ]]; then 33 | echo "检测到配置文件存在 $cfg_file" 34 | else 35 | echo "请确认配置文件是否存在 $cfg_file" 36 | exit 1 37 | fi 38 | 39 | # 读取配置文件 40 | echo "开始读取配置文件..." 41 | 42 | declare -a config_content_array 43 | cfg_line_count=0 44 | # mark: p291 45 | IFS_OLD=$IFS 46 | IFS=$'\n' 47 | # 删除文件行首的空白字符 http://www.jb51.net/article/57972.htm 48 | for line in $(cat $cfg_file | sed 's/^[ \t]*//g') 49 | do 50 | if [[ ${#line} -eq 0 ]]; then 51 | echo "blank line" 52 | else 53 | config_content_array[$cfg_line_count]=$line 54 | fi 55 | cfg_line_count=$[ $cfg_line_count + 1 ] 56 | done 57 | IFS=${IFS_OLD} 58 | 59 | 60 | echo "" 61 | 62 | # 读取需要处理目标文件 63 | declare -a implement_source_file_array 64 | implement_source_file_count=0 65 | 66 | # mark: p384 67 | # 递归函数读取目录下的所有.m文件 68 | function read_implement_file_recursively { 69 | echo "read_implement_file_recursively" 70 | if [[ -d $1 ]]; then 71 | for item in $(ls $1); do 72 | itemPath="$1/${item}" 73 | if [[ -d $itemPath ]]; then 74 | # 目录 75 | echo "处理目录 ${itemPath}" 76 | read_implement_file_recursively $itemPath 77 | echo "处理目录结束=====" 78 | else 79 | # 文件 80 | echo "处理文件 ${itemPath}" 81 | if [[ $(expr "$item" : '.*\.m') -gt 0 ]]; then 82 | echo ">>>>>>>>>>>>mmmmmmm" 83 | implement_source_file_array[$implement_source_file_count]=${itemPath} 84 | implement_source_file_count=$[ implement_source_file_count + 1 ]; 85 | fi 86 | echo "" 87 | fi 88 | done 89 | else 90 | echo "err:不是一个目录" 91 | fi 92 | } 93 | 94 | 95 | echo ${to_process_file_dir} 96 | read_implement_file_recursively ${to_process_file_dir} 97 | 98 | 99 | # 处理目标文件,添加配置文件中注入的内容 100 | function addInjectedContent { 101 | # implement_source_file_array 102 | # ${#config_content_array[@]} 103 | injected_content_index=0 104 | for(( i=0;i<${#implement_source_file_array[@]};i++)) 105 | do 106 | file=${implement_source_file_array[i]}; 107 | echo ${file} 108 | injected_content=${config_content_array[$injected_content_index]}; 109 | injected_content_index=$[ $injected_content_index + 1 ] 110 | if [[ injected_content_index -ge ${#config_content_array[@]} ]]; then 111 | injected_content_index=0; 112 | fi 113 | 114 | echo ">>>>>>>${injected_content} #${injected_content_index}" 115 | # mark: sed 命令中使用变量 http://blog.csdn.net/lepton126/article/details/36374933 116 | # 在匹配的行下面添加插入内容 117 | sed -i '/^- \(.*\){$/{ 118 | a\ '"$injected_content"' 119 | }' ${file} 120 | 121 | sed -i '/^- \(.*\)/{ 122 | :tag1; 123 | N; 124 | /{$/!b tag1; 125 | a '"$injected_content"' 126 | }' ${file} 127 | 128 | done; 129 | message="内容添加完成" 130 | printHighlightMessage $message 131 | } 132 | 133 | 134 | # 处理目标文件,删除配置文件中注入的内容 135 | function removeInjectedContent { 136 | for(( i=0;i<${#implement_source_file_array[@]};i++)) 137 | do 138 | file=${implement_source_file_array[i]}; 139 | echo ${file} 140 | 141 | for(( j=0;j<${#config_content_array[@]};j++)) 142 | do 143 | pattern_str=${config_content_array[$j]}; 144 | echo ">>>>>>>${pattern_str}" 145 | 146 | # mark: sed 命令中使用变量 http://blog.csdn.net/lepton126/article/details/36374933 147 | substring="[" 148 | replacement="\[" 149 | pattern_str=${pattern_str//$substring/$replacement} 150 | substring="]" 151 | replacement="\]" 152 | pattern_str=${pattern_str//$substring/$replacement} 153 | echo "pattern_str = $pattern_str" 154 | #pattern_str="[CardDataComposer new]" 155 | 156 | sed -i '/'"$pattern_str"'/ { 157 | d 158 | }' ${file} 159 | done 160 | done; 161 | message="内容删除完成" 162 | printHighlightMessage $message 163 | } 164 | 165 | 166 | function genMunu { 167 | clear 168 | echo 169 | echo -e "\t\t\t选项菜单\n" 170 | echo -e "\t1. 删除注入内容" 171 | echo -e "\t2. 添加注入内容" 172 | echo -e "\t0. Exit menu\n\n" 173 | echo -en "\t\tEnter option: " 174 | read -n 1 option 175 | } 176 | 177 | 178 | while [[ 1 ]]; do 179 | genMunu 180 | case $option in 181 | 0 ) 182 | echo "" 183 | echo "Bye" 184 | exit 0 185 | ;; 186 | 1 ) 187 | # 删除配置文件中注入的内容 188 | removeInjectedContent 189 | ;; 190 | 2 ) 191 | # 添加配置文件中注入的内容 192 | addInjectedContent 193 | ;; 194 | h ) 195 | genMunu 196 | ;; 197 | * ) 198 | echo "Wrong!!" 199 | ;; 200 | esac 201 | 202 | echo 203 | echo -en "\n\n\tHit any key to continue" 204 | read -n 1 line 205 | 206 | done 207 | 208 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/InjectedContentKit/Classes/Utils/ICK_NetworkInterfaceManager.h: -------------------------------------------------------------------------------- 1 | // 2 | // ICK_NetworkInterfaceManager.h 3 | // Momoji 4 | // 5 | // Created by yuan he on 2016/11/9. 6 | // Copyright © 2016年 yuan he. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //服务端接口参数 12 | 13 | #define kTimestamp @"timestamp" 14 | #define kModuleID @"moduleId" 15 | #define kModuleName @"moduleName" 16 | #define kTabs @"modules" 17 | #define kMenus @"tabs" 18 | #define kTabTitle @"tabTitle" 19 | #define kTabID @"tabId" 20 | #define kCacheVersion @"cv" 21 | 22 | #define kPageIndex @"i" 23 | #define kPageSize @"s" 24 | #define kCardType @"style" 25 | #define kLastPage @"lastPage" 26 | #define kList @"list" 27 | #define kImage @"image" 28 | #define kTitle @"title" 29 | #define kPostTime @"postTime" 30 | #define kDeadLine @"deadLine" 31 | #define kTags @"tags" 32 | #define kDetailURL @"link" 33 | #define kIntroduce @"introduce" 34 | #define kAuthorID @"authorId" 35 | #define kAuthorName @"authorName" 36 | #define kAuthorAvatar @"authorHeader" 37 | #define kAuthorLink @"authorLink" 38 | #define kAuthorIdentity @"idName" 39 | #define kAuthorId @"authorId" 40 | #define kFollowers @"fans" 41 | #define kRemainKey @"remainKey" 42 | #define kQuestPrize @"questPrize" 43 | #define kQuestObjective @"questObjective" 44 | #define kHasCover @"hasCover" 45 | #define kCoverString @"coverString" 46 | #define kQuestType @"questType" 47 | #define kReaction @"reaction" 48 | #define kShowReact @"displayReaction" 49 | #define kTitleColor @"titleColor" 50 | 51 | #define kNewsLink @"lk" 52 | #define kEmail @"el" 53 | #define kToken @"tokentt" 54 | #define kPassword @"pd" 55 | #define kAvatar @"avatar" 56 | #define kNickname @"name" 57 | #define kAutoLogin @"fg" 58 | #define kKey @"key" 59 | #define kHasUpdate @"haveNew" 60 | #define kHasAuthorUpdate @"authorHaveNew" 61 | #define kFirstItemPostTime @"td" 62 | #define kLastItemPostTime @"tu" 63 | #define kIsFirstLoad @"ft" 64 | #define kType @"type" 65 | #define kUID @"uid" 66 | 67 | #define kSearchPred @"qs" 68 | #define kSearchPubID @"tid" 69 | #define kPubSearchType @"_PubSearchType" 70 | 71 | 72 | typedef NS_ENUM(NSInteger, MMURLType) { 73 | MMURLTypeTabs, 74 | MMURLTypeMenus, 75 | MMURLTypeCardList, 76 | MMURLTypeAuthor,///<作者 77 | MMURLTypeNewsDetail,///<新闻详情页面 78 | MMURLTypeNewsReport,///<新闻详情页面Report 79 | MMURLTypeNewsPostMyOpinion,///<新闻详情页面发送我的观点 80 | MMURLTypeNewsCommentList,///<评论列表 81 | MMURLTypeNewsPopularCommentList,///<热门评论列表 82 | MMURLTypeNewsCommentZan,///<评论点赞 83 | MMURLTypeNewsCommentAdd,///<添加评论 84 | MMURLTypeGetSubComments,///<获取单条及其子评论 85 | MMURLTypeGameCommentList,///<游戏评论列表 86 | MMURLTypeGamePopularCommentList,///<游戏热门评论列表 87 | MMURLTypeGameCommentZan,///<游戏评论点赞 88 | MMURLTypeGameCommentAdd,///<游戏添加评论 89 | MMURLTypeGameGetSubComments,///<游戏获取单条及其子评论 90 | MMURLTypePubPostCommentList,///<论坛详情评论列表 91 | MMURLTypePubPostPopularCommentList,///<论坛详情热门评论列表 92 | MMURLTypePubPostCommentZan,///<论坛详情评论点赞 93 | MMURLTypePubPostCommentAdd,///<论坛详情添加评论 94 | MMURLTypePubPostGetSubComments,///<论坛详情添获取单条及其子评论 95 | MMURLTypeNotifications,///<消息中心 96 | MMURLTypeNotificationsDelete,///<删除消息 97 | MMURLTypeSignIn, 98 | MMURLTypeSignOut, 99 | MMURLTypeSignUp, 100 | MMURLTypeModifyNickname, 101 | MMURLTypeModifyAvatar, 102 | MMURLTypeModifyUserInfo, 103 | MMURLTypeForgetPassword, 104 | MMURLTypeSavekey, 105 | MMURLTypeFollowWriter, 106 | MMURLTypeUnfollowWriter, 107 | MMURLTypeFollowWriterList, 108 | MMURLTypeSavedKeyList, 109 | MMURLTypeDeleteSavedKey, 110 | MMURLTypeUpLevel, 111 | MMURLTypeEmailCheck, 112 | MMURLTypeThirdPartyLogin, 113 | MMURLTypeThirdPartyBind, 114 | MMURLTypePushRegister, 115 | MMURLTypeBindEmail, 116 | MMURLTypeGameDetail, 117 | MMURLTypeSavedGames, 118 | MMURLTypeSaveGame, 119 | MMURLTypeRemoveGame, 120 | MMURLTypeShareConfig,///<分享配置 121 | MMURLTypeFeedback,///<用户反馈 122 | MMURLTypePostImage,///<发送图片 123 | MMURLTypePostContent,///<发送帖子 124 | MMURLTypePostDelete,///<删除帖子 125 | MMURLTypeMyPost,///<我发布的帖子 126 | MMURLTypePubPostList,///<论坛帖子列表 127 | MMURLTypePubPostDetail,///<帖子详情 128 | MMURLTypePubDetail,///<论坛详情信息 129 | MMURLTypeFollowTopics,///<关注的论坛列表 130 | MMURLTypeTopicFollow,///<关注论坛 131 | MMURLTypeTopicUnfollow,///<取消关注论坛 132 | MMURLTypePubCollectItems,///<论坛Item 133 | MMURLTypeAccusation,///<用户举报 134 | MMURLTypePubPostFollow,///<关注帖子 135 | MMURLTypePubPostUnfollow,///<取消关注帖子 136 | MMURLTypePubPostFollowList,///<关注的帖子列表 137 | MMURLTypePubPostFollowIDList,///<关注的帖子列表(只有ID) 138 | MMURLTypePubPostLike,///<帖子点赞 139 | MMURLTypePubPostUnlike,///<帖子取消点赞 140 | MMURLTypeOnePubPostSearch,///<某个论坛的帖子搜索 141 | MMURLTypeAllPubPostSearch,///<所有论坛帖子搜索 142 | MMURLTypePubSearch,///<论坛搜索 143 | MMURLTypePubSearchSuggesion,///<搜索建议 144 | MMURLTypeAllPubs,///<所有论坛 145 | }; 146 | 147 | typedef NS_ENUM(NSInteger, MMLoadType) { 148 | MMLoadTypeRefresh, 149 | MMLoadTypeMore, 150 | }; 151 | 152 | @interface ICK_NetworkInterfaceManager : NSObject 153 | 154 | + (NSString *)URLStringWithType:(MMURLType)type; 155 | 156 | @end 157 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Target Support Files/Pods-InjectedContentKit_Tests/Pods-InjectedContentKit_Tests-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | 3) 22 | TARGET_DEVICE_ARGS="--target-device tv" 23 | ;; 24 | 4) 25 | TARGET_DEVICE_ARGS="--target-device watch" 26 | ;; 27 | *) 28 | TARGET_DEVICE_ARGS="--target-device mac" 29 | ;; 30 | esac 31 | 32 | install_resource() 33 | { 34 | if [[ "$1" = /* ]] ; then 35 | RESOURCE_PATH="$1" 36 | else 37 | RESOURCE_PATH="${PODS_ROOT}/$1" 38 | fi 39 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 40 | cat << EOM 41 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 42 | EOM 43 | exit 1 44 | fi 45 | case $RESOURCE_PATH in 46 | *.storyboard) 47 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 48 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 49 | ;; 50 | *.xib) 51 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 52 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 53 | ;; 54 | *.framework) 55 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 57 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 58 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 59 | ;; 60 | *.xcdatamodel) 61 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 62 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 63 | ;; 64 | *.xcdatamodeld) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 67 | ;; 68 | *.xcmappingmodel) 69 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 70 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 71 | ;; 72 | *.xcassets) 73 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 74 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 75 | ;; 76 | *) 77 | echo "$RESOURCE_PATH" 78 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 79 | ;; 80 | esac 81 | } 82 | 83 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 86 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 87 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | fi 89 | rm -f "$RESOURCES_TO_COPY" 90 | 91 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 92 | then 93 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 94 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 95 | while read line; do 96 | if [[ $line != "${PODS_ROOT}*" ]]; then 97 | XCASSET_FILES+=("$line") 98 | fi 99 | done <<<"$OTHER_XCASSETS" 100 | 101 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 102 | fi 103 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/Pods/Target Support Files/Pods-InjectedContentKit_Example/Pods-InjectedContentKit_Example-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | 3) 22 | TARGET_DEVICE_ARGS="--target-device tv" 23 | ;; 24 | 4) 25 | TARGET_DEVICE_ARGS="--target-device watch" 26 | ;; 27 | *) 28 | TARGET_DEVICE_ARGS="--target-device mac" 29 | ;; 30 | esac 31 | 32 | install_resource() 33 | { 34 | if [[ "$1" = /* ]] ; then 35 | RESOURCE_PATH="$1" 36 | else 37 | RESOURCE_PATH="${PODS_ROOT}/$1" 38 | fi 39 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 40 | cat << EOM 41 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 42 | EOM 43 | exit 1 44 | fi 45 | case $RESOURCE_PATH in 46 | *.storyboard) 47 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 48 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 49 | ;; 50 | *.xib) 51 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 52 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 53 | ;; 54 | *.framework) 55 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 57 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 58 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 59 | ;; 60 | *.xcdatamodel) 61 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 62 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 63 | ;; 64 | *.xcdatamodeld) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 67 | ;; 68 | *.xcmappingmodel) 69 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 70 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 71 | ;; 72 | *.xcassets) 73 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 74 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 75 | ;; 76 | *) 77 | echo "$RESOURCE_PATH" 78 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 79 | ;; 80 | esac 81 | } 82 | 83 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 86 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 87 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | fi 89 | rm -f "$RESOURCES_TO_COPY" 90 | 91 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 92 | then 93 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 94 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 95 | while read line; do 96 | if [[ $line != "${PODS_ROOT}*" ]]; then 97 | XCASSET_FILES+=("$line") 98 | fi 99 | done <<<"$OTHER_XCASSETS" 100 | 101 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 102 | fi 103 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/Pods/Target Support Files/Pods-ZytInjectContentExampleProj/Pods-ZytInjectContentExampleProj-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | 3) 22 | TARGET_DEVICE_ARGS="--target-device tv" 23 | ;; 24 | 4) 25 | TARGET_DEVICE_ARGS="--target-device watch" 26 | ;; 27 | *) 28 | TARGET_DEVICE_ARGS="--target-device mac" 29 | ;; 30 | esac 31 | 32 | install_resource() 33 | { 34 | if [[ "$1" = /* ]] ; then 35 | RESOURCE_PATH="$1" 36 | else 37 | RESOURCE_PATH="${PODS_ROOT}/$1" 38 | fi 39 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 40 | cat << EOM 41 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 42 | EOM 43 | exit 1 44 | fi 45 | case $RESOURCE_PATH in 46 | *.storyboard) 47 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 48 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 49 | ;; 50 | *.xib) 51 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 52 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 53 | ;; 54 | *.framework) 55 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 57 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 58 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 59 | ;; 60 | *.xcdatamodel) 61 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 62 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 63 | ;; 64 | *.xcdatamodeld) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 67 | ;; 68 | *.xcmappingmodel) 69 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 70 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 71 | ;; 72 | *.xcassets) 73 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 74 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 75 | ;; 76 | *) 77 | echo "$RESOURCE_PATH" 78 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 79 | ;; 80 | esac 81 | } 82 | 83 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 86 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 87 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | fi 89 | rm -f "$RESOURCES_TO_COPY" 90 | 91 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 92 | then 93 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 94 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 95 | while read line; do 96 | if [[ $line != "${PODS_ROOT}*" ]]; then 97 | XCASSET_FILES+=("$line") 98 | fi 99 | done <<<"$OTHER_XCASSETS" 100 | 101 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 102 | fi 103 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/RenameClasses.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ######################## 3 | # 脚本功能:类重命名脚本 4 | # 输入参数 -i 输入的文件夹 5 | # 输入参数 -o 保存的文件 6 | ######################## 7 | 8 | 9 | ####### 配置 10 | # 定义需要替换的类的查找目录,作为参数传递给GenRenameClasses.sh脚本使用,最终获取到的类名称保存到配置文件中,以给后续步骤使用 11 | class_search_dir="$(pwd)/../injectedContentKit/Business" 12 | # class_search_dir="$(pwd)/../injectedContentKit/Business" 13 | # class_search_dir="/Users/aron/PuTaoWorkSpace/project/sscatch/sscatch/Classes/Business" 14 | # 配置文件 15 | cfg_file="$(pwd)/RenameClasses.cfg" 16 | 17 | # project.pbxproj文件目录,需要替换该配置文件中的类的名称配置 18 | pbxproj_dir="$(pwd)/../InjectedContentKit.xcodeproj" 19 | # pbxproj_dir="$(pwd)/../InjectedContentKit.xcodeproj" 20 | # pbxproj_dir="/Users/aron/PuTaoWorkSpace/project/sscatch/sscatch.xcodeproj" 21 | 22 | # 定义该目录下的文件需要进行批量替换处理 23 | class_name_replace_dir="$(pwd)/../InjectedContentKit" 24 | # class_name_replace_dir="$(pwd)/../InjectedContentKit" 25 | # class_name_replace_dir="/Users/aron/PuTaoWorkSpace/project/sscatch/sscatch/Classes/Business" 26 | 27 | # 定义该目录下的文件需要进行批量替换处理 28 | # class_name_replace_support_dir="$(pwd)/../InjectedContentKit000" 29 | # # class_name_replace_support_dir="$(pwd)/../InjectedContentKit" 30 | # class_name_replace_support_dir="/Users/aron/PuTaoWorkSpace/project/sscatch/sscatch/SupportingFiles" 31 | 32 | 33 | # 类前缀 34 | class_prefix="XYZ" 35 | # 类后缀 36 | class_suffix="ABC" 37 | 38 | 39 | ####### 配置检查处理 40 | 41 | # 导入工具脚本 42 | . ./FileUtil.sh 43 | . ./EnvCheckUtil.sh 44 | 45 | # 检测 class_search_dir 46 | checkDirCore $class_search_dir "指定类的查找目录不存在" 47 | class_search_dir=${CheckInputDestDirRecursiveReturnValue} 48 | 49 | # 检测 pbxproj_dir 50 | checkDirCore $pbxproj_dir "指定项目配置目录(pbxproj所在的目录,一般是 xxx.xcodeproj)不存在" 51 | pbxproj_dir=${CheckInputDestDirRecursiveReturnValue} 52 | 53 | # 检测 class_name_replace_dir 54 | checkDirCore $class_name_replace_dir "指定类名称修改的目录不存在" 55 | class_name_replace_dir=${CheckInputDestDirRecursiveReturnValue} 56 | 57 | # 检测 class_name_replace_support_dir 58 | # checkDirCore $class_name_replace_support_dir "指定类名称修改的目录不存在" 59 | # class_name_replace_support_dir=${CheckInputDestDirRecursiveReturnValue} 60 | 61 | 62 | # 检测或者创建配置文件 63 | checkOrCreateFile $cfg_file 64 | 65 | 66 | # 检测gun sed 67 | gunSedInstallCheck 68 | 69 | 70 | ####### 数据定义 71 | # 定义保存类名称的数组 72 | declare -a config_content_array 73 | cfg_line_count=0 74 | 75 | # 1、读取配置文件内容保存到数组中 76 | read_config_content_to_array() { 77 | # 读取配置文件 78 | echo "开始读取配置文件..." 79 | # mark: p291 80 | IFS_OLD=$IFS 81 | IFS=$'\n' 82 | # 删除文件行首的空白字符 http://www.jb51.net/article/57972.htm 83 | for line in $(cat $cfg_file | sed 's/^[ \t]*//g') 84 | do 85 | is_comment=$(expr "$line" : '^#.*') 86 | echo "line=${line} is_common=${is_comment}" 87 | if [[ ${#line} -eq 0 ]] || [[ $(expr "$line" : '^#.*') -gt 0 ]]; then 88 | echo "blank line or comment line" 89 | else 90 | config_content_array[$cfg_line_count]=$line 91 | cfg_line_count=$[ $cfg_line_count + 1 ] 92 | echo "line>>>>${line}" 93 | fi 94 | done 95 | IFS=${IFS_OLD} 96 | 97 | for (( i = 0; i < ${#config_content_array[@]}; i++ )); do 98 | config_content=${config_content_array[i]}; 99 | echo "config_content>>>>>>${config_content}" 100 | done 101 | } 102 | 103 | 104 | # 2、根据规则修改类名 105 | function add_prefix_suffix_to_class { 106 | # 2.1、类添加前缀和后缀 107 | for (( i = 0; i < ${#config_content_array[@]}; i++ )); do 108 | original_class_name=${config_content_array[i]}; 109 | result_class_name="${class_prefix}${original_class_name}${class_suffix}" 110 | 111 | sed -i '{ 112 | s/'"${original_class_name}"'/'"${result_class_name}"'/g 113 | }' `grep ${original_class_name} -rl ${pbxproj_dir}` 114 | sed -i '{ 115 | s/'"${original_class_name}"'/'"${result_class_name}"'/g 116 | }' `grep ${original_class_name} -rl ${class_name_replace_dir}` 117 | 118 | # sed -i '{ 119 | # s/'"${original_class_name}"'/'"${result_class_name}"'/g 120 | # }' `grep ${original_class_name} -rl ${class_name_replace_support_dir}` 121 | 122 | echo "正在处理类 ${original_class_name}..." 123 | done 124 | } 125 | 126 | # 3、修改类的文件名称 127 | function rename_class_file { 128 | echo "class_name_replace_dir >> ${class_name_replace_dir}" 129 | for (( i = 0; i < ${#config_content_array[@]}; i++ )); do 130 | 131 | original_class_name=${config_content_array[i]}; 132 | result_class_name="${class_prefix}${original_class_name}${class_suffix}" 133 | 134 | # .h 文件 135 | pattern="${original_class_name}\.h" 136 | find_result=$(find ${class_name_replace_dir} -name ${pattern}) 137 | new_file_path=${find_result/$original_class_name/$result_class_name} 138 | echo "find_result = ${find_result}" 139 | echo "new_file_path = ${new_file_path}" 140 | mv -f $find_result $new_file_path 141 | 142 | # .m 文件 143 | pattern="${original_class_name}\.m" 144 | find_result=$(find ${class_name_replace_dir} -name ${pattern}) 145 | new_file_path=${find_result/$original_class_name/$result_class_name} 146 | echo "find_result = ${find_result}" 147 | echo "new_file_path = ${new_file_path}" 148 | mv -f $find_result $new_file_path 149 | 150 | # .xib 文件 151 | pattern="${original_class_name}\.xib" 152 | find_result=$(find ${class_name_replace_dir} -name ${pattern}) 153 | new_file_path=${find_result/$original_class_name/$result_class_name} 154 | echo "find_result = ${find_result}" 155 | echo "new_file_path = ${new_file_path}" 156 | mv -f $find_result $new_file_path 157 | 158 | done 159 | } 160 | 161 | # 获取需要重命名的类名称,保存到配置文件中 162 | ./GetAndStoreClasses.sh\ 163 | -i ${class_search_dir}\ 164 | -o ${cfg_file} 165 | 166 | # 读取配置文件内容保存到数组中 167 | read_config_content_to_array 168 | # 类名以及引用添加前缀和后缀 169 | add_prefix_suffix_to_class 170 | # 修改类文件名字 171 | rename_class_file 172 | 173 | echo "批量重命名类名完成。" 174 | 175 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/injectContentShell/GetAndStoreProperties.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ######################## 3 | # 脚本功能:从指定目录获取和保存属性到指定的文件 4 | # 输入参数 -i 输入的文件夹 5 | # 输入参数 -o 保存的文件 6 | # 输入参数 -f 使用黑名单和自定义过滤条件的参数 7 | # 输入参数 -c 自定义的黑名单文件 8 | ######################## 9 | 10 | ####### 参数定义 11 | param_input_dir="" 12 | param_output_file="" 13 | param_custom_filter_file="" 14 | param_should_use_filter=0 15 | 16 | ####### 参数解析 17 | while getopts :i:o:c:f opt 18 | do 19 | case "$opt" in 20 | i) param_input_dir=$OPTARG 21 | echo "Found the -i option, with parameter value $OPTARG" 22 | ;; 23 | o) param_output_file=$OPTARG 24 | echo "Found the -o option, with parameter value $OPTARG" 25 | ;; 26 | c) param_custom_filter_file=$OPTARG 27 | echo "Found the -c option, with parameter value $OPTARG" 28 | ;; 29 | f) echo "Found the -f option" 30 | param_should_use_filter=1 31 | ;; 32 | *) echo "Unknown option: $opt";; 33 | esac 34 | done 35 | 36 | 37 | ####### 配置 38 | 39 | # 属性黑名单配置文件 40 | blacklist_cfg_file="$(pwd)/DefaultPropertiesBlackListConfig.cfg" 41 | 42 | ####### 数据定义 43 | 44 | # 定义保存源文件的数组 45 | declare -a implement_source_file_array 46 | implement_source_file_count=0 47 | 48 | 49 | # 定义保存属性的数组 50 | declare -a tmp_props_array 51 | props_count=0 52 | 53 | 54 | # mark: p384 55 | # 递归函数读取目录下的所有.m文件 56 | function read_source_file_recursively { 57 | echo "read_implement_file_recursively" 58 | if [[ -d $1 ]]; then 59 | for item in $(ls $1); do 60 | itemPath="$1/${item}" 61 | if [[ -d $itemPath ]]; then 62 | # 目录 63 | echo "处理目录 ${itemPath}" 64 | read_source_file_recursively $itemPath 65 | echo "处理目录结束=====" 66 | else 67 | # 文件 68 | echo "处理文件 ${itemPath}" 69 | if [[ $(expr "$item" : '.*\.m') -gt 0 ]] || [[ $(expr "$item" : '.*\.h') -gt 0 ]]; then 70 | echo ">>>>>>>>>>>>mmmmmmm" 71 | implement_source_file_array[$implement_source_file_count]=${itemPath} 72 | implement_source_file_count=$[ implement_source_file_count + 1 ]; 73 | fi 74 | echo "" 75 | fi 76 | done 77 | else 78 | echo "err:不是一个目录" 79 | fi 80 | } 81 | 82 | 83 | # 读取源码中的属性,保存到数组中 84 | # 参数一: 源码文件路径 85 | function get_properties_from_source_file { 86 | local class_file=$1; 87 | echo "class_file=${class_file}" 88 | 89 | properties=$(grep "@property.*" ${class_file}) 90 | IFS_OLD=$IFS 91 | IFS=$'\n' 92 | for prop_line in $properties; do 93 | echo ">>>>>${prop_line}" 94 | 95 | asterisk_seperator_pattern="\*" 96 | if [[ ${prop_line} =~ ${asterisk_seperator_pattern} ]]; then 97 | # 从左向右截取最后一个string后的字符串 98 | prop_name=${prop_line##*${asterisk_seperator_pattern}} 99 | # 从左向右截取第一个string后的字符串 100 | seal_pattern=";*" 101 | seal_pattern_replacement="" 102 | prop_name=${prop_name//${seal_pattern}/${seal_pattern_replacement}} 103 | subsring_pattern="[ |;]" 104 | replacement="" 105 | prop_name=${prop_name//${subsring_pattern}/${replacement}} 106 | 107 | if [[ ${param_should_use_filter} -gt 0 ]]; then 108 | grep_result=$(grep ${prop_name} ${blacklist_cfg_file}) 109 | echo "grep_result = >>${grep_result}<<" 110 | custom_grep_result="" 111 | if [[ -n ${param_custom_filter_file} ]]; then 112 | custom_grep_result=$(grep ${prop_name} ${param_custom_filter_file}) 113 | fi 114 | if [[ -n ${grep_result} ]] || [[ -n ${custom_grep_result} ]]; then 115 | echo "--${prop_name}--存在配置文件中" 116 | else 117 | echo "--${prop_name}--XXX不存在配置文件中" 118 | 119 | tmp_props_array[$props_count]=$prop_name 120 | props_count=$[ props_count + 1 ] 121 | echo ">>>>>>>result_prop_name=${prop_name}" 122 | fi 123 | else 124 | tmp_props_array[$props_count]=$prop_name 125 | props_count=$[ props_count + 1 ] 126 | fi 127 | fi 128 | done 129 | IFS=$IFS_OLD 130 | } 131 | 132 | # 获取目录下的所有源文件,读取其中的属性 133 | function get_properties_from_source_dir { 134 | 135 | local l_classed_folder=$1 136 | 137 | echo "获取需要处理的源文件... ${l_classed_folder}" 138 | # 读取需要处理目标文件 139 | read_source_file_recursively ${l_classed_folder} 140 | 141 | echo "读取源文件中的属性..." 142 | for(( i=0;i<${#implement_source_file_array[@]};i++)) 143 | do 144 | class_file=${implement_source_file_array[i]}; 145 | echo "处理源文件:${class_file}" 146 | get_properties_from_source_file ${class_file} 147 | done; 148 | } 149 | 150 | # 把获取到的属性过滤之后写入文件中 151 | # 过滤步骤包含去重、去掉简单词汇、去掉长度少于多少的词汇 152 | # 如果在执行的过程中遇到特殊情况,添加到黑名单配置(DefaultPropertiesBlackListConfig.cfg文件中添加配置) 153 | function post_get_properties_handle { 154 | 155 | local prop_config_file=$1 156 | 157 | # 写入文件中 158 | echo "# Classes Configs" > ${prop_config_file} 159 | for key in $(echo ${!tmp_props_array[*]}) 160 | do 161 | # echo "$key : ${tmp_props_array[$key]}" 162 | echo ${tmp_props_array[$key]} >> ${prop_config_file} 163 | done 164 | 165 | # 去重 166 | cfg_back_file="${prop_config_file}.bak" 167 | mv ${prop_config_file} ${cfg_back_file} 168 | sort ${cfg_back_file} | uniq > ${prop_config_file} 169 | 170 | # 过滤 171 | if [[ ${param_should_use_filter} -gt 0 ]]; then 172 | mv ${prop_config_file} ${cfg_back_file} 173 | echo "# Classes Configs Filtered" > ${prop_config_file} 174 | IFS_OLD=$IFS 175 | IFS=$'\n' 176 | # 上一行的内容 177 | lastLine=""; 178 | for line in $(cat ${cfg_back_file} | sed 's/^[ \t]*//g') 179 | do 180 | if [[ ${#line} -le 6 ]] || [[ $(expr "$line" : '^#.*') -gt 0 ]]; then 181 | # 长度小于等于6或者注释内容的行不处理 182 | echo "less then 6 char line or comment line" 183 | else 184 | if [[ -n ${lastLine} ]]; then 185 | # 上一行是非空白行 186 | # 比较上一行内容是否是当前行的一部分,不是添加上一行 187 | if [[ ${line} =~ ${lastLine} ]]; then 188 | echo "${line} 和 ${lastLine} 有交集" 189 | else 190 | echo ${lastLine} >> ${prop_config_file} 191 | fi 192 | fi 193 | # 更新上一行 194 | lastLine=${line} 195 | fi 196 | done 197 | IFS=${IFS_OLD} 198 | fi 199 | 200 | # 删除临时文件 201 | rm -f ${cfg_back_file} 202 | } 203 | 204 | 205 | get_properties_from_source_dir ${param_input_dir} 206 | post_get_properties_handle ${param_output_file} 207 | 208 | 209 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/Example/InjectedContentKit/CodeResources.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | files 6 | 7 | Base.lproj/LaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib 8 | 9 | ld+cFUotSYJR/kdv0G/ZdZm8N1U= 10 | 11 | Base.lproj/LaunchScreen.storyboardc/Info.plist 12 | 13 | n2t8gsDpfE6XkhG31p7IQJRxTxU= 14 | 15 | Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib 16 | 17 | 2jL8MuLMilN9Eo/xnzB0Z/AKgxI= 18 | 19 | Info.plist 20 | 21 | nCCScswpxX/vjg1Ib/dSYv116sc= 22 | 23 | Main.storyboardc/Info.plist 24 | 25 | h/qrHehxHBZy29WTi4bHKzzV7CI= 26 | 27 | Main.storyboardc/UIViewController-whP-gf-Uak.nib 28 | 29 | ymHYBtlJ7epn1AH8erMMMDfWL0Y= 30 | 31 | Main.storyboardc/whP-gf-Uak-view-TpU-gO-2f1.nib 32 | 33 | svIA7j7XjMKDfcffCnv/26cfcsk= 34 | 35 | PkgInfo 36 | 37 | n57qDP4tZfLD1rCS43W0B4LQjzE= 38 | 39 | en.lproj/InfoPlist.strings 40 | 41 | hash 42 | 43 | zmV6UqBSo6r1NOz798vd5O4zTBA= 44 | 45 | optional 46 | 47 | 48 | 49 | files2 50 | 51 | Base.lproj/LaunchScreen.storyboardc/01J-lp-oVM-view-Ze5-6b-2t3.nib 52 | 53 | hash 54 | 55 | ld+cFUotSYJR/kdv0G/ZdZm8N1U= 56 | 57 | hash2 58 | 59 | e2sImJiFIboK/sdSVXnUE7Qhz0cx0sgI1WGLP/f3ni4= 60 | 61 | 62 | Base.lproj/LaunchScreen.storyboardc/Info.plist 63 | 64 | hash 65 | 66 | n2t8gsDpfE6XkhG31p7IQJRxTxU= 67 | 68 | hash2 69 | 70 | HyVdXMU7Ux4/KalAao30mpWOK/lEPT4gvYN09wf31cg= 71 | 72 | 73 | Base.lproj/LaunchScreen.storyboardc/UIViewController-01J-lp-oVM.nib 74 | 75 | hash 76 | 77 | 2jL8MuLMilN9Eo/xnzB0Z/AKgxI= 78 | 79 | hash2 80 | 81 | 3n9/wjn+tvqkULon9VwVd7FUcWVcSkINqLB09dRjDxs= 82 | 83 | 84 | Main.storyboardc/Info.plist 85 | 86 | hash 87 | 88 | h/qrHehxHBZy29WTi4bHKzzV7CI= 89 | 90 | hash2 91 | 92 | /dXp/VwdzCfq8c4YlCrNb8zW/fZ9tXrlfioUW1kDPR8= 93 | 94 | 95 | Main.storyboardc/UIViewController-whP-gf-Uak.nib 96 | 97 | hash 98 | 99 | ymHYBtlJ7epn1AH8erMMMDfWL0Y= 100 | 101 | hash2 102 | 103 | 5QOuiBTR3R6i2a+XPQwvhmbcH3RM9j44OMTskgesimc= 104 | 105 | 106 | Main.storyboardc/whP-gf-Uak-view-TpU-gO-2f1.nib 107 | 108 | hash 109 | 110 | svIA7j7XjMKDfcffCnv/26cfcsk= 111 | 112 | hash2 113 | 114 | W7AXyoMipDfmzGDYD+M3zBi/fKVPFUYkYSBunoiAego= 115 | 116 | 117 | en.lproj/InfoPlist.strings 118 | 119 | hash 120 | 121 | zmV6UqBSo6r1NOz798vd5O4zTBA= 122 | 123 | hash2 124 | 125 | kmHsztpgjvF0JW5f3HdMHm49z1M0CcG8OT1JDQHHE/E= 126 | 127 | optional 128 | 129 | 130 | 131 | rules 132 | 133 | ^ 134 | 135 | ^.*\.lproj/ 136 | 137 | optional 138 | 139 | weight 140 | 1000 141 | 142 | ^.*\.lproj/locversion.plist$ 143 | 144 | omit 145 | 146 | weight 147 | 1100 148 | 149 | ^Base\.lproj/ 150 | 151 | weight 152 | 1010 153 | 154 | ^version.plist$ 155 | 156 | 157 | rules2 158 | 159 | .*\.dSYM($|/) 160 | 161 | weight 162 | 11 163 | 164 | ^ 165 | 166 | weight 167 | 20 168 | 169 | ^(.*/)?\.DS_Store$ 170 | 171 | omit 172 | 173 | weight 174 | 2000 175 | 176 | ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ 177 | 178 | nested 179 | 180 | weight 181 | 10 182 | 183 | ^.* 184 | 185 | ^.*\.lproj/ 186 | 187 | optional 188 | 189 | weight 190 | 1000 191 | 192 | ^.*\.lproj/locversion.plist$ 193 | 194 | omit 195 | 196 | weight 197 | 1100 198 | 199 | ^Base\.lproj/ 200 | 201 | weight 202 | 1010 203 | 204 | ^Info\.plist$ 205 | 206 | omit 207 | 208 | weight 209 | 20 210 | 211 | ^PkgInfo$ 212 | 213 | omit 214 | 215 | weight 216 | 20 217 | 218 | ^[^/]+$ 219 | 220 | nested 221 | 222 | weight 223 | 10 224 | 225 | ^embedded\.provisionprofile$ 226 | 227 | weight 228 | 20 229 | 230 | ^version\.plist$ 231 | 232 | weight 233 | 20 234 | 235 | 236 | 237 | 238 | -------------------------------------------------------------------------------- /DevPods/InjectedContentKit/ZytInjectContentExampleProj/ZytInjectContentExampleProj.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 9CC3BF072089F7ED0037418D /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CC3BF062089F7ED0037418D /* AppDelegate.m */; }; 11 | 9CC3BF0A2089F7ED0037418D /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CC3BF092089F7ED0037418D /* ViewController.m */; }; 12 | 9CC3BF0D2089F7ED0037418D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9CC3BF0B2089F7ED0037418D /* Main.storyboard */; }; 13 | 9CC3BF0F2089F7EF0037418D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9CC3BF0E2089F7EF0037418D /* Assets.xcassets */; }; 14 | 9CC3BF122089F7EF0037418D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9CC3BF102089F7EF0037418D /* LaunchScreen.storyboard */; }; 15 | 9CC3BF152089F7EF0037418D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 9CC3BF142089F7EF0037418D /* main.m */; }; 16 | EBBB34DD16986B8C3A0E0B6F /* libPods-ZytInjectContentExampleProj.a in Frameworks */ = {isa = PBXBuildFile; fileRef = D6E2F635DD3ABE5D38295FCA /* libPods-ZytInjectContentExampleProj.a */; }; 17 | /* End PBXBuildFile section */ 18 | 19 | /* Begin PBXFileReference section */ 20 | 6EECDF403D4AB64DBDE03A27 /* Pods-ZytInjectContentExampleProj.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ZytInjectContentExampleProj.debug.xcconfig"; path = "Pods/Target Support Files/Pods-ZytInjectContentExampleProj/Pods-ZytInjectContentExampleProj.debug.xcconfig"; sourceTree = ""; }; 21 | 9CC3BF022089F7ED0037418D /* ZytInjectContentExampleProj.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ZytInjectContentExampleProj.app; sourceTree = BUILT_PRODUCTS_DIR; }; 22 | 9CC3BF052089F7ED0037418D /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 23 | 9CC3BF062089F7ED0037418D /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 24 | 9CC3BF082089F7ED0037418D /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 25 | 9CC3BF092089F7ED0037418D /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 26 | 9CC3BF0C2089F7ED0037418D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 27 | 9CC3BF0E2089F7EF0037418D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 28 | 9CC3BF112089F7EF0037418D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 29 | 9CC3BF132089F7EF0037418D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 30 | 9CC3BF142089F7EF0037418D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 31 | D6E2F635DD3ABE5D38295FCA /* libPods-ZytInjectContentExampleProj.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-ZytInjectContentExampleProj.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 32 | E22CCB6C0A5D82E982E55495 /* Pods-ZytInjectContentExampleProj.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-ZytInjectContentExampleProj.release.xcconfig"; path = "Pods/Target Support Files/Pods-ZytInjectContentExampleProj/Pods-ZytInjectContentExampleProj.release.xcconfig"; sourceTree = ""; }; 33 | /* End PBXFileReference section */ 34 | 35 | /* Begin PBXFrameworksBuildPhase section */ 36 | 9CC3BEFF2089F7ED0037418D /* Frameworks */ = { 37 | isa = PBXFrameworksBuildPhase; 38 | buildActionMask = 2147483647; 39 | files = ( 40 | EBBB34DD16986B8C3A0E0B6F /* libPods-ZytInjectContentExampleProj.a in Frameworks */, 41 | ); 42 | runOnlyForDeploymentPostprocessing = 0; 43 | }; 44 | /* End PBXFrameworksBuildPhase section */ 45 | 46 | /* Begin PBXGroup section */ 47 | 603DD94C180798A37733E1F6 /* Pods */ = { 48 | isa = PBXGroup; 49 | children = ( 50 | 6EECDF403D4AB64DBDE03A27 /* Pods-ZytInjectContentExampleProj.debug.xcconfig */, 51 | E22CCB6C0A5D82E982E55495 /* Pods-ZytInjectContentExampleProj.release.xcconfig */, 52 | ); 53 | name = Pods; 54 | sourceTree = ""; 55 | }; 56 | 9CC3BEF92089F7ED0037418D = { 57 | isa = PBXGroup; 58 | children = ( 59 | 9CC3BF042089F7ED0037418D /* ZytInjectContentExampleProj */, 60 | 9CC3BF032089F7ED0037418D /* Products */, 61 | 603DD94C180798A37733E1F6 /* Pods */, 62 | BB8FD44AE56E0E8A21BCD170 /* Frameworks */, 63 | ); 64 | sourceTree = ""; 65 | }; 66 | 9CC3BF032089F7ED0037418D /* Products */ = { 67 | isa = PBXGroup; 68 | children = ( 69 | 9CC3BF022089F7ED0037418D /* ZytInjectContentExampleProj.app */, 70 | ); 71 | name = Products; 72 | sourceTree = ""; 73 | }; 74 | 9CC3BF042089F7ED0037418D /* ZytInjectContentExampleProj */ = { 75 | isa = PBXGroup; 76 | children = ( 77 | 9CC3BF052089F7ED0037418D /* AppDelegate.h */, 78 | 9CC3BF062089F7ED0037418D /* AppDelegate.m */, 79 | 9CC3BF082089F7ED0037418D /* ViewController.h */, 80 | 9CC3BF092089F7ED0037418D /* ViewController.m */, 81 | 9CC3BF0B2089F7ED0037418D /* Main.storyboard */, 82 | 9CC3BF0E2089F7EF0037418D /* Assets.xcassets */, 83 | 9CC3BF102089F7EF0037418D /* LaunchScreen.storyboard */, 84 | 9CC3BF132089F7EF0037418D /* Info.plist */, 85 | 9CC3BF142089F7EF0037418D /* main.m */, 86 | ); 87 | path = ZytInjectContentExampleProj; 88 | sourceTree = ""; 89 | }; 90 | BB8FD44AE56E0E8A21BCD170 /* Frameworks */ = { 91 | isa = PBXGroup; 92 | children = ( 93 | D6E2F635DD3ABE5D38295FCA /* libPods-ZytInjectContentExampleProj.a */, 94 | ); 95 | name = Frameworks; 96 | sourceTree = ""; 97 | }; 98 | /* End PBXGroup section */ 99 | 100 | /* Begin PBXNativeTarget section */ 101 | 9CC3BF012089F7ED0037418D /* ZytInjectContentExampleProj */ = { 102 | isa = PBXNativeTarget; 103 | buildConfigurationList = 9CC3BF182089F7EF0037418D /* Build configuration list for PBXNativeTarget "ZytInjectContentExampleProj" */; 104 | buildPhases = ( 105 | 67742FB83B9F72E6877A79B7 /* [CP] Check Pods Manifest.lock */, 106 | 9CC3BEFE2089F7ED0037418D /* Sources */, 107 | 9CC3BEFF2089F7ED0037418D /* Frameworks */, 108 | 9CC3BF002089F7ED0037418D /* Resources */, 109 | 434CD6DA0DC70DDE6015FAA1 /* [CP] Embed Pods Frameworks */, 110 | 17237E68BF1D704B9CE56E09 /* [CP] Copy Pods Resources */, 111 | ); 112 | buildRules = ( 113 | ); 114 | dependencies = ( 115 | ); 116 | name = ZytInjectContentExampleProj; 117 | productName = ZytInjectContentExampleProj; 118 | productReference = 9CC3BF022089F7ED0037418D /* ZytInjectContentExampleProj.app */; 119 | productType = "com.apple.product-type.application"; 120 | }; 121 | /* End PBXNativeTarget section */ 122 | 123 | /* Begin PBXProject section */ 124 | 9CC3BEFA2089F7ED0037418D /* Project object */ = { 125 | isa = PBXProject; 126 | attributes = { 127 | LastUpgradeCheck = 0930; 128 | ORGANIZATIONNAME = aron; 129 | TargetAttributes = { 130 | 9CC3BF012089F7ED0037418D = { 131 | CreatedOnToolsVersion = 9.3; 132 | }; 133 | }; 134 | }; 135 | buildConfigurationList = 9CC3BEFD2089F7ED0037418D /* Build configuration list for PBXProject "ZytInjectContentExampleProj" */; 136 | compatibilityVersion = "Xcode 9.3"; 137 | developmentRegion = en; 138 | hasScannedForEncodings = 0; 139 | knownRegions = ( 140 | en, 141 | Base, 142 | ); 143 | mainGroup = 9CC3BEF92089F7ED0037418D; 144 | productRefGroup = 9CC3BF032089F7ED0037418D /* Products */; 145 | projectDirPath = ""; 146 | projectRoot = ""; 147 | targets = ( 148 | 9CC3BF012089F7ED0037418D /* ZytInjectContentExampleProj */, 149 | ); 150 | }; 151 | /* End PBXProject section */ 152 | 153 | /* Begin PBXResourcesBuildPhase section */ 154 | 9CC3BF002089F7ED0037418D /* Resources */ = { 155 | isa = PBXResourcesBuildPhase; 156 | buildActionMask = 2147483647; 157 | files = ( 158 | 9CC3BF122089F7EF0037418D /* LaunchScreen.storyboard in Resources */, 159 | 9CC3BF0F2089F7EF0037418D /* Assets.xcassets in Resources */, 160 | 9CC3BF0D2089F7ED0037418D /* Main.storyboard in Resources */, 161 | ); 162 | runOnlyForDeploymentPostprocessing = 0; 163 | }; 164 | /* End PBXResourcesBuildPhase section */ 165 | 166 | /* Begin PBXShellScriptBuildPhase section */ 167 | 17237E68BF1D704B9CE56E09 /* [CP] Copy Pods Resources */ = { 168 | isa = PBXShellScriptBuildPhase; 169 | buildActionMask = 2147483647; 170 | files = ( 171 | ); 172 | inputPaths = ( 173 | ); 174 | name = "[CP] Copy Pods Resources"; 175 | outputPaths = ( 176 | ); 177 | runOnlyForDeploymentPostprocessing = 0; 178 | shellPath = /bin/sh; 179 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ZytInjectContentExampleProj/Pods-ZytInjectContentExampleProj-resources.sh\"\n"; 180 | showEnvVarsInLog = 0; 181 | }; 182 | 434CD6DA0DC70DDE6015FAA1 /* [CP] Embed Pods Frameworks */ = { 183 | isa = PBXShellScriptBuildPhase; 184 | buildActionMask = 2147483647; 185 | files = ( 186 | ); 187 | inputPaths = ( 188 | ); 189 | name = "[CP] Embed Pods Frameworks"; 190 | outputPaths = ( 191 | ); 192 | runOnlyForDeploymentPostprocessing = 0; 193 | shellPath = /bin/sh; 194 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-ZytInjectContentExampleProj/Pods-ZytInjectContentExampleProj-frameworks.sh\"\n"; 195 | showEnvVarsInLog = 0; 196 | }; 197 | 67742FB83B9F72E6877A79B7 /* [CP] Check Pods Manifest.lock */ = { 198 | isa = PBXShellScriptBuildPhase; 199 | buildActionMask = 2147483647; 200 | files = ( 201 | ); 202 | inputPaths = ( 203 | ); 204 | name = "[CP] Check Pods Manifest.lock"; 205 | outputPaths = ( 206 | ); 207 | runOnlyForDeploymentPostprocessing = 0; 208 | shellPath = /bin/sh; 209 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n"; 210 | showEnvVarsInLog = 0; 211 | }; 212 | /* End PBXShellScriptBuildPhase section */ 213 | 214 | /* Begin PBXSourcesBuildPhase section */ 215 | 9CC3BEFE2089F7ED0037418D /* Sources */ = { 216 | isa = PBXSourcesBuildPhase; 217 | buildActionMask = 2147483647; 218 | files = ( 219 | 9CC3BF0A2089F7ED0037418D /* ViewController.m in Sources */, 220 | 9CC3BF152089F7EF0037418D /* main.m in Sources */, 221 | 9CC3BF072089F7ED0037418D /* AppDelegate.m in Sources */, 222 | ); 223 | runOnlyForDeploymentPostprocessing = 0; 224 | }; 225 | /* End PBXSourcesBuildPhase section */ 226 | 227 | /* Begin PBXVariantGroup section */ 228 | 9CC3BF0B2089F7ED0037418D /* Main.storyboard */ = { 229 | isa = PBXVariantGroup; 230 | children = ( 231 | 9CC3BF0C2089F7ED0037418D /* Base */, 232 | ); 233 | name = Main.storyboard; 234 | sourceTree = ""; 235 | }; 236 | 9CC3BF102089F7EF0037418D /* LaunchScreen.storyboard */ = { 237 | isa = PBXVariantGroup; 238 | children = ( 239 | 9CC3BF112089F7EF0037418D /* Base */, 240 | ); 241 | name = LaunchScreen.storyboard; 242 | sourceTree = ""; 243 | }; 244 | /* End PBXVariantGroup section */ 245 | 246 | /* Begin XCBuildConfiguration section */ 247 | 9CC3BF162089F7EF0037418D /* Debug */ = { 248 | isa = XCBuildConfiguration; 249 | buildSettings = { 250 | ALWAYS_SEARCH_USER_PATHS = NO; 251 | CLANG_ANALYZER_NONNULL = YES; 252 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 253 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 254 | CLANG_CXX_LIBRARY = "libc++"; 255 | CLANG_ENABLE_MODULES = YES; 256 | CLANG_ENABLE_OBJC_ARC = YES; 257 | CLANG_ENABLE_OBJC_WEAK = YES; 258 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 259 | CLANG_WARN_BOOL_CONVERSION = YES; 260 | CLANG_WARN_COMMA = YES; 261 | CLANG_WARN_CONSTANT_CONVERSION = YES; 262 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 263 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 264 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 265 | CLANG_WARN_EMPTY_BODY = YES; 266 | CLANG_WARN_ENUM_CONVERSION = YES; 267 | CLANG_WARN_INFINITE_RECURSION = YES; 268 | CLANG_WARN_INT_CONVERSION = YES; 269 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 270 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 271 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 272 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 273 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 274 | CLANG_WARN_STRICT_PROTOTYPES = YES; 275 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 276 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 277 | CLANG_WARN_UNREACHABLE_CODE = YES; 278 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 279 | CODE_SIGN_IDENTITY = "iPhone Developer"; 280 | COPY_PHASE_STRIP = NO; 281 | DEBUG_INFORMATION_FORMAT = dwarf; 282 | ENABLE_STRICT_OBJC_MSGSEND = YES; 283 | ENABLE_TESTABILITY = YES; 284 | GCC_C_LANGUAGE_STANDARD = gnu11; 285 | GCC_DYNAMIC_NO_PIC = NO; 286 | GCC_NO_COMMON_BLOCKS = YES; 287 | GCC_OPTIMIZATION_LEVEL = 0; 288 | GCC_PREPROCESSOR_DEFINITIONS = ( 289 | "DEBUG=1", 290 | "$(inherited)", 291 | ); 292 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 293 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 294 | GCC_WARN_UNDECLARED_SELECTOR = YES; 295 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 296 | GCC_WARN_UNUSED_FUNCTION = YES; 297 | GCC_WARN_UNUSED_VARIABLE = YES; 298 | IPHONEOS_DEPLOYMENT_TARGET = 11.3; 299 | MTL_ENABLE_DEBUG_INFO = YES; 300 | ONLY_ACTIVE_ARCH = YES; 301 | SDKROOT = iphoneos; 302 | }; 303 | name = Debug; 304 | }; 305 | 9CC3BF172089F7EF0037418D /* Release */ = { 306 | isa = XCBuildConfiguration; 307 | buildSettings = { 308 | ALWAYS_SEARCH_USER_PATHS = NO; 309 | CLANG_ANALYZER_NONNULL = YES; 310 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 311 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 312 | CLANG_CXX_LIBRARY = "libc++"; 313 | CLANG_ENABLE_MODULES = YES; 314 | CLANG_ENABLE_OBJC_ARC = YES; 315 | CLANG_ENABLE_OBJC_WEAK = YES; 316 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 317 | CLANG_WARN_BOOL_CONVERSION = YES; 318 | CLANG_WARN_COMMA = YES; 319 | CLANG_WARN_CONSTANT_CONVERSION = YES; 320 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 321 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 322 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 323 | CLANG_WARN_EMPTY_BODY = YES; 324 | CLANG_WARN_ENUM_CONVERSION = YES; 325 | CLANG_WARN_INFINITE_RECURSION = YES; 326 | CLANG_WARN_INT_CONVERSION = YES; 327 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 328 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 329 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 330 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 331 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 332 | CLANG_WARN_STRICT_PROTOTYPES = YES; 333 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 334 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 335 | CLANG_WARN_UNREACHABLE_CODE = YES; 336 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 337 | CODE_SIGN_IDENTITY = "iPhone Developer"; 338 | COPY_PHASE_STRIP = NO; 339 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 340 | ENABLE_NS_ASSERTIONS = NO; 341 | ENABLE_STRICT_OBJC_MSGSEND = YES; 342 | GCC_C_LANGUAGE_STANDARD = gnu11; 343 | GCC_NO_COMMON_BLOCKS = YES; 344 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 345 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 346 | GCC_WARN_UNDECLARED_SELECTOR = YES; 347 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 348 | GCC_WARN_UNUSED_FUNCTION = YES; 349 | GCC_WARN_UNUSED_VARIABLE = YES; 350 | IPHONEOS_DEPLOYMENT_TARGET = 11.3; 351 | MTL_ENABLE_DEBUG_INFO = NO; 352 | SDKROOT = iphoneos; 353 | VALIDATE_PRODUCT = YES; 354 | }; 355 | name = Release; 356 | }; 357 | 9CC3BF192089F7EF0037418D /* Debug */ = { 358 | isa = XCBuildConfiguration; 359 | baseConfigurationReference = 6EECDF403D4AB64DBDE03A27 /* Pods-ZytInjectContentExampleProj.debug.xcconfig */; 360 | buildSettings = { 361 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 362 | CODE_SIGN_STYLE = Automatic; 363 | INFOPLIST_FILE = ZytInjectContentExampleProj/Info.plist; 364 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 365 | PRODUCT_BUNDLE_IDENTIFIER = YTT.ZytInjectContentExampleProj; 366 | PRODUCT_NAME = "$(TARGET_NAME)"; 367 | TARGETED_DEVICE_FAMILY = "1,2"; 368 | }; 369 | name = Debug; 370 | }; 371 | 9CC3BF1A2089F7EF0037418D /* Release */ = { 372 | isa = XCBuildConfiguration; 373 | baseConfigurationReference = E22CCB6C0A5D82E982E55495 /* Pods-ZytInjectContentExampleProj.release.xcconfig */; 374 | buildSettings = { 375 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 376 | CODE_SIGN_STYLE = Automatic; 377 | INFOPLIST_FILE = ZytInjectContentExampleProj/Info.plist; 378 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 379 | PRODUCT_BUNDLE_IDENTIFIER = YTT.ZytInjectContentExampleProj; 380 | PRODUCT_NAME = "$(TARGET_NAME)"; 381 | TARGETED_DEVICE_FAMILY = "1,2"; 382 | }; 383 | name = Release; 384 | }; 385 | /* End XCBuildConfiguration section */ 386 | 387 | /* Begin XCConfigurationList section */ 388 | 9CC3BEFD2089F7ED0037418D /* Build configuration list for PBXProject "ZytInjectContentExampleProj" */ = { 389 | isa = XCConfigurationList; 390 | buildConfigurations = ( 391 | 9CC3BF162089F7EF0037418D /* Debug */, 392 | 9CC3BF172089F7EF0037418D /* Release */, 393 | ); 394 | defaultConfigurationIsVisible = 0; 395 | defaultConfigurationName = Release; 396 | }; 397 | 9CC3BF182089F7EF0037418D /* Build configuration list for PBXNativeTarget "ZytInjectContentExampleProj" */ = { 398 | isa = XCConfigurationList; 399 | buildConfigurations = ( 400 | 9CC3BF192089F7EF0037418D /* Debug */, 401 | 9CC3BF1A2089F7EF0037418D /* Release */, 402 | ); 403 | defaultConfigurationIsVisible = 0; 404 | defaultConfigurationName = Release; 405 | }; 406 | /* End XCConfigurationList section */ 407 | }; 408 | rootObject = 9CC3BEFA2089F7ED0037418D /* Project object */; 409 | } 410 | --------------------------------------------------------------------------------