├── .gitignore ├── LICENSE ├── README.md ├── YSCameraInjectTest.xcodeproj ├── project.pbxproj └── xcshareddata │ └── xcschemes │ └── YSCameraInjectTest.xcscheme ├── YSCameraInjectTest ├── YSCameraInjectTest.h └── YSCameraInjectTest.m └── libYSCameraInjectTest.plist /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | 20 | ## Other 21 | *.moved-aside 22 | *.xccheckout 23 | *.xcscmblueprint 24 | 25 | ## Obj-C/Swift specific 26 | *.hmap 27 | *.ipa 28 | *.dSYM.zip 29 | *.dSYM 30 | 31 | # CocoaPods 32 | # 33 | # We recommend against adding the Pods directory to your .gitignore. However 34 | # you should judge for yourself, the pros and cons are mentioned at: 35 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 36 | # 37 | # Pods/ 38 | 39 | # Carthage 40 | # 41 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 42 | # Carthage/Checkouts 43 | 44 | Carthage/Build 45 | 46 | # fastlane 47 | # 48 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 49 | # screenshots whenever they are needed. 50 | # For more information about the recommended setup visit: 51 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 52 | 53 | fastlane/report.xml 54 | fastlane/Preview.html 55 | fastlane/screenshots/**/*.png 56 | fastlane/test_output 57 | 58 | # Code Injection 59 | # 60 | # After new code Injection tools there's a generated folder /iOSInjectionProject 61 | # https://github.com/johnno1962/injectionforxcode 62 | 63 | iOSInjectionProject/ 64 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 欧阳大哥2013 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # YSCameraInjectTest 2 | 一个简单的越狱设备动态库注入示例 3 | 4 | 5 | 1. 找一台越狱后的设备。并确保安装了ssh。如果没有则请到Cydia中搜索OpenSSH并安装。 6 | 7 | 8 | 2. 打开本工程,进入`Edit Scheme...`界面。展开`Build`选择`Post-actions`,然后在脚本中将 devip "172.19.212.21" 中的IP地址改为你操作的越狱设备的IP地址。 9 | 10 | 3. 将XCode中工程左上角的`Set the active scheme` 设置为 `Generic iOS Device`。 11 | 12 | 4. 点击构建工程!整个过程不需要联机。 13 | 14 | 5. 打开越狱设备上的相机应用, 看看那个拍照按钮有变换吗? 15 | 16 | ![演示图](https://upload-images.jianshu.io/upload_images/1432482-37324bb9185384c2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1000) 17 | -------------------------------------------------------------------------------- /YSCameraInjectTest.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 20D2BD5A229E419F00AF8E18 /* YSCameraInjectTest.h in Headers */ = {isa = PBXBuildFile; fileRef = 20D2BD59229E419F00AF8E18 /* YSCameraInjectTest.h */; }; 11 | 20D2BD5C229E419F00AF8E18 /* YSCameraInjectTest.m in Sources */ = {isa = PBXBuildFile; fileRef = 20D2BD5B229E419F00AF8E18 /* YSCameraInjectTest.m */; }; 12 | /* End PBXBuildFile section */ 13 | 14 | /* Begin PBXFileReference section */ 15 | 20D2BD56229E419F00AF8E18 /* libYSCameraInjectTest.dylib */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.dylib"; includeInIndex = 0; path = libYSCameraInjectTest.dylib; sourceTree = BUILT_PRODUCTS_DIR; }; 16 | 20D2BD59229E419F00AF8E18 /* YSCameraInjectTest.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = YSCameraInjectTest.h; sourceTree = ""; }; 17 | 20D2BD5B229E419F00AF8E18 /* YSCameraInjectTest.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = YSCameraInjectTest.m; sourceTree = ""; }; 18 | 20D2BD62229E549200AF8E18 /* libYSCameraInjectTest.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = libYSCameraInjectTest.plist; sourceTree = ""; }; 19 | /* End PBXFileReference section */ 20 | 21 | /* Begin PBXFrameworksBuildPhase section */ 22 | 20D2BD54229E419F00AF8E18 /* Frameworks */ = { 23 | isa = PBXFrameworksBuildPhase; 24 | buildActionMask = 2147483647; 25 | files = ( 26 | ); 27 | runOnlyForDeploymentPostprocessing = 0; 28 | }; 29 | /* End PBXFrameworksBuildPhase section */ 30 | 31 | /* Begin PBXGroup section */ 32 | 20D2BD4D229E419F00AF8E18 = { 33 | isa = PBXGroup; 34 | children = ( 35 | 20D2BD62229E549200AF8E18 /* libYSCameraInjectTest.plist */, 36 | 20D2BD58229E419F00AF8E18 /* YSCameraInjectTest */, 37 | 20D2BD57229E419F00AF8E18 /* Products */, 38 | ); 39 | sourceTree = ""; 40 | }; 41 | 20D2BD57229E419F00AF8E18 /* Products */ = { 42 | isa = PBXGroup; 43 | children = ( 44 | 20D2BD56229E419F00AF8E18 /* libYSCameraInjectTest.dylib */, 45 | ); 46 | name = Products; 47 | sourceTree = ""; 48 | }; 49 | 20D2BD58229E419F00AF8E18 /* YSCameraInjectTest */ = { 50 | isa = PBXGroup; 51 | children = ( 52 | 20D2BD59229E419F00AF8E18 /* YSCameraInjectTest.h */, 53 | 20D2BD5B229E419F00AF8E18 /* YSCameraInjectTest.m */, 54 | ); 55 | path = YSCameraInjectTest; 56 | sourceTree = ""; 57 | }; 58 | /* End PBXGroup section */ 59 | 60 | /* Begin PBXHeadersBuildPhase section */ 61 | 20D2BD52229E419F00AF8E18 /* Headers */ = { 62 | isa = PBXHeadersBuildPhase; 63 | buildActionMask = 2147483647; 64 | files = ( 65 | 20D2BD5A229E419F00AF8E18 /* YSCameraInjectTest.h in Headers */, 66 | ); 67 | runOnlyForDeploymentPostprocessing = 0; 68 | }; 69 | /* End PBXHeadersBuildPhase section */ 70 | 71 | /* Begin PBXNativeTarget section */ 72 | 20D2BD55229E419F00AF8E18 /* YSCameraInjectTest */ = { 73 | isa = PBXNativeTarget; 74 | buildConfigurationList = 20D2BD5F229E419F00AF8E18 /* Build configuration list for PBXNativeTarget "YSCameraInjectTest" */; 75 | buildPhases = ( 76 | 20D2BD52229E419F00AF8E18 /* Headers */, 77 | 20D2BD53229E419F00AF8E18 /* Sources */, 78 | 20D2BD54229E419F00AF8E18 /* Frameworks */, 79 | ); 80 | buildRules = ( 81 | ); 82 | dependencies = ( 83 | ); 84 | name = YSCameraInjectTest; 85 | productName = YSCameraInjectTest; 86 | productReference = 20D2BD56229E419F00AF8E18 /* libYSCameraInjectTest.dylib */; 87 | productType = "com.apple.product-type.library.dynamic"; 88 | }; 89 | /* End PBXNativeTarget section */ 90 | 91 | /* Begin PBXProject section */ 92 | 20D2BD4E229E419F00AF8E18 /* Project object */ = { 93 | isa = PBXProject; 94 | attributes = { 95 | LastUpgradeCheck = 1020; 96 | ORGANIZATIONNAME = Youngsoft; 97 | TargetAttributes = { 98 | 20D2BD55229E419F00AF8E18 = { 99 | CreatedOnToolsVersion = 10.2.1; 100 | }; 101 | }; 102 | }; 103 | buildConfigurationList = 20D2BD51229E419F00AF8E18 /* Build configuration list for PBXProject "YSCameraInjectTest" */; 104 | compatibilityVersion = "Xcode 9.3"; 105 | developmentRegion = en; 106 | hasScannedForEncodings = 0; 107 | knownRegions = ( 108 | en, 109 | ); 110 | mainGroup = 20D2BD4D229E419F00AF8E18; 111 | productRefGroup = 20D2BD57229E419F00AF8E18 /* Products */; 112 | projectDirPath = ""; 113 | projectRoot = ""; 114 | targets = ( 115 | 20D2BD55229E419F00AF8E18 /* YSCameraInjectTest */, 116 | ); 117 | }; 118 | /* End PBXProject section */ 119 | 120 | /* Begin PBXSourcesBuildPhase section */ 121 | 20D2BD53229E419F00AF8E18 /* Sources */ = { 122 | isa = PBXSourcesBuildPhase; 123 | buildActionMask = 2147483647; 124 | files = ( 125 | 20D2BD5C229E419F00AF8E18 /* YSCameraInjectTest.m in Sources */, 126 | ); 127 | runOnlyForDeploymentPostprocessing = 0; 128 | }; 129 | /* End PBXSourcesBuildPhase section */ 130 | 131 | /* Begin XCBuildConfiguration section */ 132 | 20D2BD5D229E419F00AF8E18 /* Debug */ = { 133 | isa = XCBuildConfiguration; 134 | buildSettings = { 135 | ALWAYS_SEARCH_USER_PATHS = NO; 136 | CLANG_ANALYZER_NONNULL = YES; 137 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 138 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 139 | CLANG_CXX_LIBRARY = "libc++"; 140 | CLANG_ENABLE_MODULES = YES; 141 | CLANG_ENABLE_OBJC_ARC = YES; 142 | CLANG_ENABLE_OBJC_WEAK = YES; 143 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 144 | CLANG_WARN_BOOL_CONVERSION = YES; 145 | CLANG_WARN_COMMA = YES; 146 | CLANG_WARN_CONSTANT_CONVERSION = YES; 147 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 148 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 149 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 150 | CLANG_WARN_EMPTY_BODY = YES; 151 | CLANG_WARN_ENUM_CONVERSION = YES; 152 | CLANG_WARN_INFINITE_RECURSION = YES; 153 | CLANG_WARN_INT_CONVERSION = YES; 154 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 155 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 156 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 157 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 158 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 159 | CLANG_WARN_STRICT_PROTOTYPES = YES; 160 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 161 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 162 | CLANG_WARN_UNREACHABLE_CODE = YES; 163 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 164 | CODE_SIGN_IDENTITY = "Mac Developer"; 165 | COPY_PHASE_STRIP = NO; 166 | DEBUG_INFORMATION_FORMAT = dwarf; 167 | ENABLE_STRICT_OBJC_MSGSEND = YES; 168 | ENABLE_TESTABILITY = YES; 169 | GCC_C_LANGUAGE_STANDARD = gnu11; 170 | GCC_DYNAMIC_NO_PIC = NO; 171 | GCC_NO_COMMON_BLOCKS = YES; 172 | GCC_OPTIMIZATION_LEVEL = 0; 173 | GCC_PREPROCESSOR_DEFINITIONS = ( 174 | "DEBUG=1", 175 | "$(inherited)", 176 | ); 177 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 178 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 179 | GCC_WARN_UNDECLARED_SELECTOR = YES; 180 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 181 | GCC_WARN_UNUSED_FUNCTION = YES; 182 | GCC_WARN_UNUSED_VARIABLE = YES; 183 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 184 | MACOSX_DEPLOYMENT_TARGET = 10.14; 185 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 186 | MTL_FAST_MATH = YES; 187 | ONLY_ACTIVE_ARCH = YES; 188 | SDKROOT = iphoneos; 189 | }; 190 | name = Debug; 191 | }; 192 | 20D2BD5E229E419F00AF8E18 /* Release */ = { 193 | isa = XCBuildConfiguration; 194 | buildSettings = { 195 | ALWAYS_SEARCH_USER_PATHS = NO; 196 | CLANG_ANALYZER_NONNULL = YES; 197 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 198 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 199 | CLANG_CXX_LIBRARY = "libc++"; 200 | CLANG_ENABLE_MODULES = YES; 201 | CLANG_ENABLE_OBJC_ARC = YES; 202 | CLANG_ENABLE_OBJC_WEAK = YES; 203 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 204 | CLANG_WARN_BOOL_CONVERSION = YES; 205 | CLANG_WARN_COMMA = YES; 206 | CLANG_WARN_CONSTANT_CONVERSION = YES; 207 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 208 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 209 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 210 | CLANG_WARN_EMPTY_BODY = YES; 211 | CLANG_WARN_ENUM_CONVERSION = YES; 212 | CLANG_WARN_INFINITE_RECURSION = YES; 213 | CLANG_WARN_INT_CONVERSION = YES; 214 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 215 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 216 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 217 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 218 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 219 | CLANG_WARN_STRICT_PROTOTYPES = YES; 220 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 221 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 222 | CLANG_WARN_UNREACHABLE_CODE = YES; 223 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 224 | CODE_SIGN_IDENTITY = "Mac Developer"; 225 | COPY_PHASE_STRIP = NO; 226 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 227 | ENABLE_NS_ASSERTIONS = NO; 228 | ENABLE_STRICT_OBJC_MSGSEND = YES; 229 | GCC_C_LANGUAGE_STANDARD = gnu11; 230 | GCC_NO_COMMON_BLOCKS = YES; 231 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 232 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 233 | GCC_WARN_UNDECLARED_SELECTOR = YES; 234 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 235 | GCC_WARN_UNUSED_FUNCTION = YES; 236 | GCC_WARN_UNUSED_VARIABLE = YES; 237 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 238 | MACOSX_DEPLOYMENT_TARGET = 10.14; 239 | MTL_ENABLE_DEBUG_INFO = NO; 240 | MTL_FAST_MATH = YES; 241 | SDKROOT = iphoneos; 242 | }; 243 | name = Release; 244 | }; 245 | 20D2BD60229E419F00AF8E18 /* Debug */ = { 246 | isa = XCBuildConfiguration; 247 | buildSettings = { 248 | CODE_SIGN_IDENTITY = "iPhone Developer"; 249 | CODE_SIGN_STYLE = Manual; 250 | DEVELOPMENT_TEAM = BGQ8WB468K; 251 | DYLIB_COMPATIBILITY_VERSION = 1; 252 | DYLIB_CURRENT_VERSION = 1; 253 | EXECUTABLE_PREFIX = lib; 254 | PRODUCT_NAME = "$(TARGET_NAME)"; 255 | PROVISIONING_PROFILE_SPECIFIER = ""; 256 | SKIP_INSTALL = YES; 257 | }; 258 | name = Debug; 259 | }; 260 | 20D2BD61229E419F00AF8E18 /* Release */ = { 261 | isa = XCBuildConfiguration; 262 | buildSettings = { 263 | CODE_SIGN_IDENTITY = "iPhone Developer"; 264 | CODE_SIGN_STYLE = Manual; 265 | DEVELOPMENT_TEAM = BGQ8WB468K; 266 | DYLIB_COMPATIBILITY_VERSION = 1; 267 | DYLIB_CURRENT_VERSION = 1; 268 | EXECUTABLE_PREFIX = lib; 269 | PRODUCT_NAME = "$(TARGET_NAME)"; 270 | PROVISIONING_PROFILE_SPECIFIER = ""; 271 | SKIP_INSTALL = YES; 272 | }; 273 | name = Release; 274 | }; 275 | /* End XCBuildConfiguration section */ 276 | 277 | /* Begin XCConfigurationList section */ 278 | 20D2BD51229E419F00AF8E18 /* Build configuration list for PBXProject "YSCameraInjectTest" */ = { 279 | isa = XCConfigurationList; 280 | buildConfigurations = ( 281 | 20D2BD5D229E419F00AF8E18 /* Debug */, 282 | 20D2BD5E229E419F00AF8E18 /* Release */, 283 | ); 284 | defaultConfigurationIsVisible = 0; 285 | defaultConfigurationName = Release; 286 | }; 287 | 20D2BD5F229E419F00AF8E18 /* Build configuration list for PBXNativeTarget "YSCameraInjectTest" */ = { 288 | isa = XCConfigurationList; 289 | buildConfigurations = ( 290 | 20D2BD60229E419F00AF8E18 /* Debug */, 291 | 20D2BD61229E419F00AF8E18 /* Release */, 292 | ); 293 | defaultConfigurationIsVisible = 0; 294 | defaultConfigurationName = Release; 295 | }; 296 | /* End XCConfigurationList section */ 297 | }; 298 | rootObject = 20D2BD4E229E419F00AF8E18 /* Project object */; 299 | } 300 | -------------------------------------------------------------------------------- /YSCameraInjectTest.xcodeproj/xcshareddata/xcschemes/YSCameraInjectTest.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 11 | 15 | 16 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 34 | 40 | 41 | 42 | 43 | 44 | 49 | 50 | 51 | 52 | 53 | 54 | 64 | 65 | 71 | 72 | 73 | 74 | 75 | 76 | 82 | 83 | 89 | 90 | 91 | 92 | 94 | 95 | 98 | 99 | 100 | -------------------------------------------------------------------------------- /YSCameraInjectTest/YSCameraInjectTest.h: -------------------------------------------------------------------------------- 1 | // 2 | // YSCameraInjectTest.h 3 | // YSCameraInjectTest 4 | // 5 | // Created by oubaiquan on 2019/5/29. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface YSCameraInjectTest : NSObject 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /YSCameraInjectTest/YSCameraInjectTest.m: -------------------------------------------------------------------------------- 1 | // 2 | // YSCameraInjectTest.m 3 | // YSCameraInjectTest 4 | // 5 | // Created by oubaiquan on 2019/5/29. 6 | // Copyright © 2019 Youngsoft. All rights reserved. 7 | // 8 | 9 | #import "YSCameraInjectTest.h" 10 | #import 11 | 12 | @implementation YSCameraInjectTest 13 | 14 | +(void)load 15 | { 16 | NSLog(@"I have injected to %@", [NSBundle mainBundle].bundleIdentifier); 17 | 18 | [self performSelector:@selector(doInject) withObject:nil afterDelay:2]; 19 | } 20 | 21 | +(void)doInject 22 | { 23 | 24 | UILabel *label = [UILabel new]; 25 | label.text = @"😂"; 26 | label.font = [UIFont systemFontOfSize:30]; 27 | [label sizeToFit]; 28 | 29 | UIWindow *win = [UIApplication sharedApplication].keyWindow; 30 | 31 | label.center = CGPointMake(win.center.x, CGRectGetMaxY(win.bounds) - 48); 32 | [win addSubview:label]; 33 | 34 | } 35 | 36 | @end 37 | -------------------------------------------------------------------------------- /libYSCameraInjectTest.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | Filter 6 | 7 | Bundles 8 | 9 | com.apple.camera 10 | 11 | 12 | 13 | 14 | --------------------------------------------------------------------------------