├── Interactive UIDynamics.xcodeproj └── project.pbxproj ├── Interactive UIDynamics ├── AppDelegate.h ├── AppDelegate.m ├── DraggableView.h ├── DraggableView.m ├── Images.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── LaunchImage.launchimage │ │ └── Contents.json ├── Interactive UIDynamics-Info.plist ├── Interactive UIDynamics-Prefix.pch ├── Interactive_UIDynamics.xcdatamodeld │ └── .xccurrentversion ├── MainView.h ├── MainView.m ├── PaneBehavior.h ├── PaneBehavior.m ├── ViewController.h ├── ViewController.m ├── en.lproj │ └── InfoPlist.strings └── main.m └── Interactive UIDynamicsTests ├── Interactive UIDynamicsTests-Info.plist ├── Interactive_UIDynamicsTests.m └── en.lproj └── InfoPlist.strings /Interactive UIDynamics.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | D25890491B100BC98919B257 /* DraggableView.m in Sources */ = {isa = PBXBuildFile; fileRef = D25893A7CD3FFCC54EED070A /* DraggableView.m */; }; 11 | D258912C427EB227461C5DF1 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2589F8CD899FBC3F293129D /* CoreData.framework */; }; 12 | D25892E86637F724B512241E /* CoreGraphics.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2589777E63D19B5BA97C928 /* CoreGraphics.framework */; }; 13 | D25893CF0D6FF62979EA036C /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = D2589A63E4E9933CB48E46FA /* ViewController.m */; }; 14 | D25894156856C5FFFE4E2A81 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D258986F8FADA668EE1CE1E1 /* UIKit.framework */; }; 15 | D258947727844B749BCC6BC5 /* CoreData.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2589F8CD899FBC3F293129D /* CoreData.framework */; }; 16 | D258953A83E17F5F2BDAF839 /* PaneBehavior.m in Sources */ = {isa = PBXBuildFile; fileRef = D25892B5BD6A4F28221D6396 /* PaneBehavior.m */; }; 17 | D2589581329B977029F25237 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D258986F8FADA668EE1CE1E1 /* UIKit.framework */; }; 18 | D2589585B1A651B38978BE96 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = D2589A83D0A856EEBABC8D3A /* Images.xcassets */; }; 19 | D25896B0E31C76A2BA2D0518 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2589471BBD1EC16EF0053F3 /* Foundation.framework */; }; 20 | D2589877EAC2DB82E164AE7F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2589471BBD1EC16EF0053F3 /* Foundation.framework */; }; 21 | D258992A8A108713A2A9A4D3 /* Interactive_UIDynamicsTests.m in Sources */ = {isa = PBXBuildFile; fileRef = D258992B2719DFF06FF04B47 /* Interactive_UIDynamicsTests.m */; }; 22 | D25899DAEFEEDC5E296B4169 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = D2589A6821BBDA2F4674B48C /* AppDelegate.m */; }; 23 | D2589AAC0EF09C8003292246 /* MainView.m in Sources */ = {isa = PBXBuildFile; fileRef = D25898CFCC607D0307115246 /* MainView.m */; }; 24 | D2589BA9DC2FB8090BFBB1B7 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D2589AD24C7463B9BE6C2B1B /* XCTest.framework */; }; 25 | D2589CF598A283C905F080CE /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = D25892AEF87FFD6BA427DADD /* InfoPlist.strings */; }; 26 | D2589D032E8A812F5E3628A0 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = D2589F53D64CB45F010F197D /* main.m */; }; 27 | D2589F364B8654A1C9A7EA6F /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = D2589E85B533E11AB16A732F /* InfoPlist.strings */; }; 28 | /* End PBXBuildFile section */ 29 | 30 | /* Begin PBXContainerItemProxy section */ 31 | D25892E47F980BA33E8C6CED /* PBXContainerItemProxy */ = { 32 | isa = PBXContainerItemProxy; 33 | containerPortal = D2589BCE91F43E6360767BB1 /* Project object */; 34 | proxyType = 1; 35 | remoteGlobalIDString = D2589011CB032D2C4D30D7CF; 36 | remoteInfo = "Interactive UIDynamics"; 37 | }; 38 | /* End PBXContainerItemProxy section */ 39 | 40 | /* Begin PBXFileReference section */ 41 | D25891B8038AB90439AC3EBA /* ViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; 42 | D25892323B7038B645CD38D6 /* Interactive UIDynamics-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.info; path = "Interactive UIDynamics-Info.plist"; sourceTree = ""; }; 43 | D25892B5BD6A4F28221D6396 /* PaneBehavior.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PaneBehavior.m; sourceTree = ""; }; 44 | D25893A7CD3FFCC54EED070A /* DraggableView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DraggableView.m; sourceTree = ""; }; 45 | D258943F962023050F3E0B6E /* Interactive UIDynamicsTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.info; path = "Interactive UIDynamicsTests-Info.plist"; sourceTree = ""; }; 46 | D2589471BBD1EC16EF0053F3 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 47 | D2589510CA477531F85B444C /* Interactive UIDynamics.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Interactive UIDynamics.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 48 | D2589521B8D588EC76153926 /* Interactive UIDynamicsTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Interactive UIDynamicsTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 49 | D25896DC229C79FC838067E8 /* Interactive UIDynamics-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Interactive UIDynamics-Prefix.pch"; sourceTree = ""; }; 50 | D2589777E63D19B5BA97C928 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 51 | D258986F8FADA668EE1CE1E1 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; 52 | D25898CFCC607D0307115246 /* MainView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MainView.m; sourceTree = ""; }; 53 | D258992B2719DFF06FF04B47 /* Interactive_UIDynamicsTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Interactive_UIDynamicsTests.m; sourceTree = ""; }; 54 | D258997EC55CAEB9B178BAF7 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 55 | D2589A63E4E9933CB48E46FA /* ViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; 56 | D2589A6821BBDA2F4674B48C /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 57 | D2589A83D0A856EEBABC8D3A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 58 | D2589AD24C7463B9BE6C2B1B /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 59 | D2589AD821581F5541A6F31C /* DraggableView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DraggableView.h; sourceTree = ""; }; 60 | D2589B6AB6E50BEA5F19F85F /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 61 | D2589E8EC427BD0D8B6ABFA2 /* MainView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MainView.h; sourceTree = ""; }; 62 | D2589F53D64CB45F010F197D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 63 | D2589F8CD899FBC3F293129D /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; 64 | D2589FC20AAC45E54196AE55 /* PaneBehavior.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PaneBehavior.h; sourceTree = ""; }; 65 | D2589FFF04306911D6A73675 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 66 | /* End PBXFileReference section */ 67 | 68 | /* Begin PBXFrameworksBuildPhase section */ 69 | D2589C886816ED1349BDA475 /* Frameworks */ = { 70 | isa = PBXFrameworksBuildPhase; 71 | buildActionMask = 2147483647; 72 | files = ( 73 | D2589BA9DC2FB8090BFBB1B7 /* XCTest.framework in Frameworks */, 74 | D2589877EAC2DB82E164AE7F /* Foundation.framework in Frameworks */, 75 | D2589581329B977029F25237 /* UIKit.framework in Frameworks */, 76 | D258947727844B749BCC6BC5 /* CoreData.framework in Frameworks */, 77 | ); 78 | runOnlyForDeploymentPostprocessing = 0; 79 | }; 80 | D2589E1EF1A9D6331C56DFB7 /* Frameworks */ = { 81 | isa = PBXFrameworksBuildPhase; 82 | buildActionMask = 2147483647; 83 | files = ( 84 | D25896B0E31C76A2BA2D0518 /* Foundation.framework in Frameworks */, 85 | D25892E86637F724B512241E /* CoreGraphics.framework in Frameworks */, 86 | D25894156856C5FFFE4E2A81 /* UIKit.framework in Frameworks */, 87 | D258912C427EB227461C5DF1 /* CoreData.framework in Frameworks */, 88 | ); 89 | runOnlyForDeploymentPostprocessing = 0; 90 | }; 91 | /* End PBXFrameworksBuildPhase section */ 92 | 93 | /* Begin PBXGroup section */ 94 | D258901047A9F2B76ADB9645 /* Supporting Files */ = { 95 | isa = PBXGroup; 96 | children = ( 97 | D25892323B7038B645CD38D6 /* Interactive UIDynamics-Info.plist */, 98 | D2589E85B533E11AB16A732F /* InfoPlist.strings */, 99 | D2589F53D64CB45F010F197D /* main.m */, 100 | D25896DC229C79FC838067E8 /* Interactive UIDynamics-Prefix.pch */, 101 | ); 102 | name = "Supporting Files"; 103 | sourceTree = ""; 104 | }; 105 | D258902541D46724F10B2FEA /* Products */ = { 106 | isa = PBXGroup; 107 | children = ( 108 | D2589510CA477531F85B444C /* Interactive UIDynamics.app */, 109 | D2589521B8D588EC76153926 /* Interactive UIDynamicsTests.xctest */, 110 | ); 111 | name = Products; 112 | sourceTree = ""; 113 | }; 114 | D25896AFAF06A48CA0AD4F8D = { 115 | isa = PBXGroup; 116 | children = ( 117 | D258902541D46724F10B2FEA /* Products */, 118 | D2589CF9ED0DDB83C5D07DE8 /* Frameworks */, 119 | D2589BBF2F4BEEC9902F421E /* Interactive UIDynamics */, 120 | D258988E06BE9A6AF36C5226 /* Interactive UIDynamicsTests */, 121 | ); 122 | sourceTree = ""; 123 | }; 124 | D25897E40FF6D60FD9DEE139 /* Supporting Files */ = { 125 | isa = PBXGroup; 126 | children = ( 127 | D258943F962023050F3E0B6E /* Interactive UIDynamicsTests-Info.plist */, 128 | D25892AEF87FFD6BA427DADD /* InfoPlist.strings */, 129 | ); 130 | name = "Supporting Files"; 131 | sourceTree = ""; 132 | }; 133 | D258988E06BE9A6AF36C5226 /* Interactive UIDynamicsTests */ = { 134 | isa = PBXGroup; 135 | children = ( 136 | D25897E40FF6D60FD9DEE139 /* Supporting Files */, 137 | D258992B2719DFF06FF04B47 /* Interactive_UIDynamicsTests.m */, 138 | ); 139 | path = "Interactive UIDynamicsTests"; 140 | sourceTree = ""; 141 | }; 142 | D2589BBF2F4BEEC9902F421E /* Interactive UIDynamics */ = { 143 | isa = PBXGroup; 144 | children = ( 145 | D258901047A9F2B76ADB9645 /* Supporting Files */, 146 | D2589FFF04306911D6A73675 /* AppDelegate.h */, 147 | D2589A6821BBDA2F4674B48C /* AppDelegate.m */, 148 | D2589A83D0A856EEBABC8D3A /* Images.xcassets */, 149 | D2589A63E4E9933CB48E46FA /* ViewController.m */, 150 | D25891B8038AB90439AC3EBA /* ViewController.h */, 151 | D25893A7CD3FFCC54EED070A /* DraggableView.m */, 152 | D2589AD821581F5541A6F31C /* DraggableView.h */, 153 | D25898CFCC607D0307115246 /* MainView.m */, 154 | D2589E8EC427BD0D8B6ABFA2 /* MainView.h */, 155 | D25892B5BD6A4F28221D6396 /* PaneBehavior.m */, 156 | D2589FC20AAC45E54196AE55 /* PaneBehavior.h */, 157 | ); 158 | path = "Interactive UIDynamics"; 159 | sourceTree = ""; 160 | }; 161 | D2589CF9ED0DDB83C5D07DE8 /* Frameworks */ = { 162 | isa = PBXGroup; 163 | children = ( 164 | D2589471BBD1EC16EF0053F3 /* Foundation.framework */, 165 | D2589777E63D19B5BA97C928 /* CoreGraphics.framework */, 166 | D258986F8FADA668EE1CE1E1 /* UIKit.framework */, 167 | D2589F8CD899FBC3F293129D /* CoreData.framework */, 168 | D2589AD24C7463B9BE6C2B1B /* XCTest.framework */, 169 | ); 170 | name = Frameworks; 171 | sourceTree = ""; 172 | }; 173 | /* End PBXGroup section */ 174 | 175 | /* Begin PBXNativeTarget section */ 176 | D2589011CB032D2C4D30D7CF /* Interactive UIDynamics */ = { 177 | isa = PBXNativeTarget; 178 | buildConfigurationList = D25890945C35B1A0DA87AFFE /* Build configuration list for PBXNativeTarget "Interactive UIDynamics" */; 179 | buildPhases = ( 180 | D25890066805B8260DC6A290 /* Sources */, 181 | D2589E1EF1A9D6331C56DFB7 /* Frameworks */, 182 | D2589B01D5204873686F701B /* Resources */, 183 | ); 184 | buildRules = ( 185 | ); 186 | dependencies = ( 187 | ); 188 | name = "Interactive UIDynamics"; 189 | productName = "Interactive UIDynamics"; 190 | productReference = D2589510CA477531F85B444C /* Interactive UIDynamics.app */; 191 | productType = "com.apple.product-type.application"; 192 | }; 193 | D258995C8ACBAE24B9602155 /* Interactive UIDynamicsTests */ = { 194 | isa = PBXNativeTarget; 195 | buildConfigurationList = D2589F525E9D27DF6F82B89F /* Build configuration list for PBXNativeTarget "Interactive UIDynamicsTests" */; 196 | buildPhases = ( 197 | D25891444C552488C0D91ACF /* Sources */, 198 | D2589C886816ED1349BDA475 /* Frameworks */, 199 | D2589B22855C2C04D4361D10 /* Resources */, 200 | ); 201 | buildRules = ( 202 | ); 203 | dependencies = ( 204 | D25892AF469AC663E6F30C41 /* PBXTargetDependency */, 205 | ); 206 | name = "Interactive UIDynamicsTests"; 207 | productName = "Interactive UIDynamicsTests"; 208 | productReference = D2589521B8D588EC76153926 /* Interactive UIDynamicsTests.xctest */; 209 | productType = "com.apple.product-type.bundle.unit-test"; 210 | }; 211 | /* End PBXNativeTarget section */ 212 | 213 | /* Begin PBXProject section */ 214 | D2589BCE91F43E6360767BB1 /* Project object */ = { 215 | isa = PBXProject; 216 | attributes = { 217 | ORGANIZATIONNAME = "___FULLUSERNAME___"; 218 | }; 219 | buildConfigurationList = D2589F0E585109662C188D8F /* Build configuration list for PBXProject "Interactive UIDynamics" */; 220 | compatibilityVersion = "Xcode 3.2"; 221 | developmentRegion = English; 222 | hasScannedForEncodings = 0; 223 | knownRegions = ( 224 | en, 225 | ); 226 | mainGroup = D25896AFAF06A48CA0AD4F8D; 227 | productRefGroup = D258902541D46724F10B2FEA /* Products */; 228 | projectDirPath = ""; 229 | projectRoot = ""; 230 | targets = ( 231 | D2589011CB032D2C4D30D7CF /* Interactive UIDynamics */, 232 | D258995C8ACBAE24B9602155 /* Interactive UIDynamicsTests */, 233 | ); 234 | }; 235 | /* End PBXProject section */ 236 | 237 | /* Begin PBXResourcesBuildPhase section */ 238 | D2589B01D5204873686F701B /* Resources */ = { 239 | isa = PBXResourcesBuildPhase; 240 | buildActionMask = 2147483647; 241 | files = ( 242 | D2589F364B8654A1C9A7EA6F /* InfoPlist.strings in Resources */, 243 | D2589585B1A651B38978BE96 /* Images.xcassets in Resources */, 244 | ); 245 | runOnlyForDeploymentPostprocessing = 0; 246 | }; 247 | D2589B22855C2C04D4361D10 /* Resources */ = { 248 | isa = PBXResourcesBuildPhase; 249 | buildActionMask = 2147483647; 250 | files = ( 251 | D2589CF598A283C905F080CE /* InfoPlist.strings in Resources */, 252 | ); 253 | runOnlyForDeploymentPostprocessing = 0; 254 | }; 255 | /* End PBXResourcesBuildPhase section */ 256 | 257 | /* Begin PBXSourcesBuildPhase section */ 258 | D25890066805B8260DC6A290 /* Sources */ = { 259 | isa = PBXSourcesBuildPhase; 260 | buildActionMask = 2147483647; 261 | files = ( 262 | D2589D032E8A812F5E3628A0 /* main.m in Sources */, 263 | D25899DAEFEEDC5E296B4169 /* AppDelegate.m in Sources */, 264 | D25893CF0D6FF62979EA036C /* ViewController.m in Sources */, 265 | D25890491B100BC98919B257 /* DraggableView.m in Sources */, 266 | D2589AAC0EF09C8003292246 /* MainView.m in Sources */, 267 | D258953A83E17F5F2BDAF839 /* PaneBehavior.m in Sources */, 268 | ); 269 | runOnlyForDeploymentPostprocessing = 0; 270 | }; 271 | D25891444C552488C0D91ACF /* Sources */ = { 272 | isa = PBXSourcesBuildPhase; 273 | buildActionMask = 2147483647; 274 | files = ( 275 | D258992A8A108713A2A9A4D3 /* Interactive_UIDynamicsTests.m in Sources */, 276 | ); 277 | runOnlyForDeploymentPostprocessing = 0; 278 | }; 279 | /* End PBXSourcesBuildPhase section */ 280 | 281 | /* Begin PBXTargetDependency section */ 282 | D25892AF469AC663E6F30C41 /* PBXTargetDependency */ = { 283 | isa = PBXTargetDependency; 284 | target = D2589011CB032D2C4D30D7CF /* Interactive UIDynamics */; 285 | targetProxy = D25892E47F980BA33E8C6CED /* PBXContainerItemProxy */; 286 | }; 287 | /* End PBXTargetDependency section */ 288 | 289 | /* Begin PBXVariantGroup section */ 290 | D25892AEF87FFD6BA427DADD /* InfoPlist.strings */ = { 291 | isa = PBXVariantGroup; 292 | children = ( 293 | D2589B6AB6E50BEA5F19F85F /* en */, 294 | ); 295 | name = InfoPlist.strings; 296 | sourceTree = ""; 297 | }; 298 | D2589E85B533E11AB16A732F /* InfoPlist.strings */ = { 299 | isa = PBXVariantGroup; 300 | children = ( 301 | D258997EC55CAEB9B178BAF7 /* en */, 302 | ); 303 | name = InfoPlist.strings; 304 | sourceTree = ""; 305 | }; 306 | /* End PBXVariantGroup section */ 307 | 308 | /* Begin XCBuildConfiguration section */ 309 | D25890636D565C1FF9970695 /* Release */ = { 310 | isa = XCBuildConfiguration; 311 | buildSettings = { 312 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 313 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 314 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 315 | GCC_PREFIX_HEADER = "Interactive UIDynamics/Interactive UIDynamics-Prefix.pch"; 316 | INFOPLIST_FILE = "Interactive UIDynamics/Interactive UIDynamics-Info.plist"; 317 | PRODUCT_NAME = "$(TARGET_NAME)"; 318 | WRAPPER_EXTENSION = app; 319 | }; 320 | name = Release; 321 | }; 322 | D25892DB8C3792D54F28EFC1 /* Debug */ = { 323 | isa = XCBuildConfiguration; 324 | buildSettings = { 325 | ALWAYS_SEARCH_USER_PATHS = NO; 326 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 327 | CLANG_CXX_LIBRARY = "libc++"; 328 | CLANG_ENABLE_MODULES = YES; 329 | CLANG_ENABLE_OBJC_ARC = YES; 330 | CLANG_WARN_BOOL_CONVERSION = YES; 331 | CLANG_WARN_CONSTANT_CONVERSION = YES; 332 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 333 | CLANG_WARN_EMPTY_BODY = YES; 334 | CLANG_WARN_ENUM_CONVERSION = YES; 335 | CLANG_WARN_INT_CONVERSION = YES; 336 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 337 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 338 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 339 | COPY_PHASE_STRIP = NO; 340 | GCC_C_LANGUAGE_STANDARD = gnu99; 341 | GCC_DYNAMIC_NO_PIC = NO; 342 | GCC_OPTIMIZATION_LEVEL = 0; 343 | GCC_PREPROCESSOR_DEFINITIONS = ( 344 | "DEBUG=1", 345 | "$(inherited)", 346 | ); 347 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 348 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 349 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 350 | GCC_WARN_UNDECLARED_SELECTOR = YES; 351 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 352 | GCC_WARN_UNUSED_FUNCTION = YES; 353 | GCC_WARN_UNUSED_VARIABLE = YES; 354 | IPHONEOS_DEPLOYMENT_TARGET = 7.1; 355 | ONLY_ACTIVE_ARCH = YES; 356 | SDKROOT = iphoneos; 357 | }; 358 | name = Debug; 359 | }; 360 | D2589457E3C5CE25EBE909BC /* Debug */ = { 361 | isa = XCBuildConfiguration; 362 | buildSettings = { 363 | FRAMEWORK_SEARCH_PATHS = ( 364 | "$(SDKROOT)/Developer/Library/Frameworks", 365 | "$(inherited)", 366 | ); 367 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 368 | GCC_PREFIX_HEADER = "Interactive UIDynamics/Interactive UIDynamics-Prefix.pch"; 369 | INFOPLIST_FILE = "Interactive UIDynamicsTests/Interactive UIDynamicsTests-Info.plist"; 370 | PRODUCT_NAME = "$(TARGET_NAME)"; 371 | WRAPPER_EXTENSION = xctest; 372 | }; 373 | name = Debug; 374 | }; 375 | D25896174A13D16AE1356D5E /* Release */ = { 376 | isa = XCBuildConfiguration; 377 | buildSettings = { 378 | FRAMEWORK_SEARCH_PATHS = ( 379 | "$(SDKROOT)/Developer/Library/Frameworks", 380 | "$(inherited)", 381 | ); 382 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 383 | GCC_PREFIX_HEADER = "Interactive UIDynamics/Interactive UIDynamics-Prefix.pch"; 384 | INFOPLIST_FILE = "Interactive UIDynamicsTests/Interactive UIDynamicsTests-Info.plist"; 385 | PRODUCT_NAME = "$(TARGET_NAME)"; 386 | WRAPPER_EXTENSION = xctest; 387 | }; 388 | name = Release; 389 | }; 390 | D258979ACDB7A481E23BC71A /* Debug */ = { 391 | isa = XCBuildConfiguration; 392 | buildSettings = { 393 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 394 | ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; 395 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 396 | GCC_PREFIX_HEADER = "Interactive UIDynamics/Interactive UIDynamics-Prefix.pch"; 397 | INFOPLIST_FILE = "Interactive UIDynamics/Interactive UIDynamics-Info.plist"; 398 | PRODUCT_NAME = "$(TARGET_NAME)"; 399 | WRAPPER_EXTENSION = app; 400 | }; 401 | name = Debug; 402 | }; 403 | D2589C84F068E160D035E597 /* Release */ = { 404 | isa = XCBuildConfiguration; 405 | buildSettings = { 406 | ALWAYS_SEARCH_USER_PATHS = NO; 407 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 408 | CLANG_CXX_LIBRARY = "libc++"; 409 | CLANG_ENABLE_MODULES = YES; 410 | CLANG_ENABLE_OBJC_ARC = YES; 411 | CLANG_WARN_BOOL_CONVERSION = YES; 412 | CLANG_WARN_CONSTANT_CONVERSION = YES; 413 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 414 | CLANG_WARN_EMPTY_BODY = YES; 415 | CLANG_WARN_ENUM_CONVERSION = YES; 416 | CLANG_WARN_INT_CONVERSION = YES; 417 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 418 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 419 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 420 | COPY_PHASE_STRIP = YES; 421 | ENABLE_NS_ASSERTIONS = NO; 422 | GCC_C_LANGUAGE_STANDARD = gnu99; 423 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 424 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 425 | GCC_WARN_UNDECLARED_SELECTOR = YES; 426 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 427 | GCC_WARN_UNUSED_FUNCTION = YES; 428 | GCC_WARN_UNUSED_VARIABLE = YES; 429 | IPHONEOS_DEPLOYMENT_TARGET = 7.1; 430 | SDKROOT = iphoneos; 431 | VALIDATE_PRODUCT = YES; 432 | }; 433 | name = Release; 434 | }; 435 | /* End XCBuildConfiguration section */ 436 | 437 | /* Begin XCConfigurationList section */ 438 | D25890945C35B1A0DA87AFFE /* Build configuration list for PBXNativeTarget "Interactive UIDynamics" */ = { 439 | isa = XCConfigurationList; 440 | buildConfigurations = ( 441 | D25890636D565C1FF9970695 /* Release */, 442 | D258979ACDB7A481E23BC71A /* Debug */, 443 | ); 444 | defaultConfigurationIsVisible = 0; 445 | }; 446 | D2589F0E585109662C188D8F /* Build configuration list for PBXProject "Interactive UIDynamics" */ = { 447 | isa = XCConfigurationList; 448 | buildConfigurations = ( 449 | D2589C84F068E160D035E597 /* Release */, 450 | D25892DB8C3792D54F28EFC1 /* Debug */, 451 | ); 452 | defaultConfigurationIsVisible = 0; 453 | defaultConfigurationName = Release; 454 | }; 455 | D2589F525E9D27DF6F82B89F /* Build configuration list for PBXNativeTarget "Interactive UIDynamicsTests" */ = { 456 | isa = XCConfigurationList; 457 | buildConfigurations = ( 458 | D25896174A13D16AE1356D5E /* Release */, 459 | D2589457E3C5CE25EBE909BC /* Debug */, 460 | ); 461 | defaultConfigurationIsVisible = 0; 462 | }; 463 | /* End XCConfigurationList section */ 464 | }; 465 | rootObject = D2589BCE91F43E6360767BB1 /* Project object */; 466 | } 467 | -------------------------------------------------------------------------------- /Interactive UIDynamics/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // Interactive UIDynamics 4 | // 5 | // Created by Florian on 21/04/14. 6 | // Copyright (c) 2014 Florian. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : UIResponder 12 | 13 | @property (strong, nonatomic) UIWindow *window; 14 | 15 | @end -------------------------------------------------------------------------------- /Interactive UIDynamics/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // Interactive UIDynamics 4 | // 5 | // Created by Florian on 21/04/14. 6 | // Copyright (c) 2014 Florian. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | #import "ViewController.h" 11 | 12 | 13 | @implementation AppDelegate 14 | 15 | - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 16 | { 17 | self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 18 | self.window.rootViewController = [[ViewController alloc] init]; 19 | [self.window makeKeyAndVisible]; 20 | return YES; 21 | } 22 | 23 | @end -------------------------------------------------------------------------------- /Interactive UIDynamics/DraggableView.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Florian on 21/04/14. 3 | // 4 | // To change the template use AppCode | Preferences | File Templates. 5 | // 6 | 7 | 8 | #import 9 | 10 | 11 | @class DraggableView; 12 | 13 | 14 | @protocol DraggableViewDelegate 15 | 16 | - (void)draggableView:(DraggableView *)view draggingEndedWithVelocity:(CGPoint)velocity; 17 | - (void)draggableViewBeganDragging:(DraggableView *)view; 18 | 19 | @end 20 | 21 | 22 | @interface DraggableView : UIView 23 | 24 | @property (nonatomic, weak) id delegate; 25 | 26 | @end -------------------------------------------------------------------------------- /Interactive UIDynamics/DraggableView.m: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Florian on 21/04/14. 3 | // 4 | // To change the template use AppCode | Preferences | File Templates. 5 | // 6 | 7 | 8 | #import "DraggableView.h" 9 | 10 | 11 | @implementation DraggableView 12 | 13 | - (id)initWithFrame:(CGRect)frame 14 | { 15 | self = [super initWithFrame:frame]; 16 | if (self) { 17 | [self setup]; 18 | } 19 | return self; 20 | } 21 | 22 | - (void)setup 23 | { 24 | UIPanGestureRecognizer *recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(didPan:)]; 25 | [self addGestureRecognizer:recognizer]; 26 | } 27 | 28 | - (void)didPan:(UIPanGestureRecognizer *)recognizer 29 | { 30 | CGPoint point = [recognizer translationInView:self.superview]; 31 | self.center = CGPointMake(self.center.x, self.center.y + point.y); 32 | [recognizer setTranslation:CGPointZero inView:self.superview]; 33 | if (recognizer.state == UIGestureRecognizerStateEnded) { 34 | CGPoint velocity = [recognizer velocityInView:self.superview]; 35 | velocity.x = 0; 36 | [self.delegate draggableView:self draggingEndedWithVelocity:velocity]; 37 | } else if (recognizer.state == UIGestureRecognizerStateBegan) { 38 | [self.delegate draggableViewBeganDragging:self]; 39 | } 40 | } 41 | 42 | @end -------------------------------------------------------------------------------- /Interactive UIDynamics/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "29x29", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "40x40", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "60x60", 16 | "scale" : "2x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Interactive UIDynamics/Images.xcassets/LaunchImage.launchimage/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "orientation" : "portrait", 5 | "idiom" : "iphone", 6 | "extent" : "full-screen", 7 | "minimum-system-version" : "7.0", 8 | "scale" : "2x" 9 | }, 10 | { 11 | "orientation" : "portrait", 12 | "idiom" : "iphone", 13 | "subtype" : "retina4", 14 | "extent" : "full-screen", 15 | "minimum-system-version" : "7.0", 16 | "scale" : "2x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /Interactive UIDynamics/Interactive UIDynamics-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CFBundleIdentifier 7 | de.floriankugler.${PRODUCT_NAME:rfc1034identifier} 8 | 9 | CFBundleDevelopmentRegion 10 | en 11 | CFBundleExecutable 12 | ${EXECUTABLE_NAME} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleSignature 20 | ???? 21 | 22 | CFBundleDisplayName 23 | ${PRODUCT_NAME} 24 | CFBundleVersion 25 | 1.0 26 | CFBundleShortVersionString 27 | 1.0 28 | LSRequiresIPhoneOS 29 | 30 | UIRequiredDeviceCapabilities 31 | 32 | armv7 33 | 34 | UISupportedInterfaceOrientations 35 | 36 | UIInterfaceOrientationPortrait 37 | UIInterfaceOrientationLandscapeLeft 38 | UIInterfaceOrientationLandscapeRight 39 | 40 | 41 | -------------------------------------------------------------------------------- /Interactive UIDynamics/Interactive UIDynamics-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_3_0 10 | #warning "This project uses features only available in iOS SDK 3.0 and later." 11 | #endif 12 | 13 | #ifdef __OBJC__ 14 | #import 15 | 16 | #import 17 | 18 | #import 19 | #endif -------------------------------------------------------------------------------- /Interactive UIDynamics/Interactive_UIDynamics.xcdatamodeld/.xccurrentversion: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | _XCCurrentVersionName 6 | Interactive_UIDynamics.xcdatamodel 7 | 8 | 9 | -------------------------------------------------------------------------------- /Interactive UIDynamics/MainView.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Florian on 02/05/14. 3 | // 4 | // To change the template use AppCode | Preferences | File Templates. 5 | // 6 | 7 | 8 | #import 9 | 10 | 11 | @class DraggableView; 12 | @class PaneBehavior; 13 | 14 | 15 | typedef NS_ENUM(NSInteger, PaneState) { 16 | PaneStateOpen, 17 | PaneStateClosed, 18 | }; 19 | 20 | 21 | @interface MainView : UIView 22 | 23 | @property (nonatomic, readonly) PaneState paneState; 24 | 25 | @end -------------------------------------------------------------------------------- /Interactive UIDynamics/MainView.m: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Florian on 02/05/14. 3 | // 4 | // To change the template use AppCode | Preferences | File Templates. 5 | // 6 | 7 | 8 | #import "MainView.h" 9 | #import "DraggableView.h" 10 | #import "PaneBehavior.h" 11 | 12 | 13 | @interface MainView () 14 | 15 | @property (nonatomic) PaneState paneState; 16 | @property (nonatomic) DraggableView *pane; 17 | @property (nonatomic) UIDynamicAnimator *animator; 18 | @property (nonatomic, strong) PaneBehavior *paneBehavior; 19 | 20 | @end 21 | 22 | 23 | @implementation MainView 24 | 25 | - (id)initWithFrame:(CGRect)frame 26 | { 27 | self = [super initWithFrame:frame]; 28 | if (self) { 29 | [self setup]; 30 | } 31 | return self; 32 | } 33 | 34 | - (void)setup 35 | { 36 | self.backgroundColor = [UIColor whiteColor]; 37 | 38 | CGSize size = self.bounds.size; 39 | self.paneState = PaneStateClosed; 40 | self.pane = [[DraggableView alloc] initWithFrame:CGRectMake(0, size.height * .75, size.width, size.height)]; 41 | self.pane.backgroundColor = [UIColor grayColor]; 42 | self.pane.layer.cornerRadius = 8; 43 | self.pane.delegate = self; 44 | [self addSubview:self.pane]; 45 | 46 | self.animator = [[UIDynamicAnimator alloc] initWithReferenceView:self]; 47 | 48 | UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(didTap:)]; 49 | [self addGestureRecognizer:tapRecognizer]; 50 | } 51 | 52 | - (void)animatePaneWithInitialVelocity:(CGPoint)initialVelocity 53 | { 54 | if (!self.paneBehavior) { 55 | PaneBehavior *behavior = [[PaneBehavior alloc] initWithItem:self.pane]; 56 | self.paneBehavior = behavior; 57 | } 58 | self.paneBehavior.targetPoint = self.targetPoint; 59 | self.paneBehavior.velocity = initialVelocity; 60 | [self.animator addBehavior:self.paneBehavior]; 61 | } 62 | 63 | - (CGPoint)targetPoint 64 | { 65 | CGSize size = self.bounds.size; 66 | return self.paneState == PaneStateClosed > 0 ? CGPointMake(size.width/2, size.height * 1.25) : CGPointMake(size.width/2, size.height/2 + 50); 67 | } 68 | 69 | 70 | #pragma mark DraggableViewDelegate 71 | 72 | - (void)draggableView:(DraggableView *)view draggingEndedWithVelocity:(CGPoint)velocity 73 | { 74 | PaneState targetState = velocity.y >= 0 ? PaneStateClosed : PaneStateOpen; 75 | self.paneState = targetState; 76 | [self animatePaneWithInitialVelocity:velocity]; 77 | } 78 | 79 | - (void)draggableViewBeganDragging:(DraggableView *)view 80 | { 81 | [self.animator removeAllBehaviors]; 82 | } 83 | 84 | 85 | #pragma mark Actions 86 | 87 | - (void)didTap:(UITapGestureRecognizer *)tapRecognizer 88 | { 89 | self.paneState = self.paneState == PaneStateOpen ? PaneStateClosed : PaneStateOpen; 90 | [self animatePaneWithInitialVelocity:self.paneBehavior.velocity]; 91 | } 92 | 93 | @end -------------------------------------------------------------------------------- /Interactive UIDynamics/PaneBehavior.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Florian on 02/05/14. 3 | // 4 | // To change the template use AppCode | Preferences | File Templates. 5 | // 6 | 7 | 8 | #import 9 | 10 | 11 | @interface PaneBehavior : UIDynamicBehavior 12 | 13 | @property (nonatomic) CGPoint targetPoint; 14 | @property (nonatomic) CGPoint velocity; 15 | 16 | - (instancetype)initWithItem:(id )item; 17 | 18 | @end -------------------------------------------------------------------------------- /Interactive UIDynamics/PaneBehavior.m: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Florian on 02/05/14. 3 | // 4 | // To change the template use AppCode | Preferences | File Templates. 5 | // 6 | 7 | 8 | #import "PaneBehavior.h" 9 | 10 | 11 | @interface PaneBehavior () 12 | 13 | @property (nonatomic, strong) UIAttachmentBehavior *attachmentBehavior; 14 | @property (nonatomic, strong) UIDynamicItemBehavior *itemBehavior; 15 | @property (nonatomic, strong) id item; 16 | @end 17 | 18 | 19 | @implementation PaneBehavior 20 | 21 | - (instancetype)initWithItem:(id )item 22 | { 23 | self = [super init]; 24 | if (self) { 25 | self.item = item; 26 | [self setup]; 27 | } 28 | return self; 29 | } 30 | 31 | - (void)setup 32 | { 33 | UIAttachmentBehavior *attachmentBehavior = [[UIAttachmentBehavior alloc] initWithItem:self.item attachedToAnchor:CGPointZero]; 34 | attachmentBehavior.frequency = 3.5; 35 | attachmentBehavior.damping = .4; 36 | attachmentBehavior.length = 0; 37 | [self addChildBehavior:attachmentBehavior]; 38 | self.attachmentBehavior = attachmentBehavior; 39 | 40 | UIDynamicItemBehavior *itemBehavior = [[UIDynamicItemBehavior alloc] initWithItems:@[self.item]]; 41 | itemBehavior.density = 100; 42 | itemBehavior.resistance = 10; 43 | [self addChildBehavior:itemBehavior]; 44 | self.itemBehavior = itemBehavior; 45 | } 46 | 47 | - (void)setTargetPoint:(CGPoint)targetPoint 48 | { 49 | _targetPoint = targetPoint; 50 | self.attachmentBehavior.anchorPoint = targetPoint; 51 | } 52 | 53 | - (void)setVelocity:(CGPoint)velocity 54 | { 55 | _velocity = velocity; 56 | CGPoint currentVelocity = [self.itemBehavior linearVelocityForItem:self.item]; 57 | CGPoint velocityDelta = CGPointMake(velocity.x - currentVelocity.x, velocity.y - currentVelocity.y); 58 | [self.itemBehavior addLinearVelocity:velocityDelta forItem:self.item]; 59 | } 60 | 61 | @end -------------------------------------------------------------------------------- /Interactive UIDynamics/ViewController.h: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Florian on 21/04/14. 3 | // 4 | // To change the template use AppCode | Preferences | File Templates. 5 | // 6 | 7 | 8 | #import 9 | 10 | 11 | @interface ViewController : UIViewController 12 | @end -------------------------------------------------------------------------------- /Interactive UIDynamics/ViewController.m: -------------------------------------------------------------------------------- 1 | // 2 | // Created by Florian on 21/04/14. 3 | // 4 | // To change the template use AppCode | Preferences | File Templates. 5 | // 6 | 7 | 8 | #import "ViewController.h" 9 | #import "MainView.h" 10 | 11 | 12 | @implementation ViewController 13 | 14 | - (void)loadView 15 | { 16 | [super loadView]; 17 | 18 | MainView *mainView = [[MainView alloc] initWithFrame:self.view.bounds]; 19 | [self.view addSubview:mainView]; 20 | } 21 | 22 | @end -------------------------------------------------------------------------------- /Interactive UIDynamics/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | -------------------------------------------------------------------------------- /Interactive UIDynamics/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // Interactive UIDynamics 4 | // 5 | // Created by Florian on 21/04/14. 6 | // Copyright (c) 2014 Florian. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | #import "AppDelegate.h" 12 | 13 | int main(int argc, char * argv[]) 14 | { 15 | @autoreleasepool { 16 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 17 | } 18 | 19 | } -------------------------------------------------------------------------------- /Interactive UIDynamicsTests/Interactive UIDynamicsTests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | CFBundleIdentifier 7 | de.floriankugler.${PRODUCT_NAME:rfc1034identifier} 8 | 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleShortVersionString 14 | 1.0 15 | CFBundleVersion 16 | 1 17 | CFBundleDevelopmentRegion 18 | en 19 | CFBundlePackageType 20 | BNDL 21 | CFBundleSignature 22 | ???? 23 | 24 | 25 | -------------------------------------------------------------------------------- /Interactive UIDynamicsTests/Interactive_UIDynamicsTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // Interactive_UIDynamicsTests.m 3 | // Interactive UIDynamicsTests 4 | // 5 | // Created by Florian on 21/04/14. 6 | // Copyright (c) 2014 Florian. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface Interactive_UIDynamicsTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation Interactive_UIDynamicsTests 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 | -------------------------------------------------------------------------------- /Interactive UIDynamicsTests/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | --------------------------------------------------------------------------------