├── .DS_Store ├── .gitignore ├── ARSolar.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcuserdata │ │ └── mohamedhegab.xcuserdatad │ │ └── UserInterfaceState.xcuserstate └── xcuserdata │ └── mohamedhegab.xcuserdatad │ └── xcdebugger │ └── Breakpoints_v2.xcbkptlist ├── ARSolar ├── ARSolar.entitlements ├── AppDelegate.swift ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-App-20x20@1x.png │ │ ├── Icon-App-20x20@2x-1.png │ │ ├── Icon-App-20x20@2x.png │ │ ├── Icon-App-20x20@3x.png │ │ ├── Icon-App-29x29@1x.png │ │ ├── Icon-App-29x29@2x-1.png │ │ ├── Icon-App-29x29@2x.png │ │ ├── Icon-App-29x29@3x.png │ │ ├── Icon-App-40x40@1x.png │ │ ├── Icon-App-40x40@2x-1.png │ │ ├── Icon-App-40x40@2x.png │ │ ├── Icon-App-40x40@3x.png │ │ ├── Icon-App-60x60@2x.png │ │ ├── Icon-App-60x60@3x.png │ │ ├── Icon-App-76x76@1x.png │ │ ├── Icon-App-76x76@2x.png │ │ ├── Icon-App-83.5x83.5@2x.png │ │ └── ItunesArtwork@2x.png │ ├── Contents.json │ ├── Earth │ │ ├── Contents.json │ │ ├── earth-cloud.imageset │ │ │ ├── Contents.json │ │ │ └── earth-cloud.png │ │ ├── earth-cloud1.imageset │ │ │ ├── Contents.json │ │ │ └── earth-cloud.jpg │ │ ├── earth-day.imageset │ │ │ ├── Contents.json │ │ │ └── earth-day.jpg │ │ ├── earth-spec.imageset │ │ │ ├── Contents.json │ │ │ └── earth-spec.png │ │ ├── earth-specular.imageset │ │ │ ├── Contents.json │ │ │ └── earth-specular.jpg │ │ ├── earth_night.imageset │ │ │ ├── Contents.json │ │ │ └── earth_nightmap.jpg │ │ ├── earth_normal.imageset │ │ │ ├── Contents.json │ │ │ └── earth_normal.png │ │ └── moon.imageset │ │ │ ├── Contents.json │ │ │ └── moon.png │ ├── Jupiter │ │ ├── Contents.json │ │ └── jupiter.imageset │ │ │ ├── Contents.json │ │ │ └── jupiter.png │ ├── Mars │ │ ├── Contents.json │ │ └── mars.imageset │ │ │ ├── Contents.json │ │ │ └── mars.jpg │ ├── Mercury │ │ ├── Contents.json │ │ └── mercury.imageset │ │ │ ├── Contents.json │ │ │ └── mercury.jpg │ ├── Neptune │ │ ├── Contents.json │ │ └── neptune.imageset │ │ │ ├── Contents.json │ │ │ └── neptune.jpg │ ├── Saturn │ │ ├── Contents.json │ │ ├── saturn.imageset │ │ │ ├── Contents.json │ │ │ └── saturn.png │ │ ├── saturnRings.imageset │ │ │ ├── Contents.json │ │ │ └── saturnRings.png │ │ └── saturnringcolor.imageset │ │ │ ├── Contents.json │ │ │ └── saturnringcolor.jpg │ ├── Splash │ │ ├── Contents.json │ │ └── Default.imageset │ │ │ ├── Contents.json │ │ │ ├── Default.png │ │ │ ├── Default@2x.png │ │ │ └── Default@3x.png │ ├── Sun │ │ ├── Contents.json │ │ └── Sun Diffuse.imageset │ │ │ ├── Contents.json │ │ │ └── sun.png │ ├── Uranus │ │ ├── Contents.json │ │ └── uranus.imageset │ │ │ ├── Contents.json │ │ │ └── uranus.jpg │ ├── Venus │ │ ├── Contents.json │ │ ├── venus_Atmospher.imageset │ │ │ ├── Contents.json │ │ │ └── venus_Atmospher.png │ │ └── venus_surface.imageset │ │ │ ├── Contents.json │ │ │ └── venus_surface.png │ ├── galaxy.imageset │ │ ├── Contents.json │ │ └── galaxy.png │ ├── light.imageset │ │ ├── Contents.json │ │ └── light.png │ ├── orbits.imageset │ │ ├── Contents.json │ │ └── orbits.png │ └── planets.imageset │ │ ├── Contents.json │ │ └── planets.png ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── Helpers │ ├── MHButton.swift │ └── Queue.swift ├── Info.plist ├── Resource │ ├── ar.lproj │ │ └── InfoPlist.strings │ └── de.lproj │ │ └── InfoPlist.strings ├── Solar.scnassets │ ├── stars_milky_way.png │ └── universe.scn ├── SolarNode.swift └── SolarViewController.swift ├── ARSolarTests ├── Info.plist └── PlanetsTests.swift ├── README.md ├── fastlane ├── .gitignore ├── Appfile ├── Fastfile └── README.md └── preview.gif /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/.DS_Store -------------------------------------------------------------------------------- /.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 | ## Playgrounds 32 | timeline.xctimeline 33 | playground.xcworkspace 34 | 35 | # Swift Package Manager 36 | # 37 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 38 | # Packages/ 39 | # Package.pins 40 | # Package.resolved 41 | .build/ 42 | 43 | # CocoaPods 44 | # 45 | # We recommend against adding the Pods directory to your .gitignore. However 46 | # you should judge for yourself, the pros and cons are mentioned at: 47 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 48 | # 49 | # Pods/ 50 | 51 | # Carthage 52 | # 53 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 54 | # Carthage/Checkouts 55 | 56 | Carthage/Build 57 | 58 | # fastlane 59 | # 60 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 61 | # screenshots whenever they are needed. 62 | # For more information about the recommended setup visit: 63 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 64 | 65 | fastlane/report.xml 66 | fastlane/Preview.html 67 | fastlane/screenshots 68 | fastlane/test_output 69 | -------------------------------------------------------------------------------- /ARSolar.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 48; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | A533FC181FB84A8B008A3439 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = A533FC171FB84A8B008A3439 /* AppDelegate.swift */; }; 11 | A533FC1A1FB84A8B008A3439 /* SolarViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A533FC191FB84A8B008A3439 /* SolarViewController.swift */; }; 12 | A533FC1D1FB84A8B008A3439 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A533FC1B1FB84A8B008A3439 /* Main.storyboard */; }; 13 | A533FC1F1FB84A8B008A3439 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A533FC1E1FB84A8B008A3439 /* Assets.xcassets */; }; 14 | A533FC221FB84A8B008A3439 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = A533FC201FB84A8B008A3439 /* LaunchScreen.storyboard */; }; 15 | A533FC2D1FB84A8B008A3439 /* PlanetsTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = A533FC2C1FB84A8B008A3439 /* PlanetsTests.swift */; }; 16 | A542B9781FD349C3002AD184 /* SolarNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = A542B9771FD349C3002AD184 /* SolarNode.swift */; }; 17 | A54423D51FC1C781000784FB /* Solar.scnassets in Resources */ = {isa = PBXBuildFile; fileRef = A54423D41FC1C781000784FB /* Solar.scnassets */; }; 18 | A5A4FBA81FDB084300E430D6 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = A5A4FBAA1FDB084300E430D6 /* InfoPlist.strings */; }; 19 | A5A4FBAD1FDB08DD00E430D6 /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = A5A4FBAC1FDB08DD00E430D6 /* Info.plist */; }; 20 | A5B48AF91FD9BFE70094A5F2 /* MHButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5B48AF81FD9BFE70094A5F2 /* MHButton.swift */; }; 21 | A5D4FEF31FBA288D00912892 /* Queue.swift in Sources */ = {isa = PBXBuildFile; fileRef = A5D4FEF21FBA288C00912892 /* Queue.swift */; }; 22 | /* End PBXBuildFile section */ 23 | 24 | /* Begin PBXContainerItemProxy section */ 25 | A533FC291FB84A8B008A3439 /* PBXContainerItemProxy */ = { 26 | isa = PBXContainerItemProxy; 27 | containerPortal = A533FC0C1FB84A8B008A3439 /* Project object */; 28 | proxyType = 1; 29 | remoteGlobalIDString = A533FC131FB84A8B008A3439; 30 | remoteInfo = Planets; 31 | }; 32 | /* End PBXContainerItemProxy section */ 33 | 34 | /* Begin PBXFileReference section */ 35 | A533FC141FB84A8B008A3439 /* ARSolar.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = ARSolar.app; sourceTree = BUILT_PRODUCTS_DIR; }; 36 | A533FC171FB84A8B008A3439 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 37 | A533FC191FB84A8B008A3439 /* SolarViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SolarViewController.swift; sourceTree = ""; }; 38 | A533FC1C1FB84A8B008A3439 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 39 | A533FC1E1FB84A8B008A3439 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 40 | A533FC211FB84A8B008A3439 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 41 | A533FC281FB84A8B008A3439 /* ARSolarTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = ARSolarTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 42 | A533FC2C1FB84A8B008A3439 /* PlanetsTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PlanetsTests.swift; sourceTree = ""; }; 43 | A533FC2E1FB84A8B008A3439 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 44 | A542B9771FD349C3002AD184 /* SolarNode.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SolarNode.swift; sourceTree = ""; }; 45 | A54423D41FC1C781000784FB /* Solar.scnassets */ = {isa = PBXFileReference; lastKnownFileType = wrapper.scnassets; path = Solar.scnassets; sourceTree = ""; }; 46 | A5A4FBA91FDB084300E430D6 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/InfoPlist.strings; sourceTree = ""; }; 47 | A5A4FBAB1FDB089600E430D6 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; 48 | A5A4FBAC1FDB08DD00E430D6 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = ARSolar/Info.plist; sourceTree = SOURCE_ROOT; }; 49 | A5B48AF81FD9BFE70094A5F2 /* MHButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MHButton.swift; sourceTree = ""; }; 50 | A5D4FEF21FBA288C00912892 /* Queue.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Queue.swift; sourceTree = ""; }; 51 | A5D506C41FD89E930030D506 /* ARSolar.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = ARSolar.entitlements; sourceTree = ""; }; 52 | /* End PBXFileReference section */ 53 | 54 | /* Begin PBXFrameworksBuildPhase section */ 55 | A533FC111FB84A8B008A3439 /* Frameworks */ = { 56 | isa = PBXFrameworksBuildPhase; 57 | buildActionMask = 2147483647; 58 | files = ( 59 | ); 60 | runOnlyForDeploymentPostprocessing = 0; 61 | }; 62 | A533FC251FB84A8B008A3439 /* Frameworks */ = { 63 | isa = PBXFrameworksBuildPhase; 64 | buildActionMask = 2147483647; 65 | files = ( 66 | ); 67 | runOnlyForDeploymentPostprocessing = 0; 68 | }; 69 | /* End PBXFrameworksBuildPhase section */ 70 | 71 | /* Begin PBXGroup section */ 72 | A533FC0B1FB84A8B008A3439 = { 73 | isa = PBXGroup; 74 | children = ( 75 | A533FC161FB84A8B008A3439 /* ARSolar */, 76 | A533FC2B1FB84A8B008A3439 /* ARSolarTests */, 77 | A533FC151FB84A8B008A3439 /* Products */, 78 | ); 79 | sourceTree = ""; 80 | }; 81 | A533FC151FB84A8B008A3439 /* Products */ = { 82 | isa = PBXGroup; 83 | children = ( 84 | A533FC141FB84A8B008A3439 /* ARSolar.app */, 85 | A533FC281FB84A8B008A3439 /* ARSolarTests.xctest */, 86 | ); 87 | name = Products; 88 | sourceTree = ""; 89 | }; 90 | A533FC161FB84A8B008A3439 /* ARSolar */ = { 91 | isa = PBXGroup; 92 | children = ( 93 | A5D506C41FD89E930030D506 /* ARSolar.entitlements */, 94 | A533FC171FB84A8B008A3439 /* AppDelegate.swift */, 95 | A533FC191FB84A8B008A3439 /* SolarViewController.swift */, 96 | A542B9771FD349C3002AD184 /* SolarNode.swift */, 97 | A5B48AF71FD9BFD50094A5F2 /* Helpers */, 98 | A54423D41FC1C781000784FB /* Solar.scnassets */, 99 | A533FC1B1FB84A8B008A3439 /* Main.storyboard */, 100 | A533FC1E1FB84A8B008A3439 /* Assets.xcassets */, 101 | A533FC201FB84A8B008A3439 /* LaunchScreen.storyboard */, 102 | A5A4FBA51FDB077900E430D6 /* Resource */, 103 | ); 104 | path = ARSolar; 105 | sourceTree = ""; 106 | }; 107 | A533FC2B1FB84A8B008A3439 /* ARSolarTests */ = { 108 | isa = PBXGroup; 109 | children = ( 110 | A533FC2C1FB84A8B008A3439 /* PlanetsTests.swift */, 111 | A533FC2E1FB84A8B008A3439 /* Info.plist */, 112 | ); 113 | path = ARSolarTests; 114 | sourceTree = ""; 115 | }; 116 | A5A4FBA51FDB077900E430D6 /* Resource */ = { 117 | isa = PBXGroup; 118 | children = ( 119 | A5A4FBAC1FDB08DD00E430D6 /* Info.plist */, 120 | A5A4FBAA1FDB084300E430D6 /* InfoPlist.strings */, 121 | ); 122 | path = Resource; 123 | sourceTree = ""; 124 | }; 125 | A5B48AF71FD9BFD50094A5F2 /* Helpers */ = { 126 | isa = PBXGroup; 127 | children = ( 128 | A5D4FEF21FBA288C00912892 /* Queue.swift */, 129 | A5B48AF81FD9BFE70094A5F2 /* MHButton.swift */, 130 | ); 131 | path = Helpers; 132 | sourceTree = ""; 133 | }; 134 | /* End PBXGroup section */ 135 | 136 | /* Begin PBXNativeTarget section */ 137 | A533FC131FB84A8B008A3439 /* ARSolar */ = { 138 | isa = PBXNativeTarget; 139 | buildConfigurationList = A533FC311FB84A8B008A3439 /* Build configuration list for PBXNativeTarget "ARSolar" */; 140 | buildPhases = ( 141 | A533FC101FB84A8B008A3439 /* Sources */, 142 | A533FC111FB84A8B008A3439 /* Frameworks */, 143 | A533FC121FB84A8B008A3439 /* Resources */, 144 | ); 145 | buildRules = ( 146 | ); 147 | dependencies = ( 148 | ); 149 | name = ARSolar; 150 | productName = Planets; 151 | productReference = A533FC141FB84A8B008A3439 /* ARSolar.app */; 152 | productType = "com.apple.product-type.application"; 153 | }; 154 | A533FC271FB84A8B008A3439 /* ARSolarTests */ = { 155 | isa = PBXNativeTarget; 156 | buildConfigurationList = A533FC341FB84A8B008A3439 /* Build configuration list for PBXNativeTarget "ARSolarTests" */; 157 | buildPhases = ( 158 | A533FC241FB84A8B008A3439 /* Sources */, 159 | A533FC251FB84A8B008A3439 /* Frameworks */, 160 | A533FC261FB84A8B008A3439 /* Resources */, 161 | ); 162 | buildRules = ( 163 | ); 164 | dependencies = ( 165 | A533FC2A1FB84A8B008A3439 /* PBXTargetDependency */, 166 | ); 167 | name = ARSolarTests; 168 | productName = PlanetsTests; 169 | productReference = A533FC281FB84A8B008A3439 /* ARSolarTests.xctest */; 170 | productType = "com.apple.product-type.bundle.unit-test"; 171 | }; 172 | /* End PBXNativeTarget section */ 173 | 174 | /* Begin PBXProject section */ 175 | A533FC0C1FB84A8B008A3439 /* Project object */ = { 176 | isa = PBXProject; 177 | attributes = { 178 | LastSwiftUpdateCheck = 0910; 179 | LastUpgradeCheck = 0910; 180 | ORGANIZATIONNAME = "Mohamed Emad Hegab"; 181 | TargetAttributes = { 182 | A533FC131FB84A8B008A3439 = { 183 | CreatedOnToolsVersion = 9.1; 184 | ProvisioningStyle = Automatic; 185 | SystemCapabilities = { 186 | com.apple.iCloud = { 187 | enabled = 0; 188 | }; 189 | }; 190 | }; 191 | A533FC271FB84A8B008A3439 = { 192 | CreatedOnToolsVersion = 9.1; 193 | ProvisioningStyle = Automatic; 194 | TestTargetID = A533FC131FB84A8B008A3439; 195 | }; 196 | }; 197 | }; 198 | buildConfigurationList = A533FC0F1FB84A8B008A3439 /* Build configuration list for PBXProject "ARSolar" */; 199 | compatibilityVersion = "Xcode 8.0"; 200 | developmentRegion = en; 201 | hasScannedForEncodings = 0; 202 | knownRegions = ( 203 | en, 204 | Base, 205 | ar, 206 | de, 207 | ); 208 | mainGroup = A533FC0B1FB84A8B008A3439; 209 | productRefGroup = A533FC151FB84A8B008A3439 /* Products */; 210 | projectDirPath = ""; 211 | projectRoot = ""; 212 | targets = ( 213 | A533FC131FB84A8B008A3439 /* ARSolar */, 214 | A533FC271FB84A8B008A3439 /* ARSolarTests */, 215 | ); 216 | }; 217 | /* End PBXProject section */ 218 | 219 | /* Begin PBXResourcesBuildPhase section */ 220 | A533FC121FB84A8B008A3439 /* Resources */ = { 221 | isa = PBXResourcesBuildPhase; 222 | buildActionMask = 2147483647; 223 | files = ( 224 | A533FC221FB84A8B008A3439 /* LaunchScreen.storyboard in Resources */, 225 | A5A4FBA81FDB084300E430D6 /* InfoPlist.strings in Resources */, 226 | A5A4FBAD1FDB08DD00E430D6 /* Info.plist in Resources */, 227 | A533FC1F1FB84A8B008A3439 /* Assets.xcassets in Resources */, 228 | A54423D51FC1C781000784FB /* Solar.scnassets in Resources */, 229 | A533FC1D1FB84A8B008A3439 /* Main.storyboard in Resources */, 230 | ); 231 | runOnlyForDeploymentPostprocessing = 0; 232 | }; 233 | A533FC261FB84A8B008A3439 /* Resources */ = { 234 | isa = PBXResourcesBuildPhase; 235 | buildActionMask = 2147483647; 236 | files = ( 237 | ); 238 | runOnlyForDeploymentPostprocessing = 0; 239 | }; 240 | /* End PBXResourcesBuildPhase section */ 241 | 242 | /* Begin PBXSourcesBuildPhase section */ 243 | A533FC101FB84A8B008A3439 /* Sources */ = { 244 | isa = PBXSourcesBuildPhase; 245 | buildActionMask = 2147483647; 246 | files = ( 247 | A533FC1A1FB84A8B008A3439 /* SolarViewController.swift in Sources */, 248 | A542B9781FD349C3002AD184 /* SolarNode.swift in Sources */, 249 | A5D4FEF31FBA288D00912892 /* Queue.swift in Sources */, 250 | A5B48AF91FD9BFE70094A5F2 /* MHButton.swift in Sources */, 251 | A533FC181FB84A8B008A3439 /* AppDelegate.swift in Sources */, 252 | ); 253 | runOnlyForDeploymentPostprocessing = 0; 254 | }; 255 | A533FC241FB84A8B008A3439 /* Sources */ = { 256 | isa = PBXSourcesBuildPhase; 257 | buildActionMask = 2147483647; 258 | files = ( 259 | A533FC2D1FB84A8B008A3439 /* PlanetsTests.swift in Sources */, 260 | ); 261 | runOnlyForDeploymentPostprocessing = 0; 262 | }; 263 | /* End PBXSourcesBuildPhase section */ 264 | 265 | /* Begin PBXTargetDependency section */ 266 | A533FC2A1FB84A8B008A3439 /* PBXTargetDependency */ = { 267 | isa = PBXTargetDependency; 268 | target = A533FC131FB84A8B008A3439 /* ARSolar */; 269 | targetProxy = A533FC291FB84A8B008A3439 /* PBXContainerItemProxy */; 270 | }; 271 | /* End PBXTargetDependency section */ 272 | 273 | /* Begin PBXVariantGroup section */ 274 | A533FC1B1FB84A8B008A3439 /* Main.storyboard */ = { 275 | isa = PBXVariantGroup; 276 | children = ( 277 | A533FC1C1FB84A8B008A3439 /* Base */, 278 | ); 279 | name = Main.storyboard; 280 | sourceTree = ""; 281 | }; 282 | A533FC201FB84A8B008A3439 /* LaunchScreen.storyboard */ = { 283 | isa = PBXVariantGroup; 284 | children = ( 285 | A533FC211FB84A8B008A3439 /* Base */, 286 | ); 287 | name = LaunchScreen.storyboard; 288 | sourceTree = ""; 289 | }; 290 | A5A4FBAA1FDB084300E430D6 /* InfoPlist.strings */ = { 291 | isa = PBXVariantGroup; 292 | children = ( 293 | A5A4FBA91FDB084300E430D6 /* ar */, 294 | A5A4FBAB1FDB089600E430D6 /* de */, 295 | ); 296 | name = InfoPlist.strings; 297 | sourceTree = ""; 298 | }; 299 | /* End PBXVariantGroup section */ 300 | 301 | /* Begin XCBuildConfiguration section */ 302 | A533FC2F1FB84A8B008A3439 /* Debug */ = { 303 | isa = XCBuildConfiguration; 304 | buildSettings = { 305 | ALWAYS_SEARCH_USER_PATHS = NO; 306 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 307 | CLANG_ANALYZER_NONNULL = YES; 308 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 309 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 310 | CLANG_CXX_LIBRARY = "libc++"; 311 | CLANG_ENABLE_MODULES = YES; 312 | CLANG_ENABLE_OBJC_ARC = YES; 313 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 314 | CLANG_WARN_BOOL_CONVERSION = YES; 315 | CLANG_WARN_COMMA = YES; 316 | CLANG_WARN_CONSTANT_CONVERSION = YES; 317 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 318 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 319 | CLANG_WARN_EMPTY_BODY = YES; 320 | CLANG_WARN_ENUM_CONVERSION = YES; 321 | CLANG_WARN_INFINITE_RECURSION = YES; 322 | CLANG_WARN_INT_CONVERSION = YES; 323 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 324 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 325 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 326 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 327 | CLANG_WARN_STRICT_PROTOTYPES = YES; 328 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 329 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 330 | CLANG_WARN_UNREACHABLE_CODE = YES; 331 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 332 | CODE_SIGN_IDENTITY = "iPhone Developer"; 333 | COPY_PHASE_STRIP = NO; 334 | DEBUG_INFORMATION_FORMAT = dwarf; 335 | ENABLE_STRICT_OBJC_MSGSEND = YES; 336 | ENABLE_TESTABILITY = YES; 337 | GCC_C_LANGUAGE_STANDARD = gnu11; 338 | GCC_DYNAMIC_NO_PIC = NO; 339 | GCC_NO_COMMON_BLOCKS = YES; 340 | GCC_OPTIMIZATION_LEVEL = 0; 341 | GCC_PREPROCESSOR_DEFINITIONS = ( 342 | "DEBUG=1", 343 | "$(inherited)", 344 | ); 345 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 346 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 347 | GCC_WARN_UNDECLARED_SELECTOR = YES; 348 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 349 | GCC_WARN_UNUSED_FUNCTION = YES; 350 | GCC_WARN_UNUSED_VARIABLE = YES; 351 | IPHONEOS_DEPLOYMENT_TARGET = 11.0; 352 | MTL_ENABLE_DEBUG_INFO = YES; 353 | ONLY_ACTIVE_ARCH = YES; 354 | SDKROOT = iphoneos; 355 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 356 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 357 | }; 358 | name = Debug; 359 | }; 360 | A533FC301FB84A8B008A3439 /* Release */ = { 361 | isa = XCBuildConfiguration; 362 | buildSettings = { 363 | ALWAYS_SEARCH_USER_PATHS = NO; 364 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 365 | CLANG_ANALYZER_NONNULL = YES; 366 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 367 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 368 | CLANG_CXX_LIBRARY = "libc++"; 369 | CLANG_ENABLE_MODULES = YES; 370 | CLANG_ENABLE_OBJC_ARC = YES; 371 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 372 | CLANG_WARN_BOOL_CONVERSION = YES; 373 | CLANG_WARN_COMMA = YES; 374 | CLANG_WARN_CONSTANT_CONVERSION = YES; 375 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 376 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 377 | CLANG_WARN_EMPTY_BODY = YES; 378 | CLANG_WARN_ENUM_CONVERSION = YES; 379 | CLANG_WARN_INFINITE_RECURSION = YES; 380 | CLANG_WARN_INT_CONVERSION = YES; 381 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 382 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 383 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 384 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 385 | CLANG_WARN_STRICT_PROTOTYPES = YES; 386 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 387 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 388 | CLANG_WARN_UNREACHABLE_CODE = YES; 389 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 390 | CODE_SIGN_IDENTITY = "iPhone Developer"; 391 | COPY_PHASE_STRIP = NO; 392 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 393 | ENABLE_NS_ASSERTIONS = NO; 394 | ENABLE_STRICT_OBJC_MSGSEND = YES; 395 | GCC_C_LANGUAGE_STANDARD = gnu11; 396 | GCC_NO_COMMON_BLOCKS = YES; 397 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 398 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 399 | GCC_WARN_UNDECLARED_SELECTOR = YES; 400 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 401 | GCC_WARN_UNUSED_FUNCTION = YES; 402 | GCC_WARN_UNUSED_VARIABLE = YES; 403 | IPHONEOS_DEPLOYMENT_TARGET = 11.0; 404 | MTL_ENABLE_DEBUG_INFO = NO; 405 | SDKROOT = iphoneos; 406 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 407 | VALIDATE_PRODUCT = YES; 408 | }; 409 | name = Release; 410 | }; 411 | A533FC321FB84A8B008A3439 /* Debug */ = { 412 | isa = XCBuildConfiguration; 413 | buildSettings = { 414 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 415 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 416 | CODE_SIGN_STYLE = Automatic; 417 | DEVELOPMENT_TEAM = 6XF42ZHPGY; 418 | INFOPLIST_FILE = "$(SRCROOT)/ARSolar/Info.plist"; 419 | IPHONEOS_DEPLOYMENT_TARGET = 11.0; 420 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 421 | PRODUCT_BUNDLE_IDENTIFIER = com.thedarkdimension.ARGalaxy; 422 | PRODUCT_NAME = "$(TARGET_NAME)"; 423 | PROVISIONING_PROFILE_SPECIFIER = ""; 424 | SWIFT_VERSION = 4.0; 425 | TARGETED_DEVICE_FAMILY = "1,2"; 426 | }; 427 | name = Debug; 428 | }; 429 | A533FC331FB84A8B008A3439 /* Release */ = { 430 | isa = XCBuildConfiguration; 431 | buildSettings = { 432 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 433 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 434 | CODE_SIGN_STYLE = Automatic; 435 | DEVELOPMENT_TEAM = 6XF42ZHPGY; 436 | INFOPLIST_FILE = "$(SRCROOT)/ARSolar/Info.plist"; 437 | IPHONEOS_DEPLOYMENT_TARGET = 11.0; 438 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 439 | PRODUCT_BUNDLE_IDENTIFIER = com.thedarkdimension.ARGalaxy; 440 | PRODUCT_NAME = "$(TARGET_NAME)"; 441 | PROVISIONING_PROFILE_SPECIFIER = ""; 442 | SWIFT_VERSION = 4.0; 443 | TARGETED_DEVICE_FAMILY = "1,2"; 444 | }; 445 | name = Release; 446 | }; 447 | A533FC351FB84A8B008A3439 /* Debug */ = { 448 | isa = XCBuildConfiguration; 449 | buildSettings = { 450 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 451 | BUNDLE_LOADER = "$(TEST_HOST)"; 452 | CODE_SIGN_STYLE = Automatic; 453 | DEVELOPMENT_TEAM = 6XF42ZHPGY; 454 | INFOPLIST_FILE = ARSolarTests/Info.plist; 455 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 456 | PRODUCT_BUNDLE_IDENTIFIER = com.thedarkdimension.ARSolarTests; 457 | PRODUCT_NAME = "$(TARGET_NAME)"; 458 | SWIFT_VERSION = 4.0; 459 | TARGETED_DEVICE_FAMILY = "1,2"; 460 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ARSolar.app/ARSolar"; 461 | }; 462 | name = Debug; 463 | }; 464 | A533FC361FB84A8B008A3439 /* Release */ = { 465 | isa = XCBuildConfiguration; 466 | buildSettings = { 467 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 468 | BUNDLE_LOADER = "$(TEST_HOST)"; 469 | CODE_SIGN_STYLE = Automatic; 470 | DEVELOPMENT_TEAM = 6XF42ZHPGY; 471 | INFOPLIST_FILE = ARSolarTests/Info.plist; 472 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 473 | PRODUCT_BUNDLE_IDENTIFIER = com.thedarkdimension.ARSolarTests; 474 | PRODUCT_NAME = "$(TARGET_NAME)"; 475 | SWIFT_VERSION = 4.0; 476 | TARGETED_DEVICE_FAMILY = "1,2"; 477 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/ARSolar.app/ARSolar"; 478 | }; 479 | name = Release; 480 | }; 481 | /* End XCBuildConfiguration section */ 482 | 483 | /* Begin XCConfigurationList section */ 484 | A533FC0F1FB84A8B008A3439 /* Build configuration list for PBXProject "ARSolar" */ = { 485 | isa = XCConfigurationList; 486 | buildConfigurations = ( 487 | A533FC2F1FB84A8B008A3439 /* Debug */, 488 | A533FC301FB84A8B008A3439 /* Release */, 489 | ); 490 | defaultConfigurationIsVisible = 0; 491 | defaultConfigurationName = Release; 492 | }; 493 | A533FC311FB84A8B008A3439 /* Build configuration list for PBXNativeTarget "ARSolar" */ = { 494 | isa = XCConfigurationList; 495 | buildConfigurations = ( 496 | A533FC321FB84A8B008A3439 /* Debug */, 497 | A533FC331FB84A8B008A3439 /* Release */, 498 | ); 499 | defaultConfigurationIsVisible = 0; 500 | defaultConfigurationName = Release; 501 | }; 502 | A533FC341FB84A8B008A3439 /* Build configuration list for PBXNativeTarget "ARSolarTests" */ = { 503 | isa = XCConfigurationList; 504 | buildConfigurations = ( 505 | A533FC351FB84A8B008A3439 /* Debug */, 506 | A533FC361FB84A8B008A3439 /* Release */, 507 | ); 508 | defaultConfigurationIsVisible = 0; 509 | defaultConfigurationName = Release; 510 | }; 511 | /* End XCConfigurationList section */ 512 | }; 513 | rootObject = A533FC0C1FB84A8B008A3439 /* Project object */; 514 | } 515 | -------------------------------------------------------------------------------- /ARSolar.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ARSolar.xcodeproj/project.xcworkspace/xcuserdata/mohamedhegab.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar.xcodeproj/project.xcworkspace/xcuserdata/mohamedhegab.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /ARSolar.xcodeproj/xcuserdata/mohamedhegab.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 8 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /ARSolar/ARSolar.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /ARSolar/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // Planets 4 | // 5 | // Created by Mohamed Hegab on 11/12/17. 6 | // Copyright © 2017 Mohamed Emad Hegab. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 18 | return true 19 | } 20 | 21 | func applicationWillResignActive(_ application: UIApplication) { 22 | // 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. 23 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 24 | } 25 | 26 | func applicationDidEnterBackground(_ application: UIApplication) { 27 | // 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. 28 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 29 | } 30 | 31 | func applicationWillEnterForeground(_ application: UIApplication) { 32 | // 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. 33 | } 34 | 35 | func applicationDidBecomeActive(_ application: UIApplication) { 36 | // 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. 37 | } 38 | 39 | func applicationWillTerminate(_ application: UIApplication) { 40 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 41 | } 42 | 43 | 44 | } 45 | 46 | -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "Icon-App-20x20@2x.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "Icon-App-20x20@3x.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "Icon-App-29x29@2x.png", 19 | "scale" : "2x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "Icon-App-29x29@3x.png", 25 | "scale" : "3x" 26 | }, 27 | { 28 | "size" : "40x40", 29 | "idiom" : "iphone", 30 | "filename" : "Icon-App-40x40@2x.png", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "Icon-App-40x40@3x.png", 37 | "scale" : "3x" 38 | }, 39 | { 40 | "size" : "60x60", 41 | "idiom" : "iphone", 42 | "filename" : "Icon-App-60x60@2x.png", 43 | "scale" : "2x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "Icon-App-60x60@3x.png", 49 | "scale" : "3x" 50 | }, 51 | { 52 | "size" : "20x20", 53 | "idiom" : "ipad", 54 | "filename" : "Icon-App-20x20@1x.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "20x20", 59 | "idiom" : "ipad", 60 | "filename" : "Icon-App-20x20@2x-1.png", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "size" : "29x29", 65 | "idiom" : "ipad", 66 | "filename" : "Icon-App-29x29@1x.png", 67 | "scale" : "1x" 68 | }, 69 | { 70 | "size" : "29x29", 71 | "idiom" : "ipad", 72 | "filename" : "Icon-App-29x29@2x-1.png", 73 | "scale" : "2x" 74 | }, 75 | { 76 | "size" : "40x40", 77 | "idiom" : "ipad", 78 | "filename" : "Icon-App-40x40@1x.png", 79 | "scale" : "1x" 80 | }, 81 | { 82 | "size" : "40x40", 83 | "idiom" : "ipad", 84 | "filename" : "Icon-App-40x40@2x-1.png", 85 | "scale" : "2x" 86 | }, 87 | { 88 | "size" : "76x76", 89 | "idiom" : "ipad", 90 | "filename" : "Icon-App-76x76@1x.png", 91 | "scale" : "1x" 92 | }, 93 | { 94 | "size" : "76x76", 95 | "idiom" : "ipad", 96 | "filename" : "Icon-App-76x76@2x.png", 97 | "scale" : "2x" 98 | }, 99 | { 100 | "size" : "83.5x83.5", 101 | "idiom" : "ipad", 102 | "filename" : "Icon-App-83.5x83.5@2x.png", 103 | "scale" : "2x" 104 | }, 105 | { 106 | "size" : "1024x1024", 107 | "idiom" : "ios-marketing", 108 | "filename" : "ItunesArtwork@2x.png", 109 | "scale" : "1x" 110 | } 111 | ], 112 | "info" : { 113 | "version" : 1, 114 | "author" : "xcode" 115 | } 116 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x-1.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x-1.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x-1.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/AppIcon.appiconset/ItunesArtwork@2x.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Earth/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Earth/earth-cloud.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "earth-cloud.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Earth/earth-cloud.imageset/earth-cloud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/Earth/earth-cloud.imageset/earth-cloud.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Earth/earth-cloud1.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "earth-cloud.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Earth/earth-cloud1.imageset/earth-cloud.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/Earth/earth-cloud1.imageset/earth-cloud.jpg -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Earth/earth-day.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "earth-day.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Earth/earth-day.imageset/earth-day.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/Earth/earth-day.imageset/earth-day.jpg -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Earth/earth-spec.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "earth-spec.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Earth/earth-spec.imageset/earth-spec.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/Earth/earth-spec.imageset/earth-spec.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Earth/earth-specular.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "earth-specular.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Earth/earth-specular.imageset/earth-specular.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/Earth/earth-specular.imageset/earth-specular.jpg -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Earth/earth_night.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "earth_nightmap.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Earth/earth_night.imageset/earth_nightmap.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/Earth/earth_night.imageset/earth_nightmap.jpg -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Earth/earth_normal.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "earth_normal.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Earth/earth_normal.imageset/earth_normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/Earth/earth_normal.imageset/earth_normal.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Earth/moon.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "moon.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Earth/moon.imageset/moon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/Earth/moon.imageset/moon.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Jupiter/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Jupiter/jupiter.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "jupiter.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Jupiter/jupiter.imageset/jupiter.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/Jupiter/jupiter.imageset/jupiter.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Mars/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Mars/mars.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "mars.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Mars/mars.imageset/mars.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/Mars/mars.imageset/mars.jpg -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Mercury/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Mercury/mercury.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "mercury.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Mercury/mercury.imageset/mercury.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/Mercury/mercury.imageset/mercury.jpg -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Neptune/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Neptune/neptune.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "neptune.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Neptune/neptune.imageset/neptune.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/Neptune/neptune.imageset/neptune.jpg -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Saturn/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Saturn/saturn.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "saturn.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Saturn/saturn.imageset/saturn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/Saturn/saturn.imageset/saturn.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Saturn/saturnRings.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "saturnRings.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Saturn/saturnRings.imageset/saturnRings.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/Saturn/saturnRings.imageset/saturnRings.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Saturn/saturnringcolor.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "saturnringcolor.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Saturn/saturnringcolor.imageset/saturnringcolor.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/Saturn/saturnringcolor.imageset/saturnringcolor.jpg -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Splash/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Splash/Default.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Default.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Default@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Default@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | } 23 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Splash/Default.imageset/Default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/Splash/Default.imageset/Default.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Splash/Default.imageset/Default@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/Splash/Default.imageset/Default@2x.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Splash/Default.imageset/Default@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/Splash/Default.imageset/Default@3x.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Sun/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Sun/Sun Diffuse.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "sun.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Sun/Sun Diffuse.imageset/sun.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/Sun/Sun Diffuse.imageset/sun.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Uranus/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Uranus/uranus.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "uranus.jpg", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Uranus/uranus.imageset/uranus.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/Uranus/uranus.imageset/uranus.jpg -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Venus/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Venus/venus_Atmospher.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "venus_Atmospher.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Venus/venus_Atmospher.imageset/venus_Atmospher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/Venus/venus_Atmospher.imageset/venus_Atmospher.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Venus/venus_surface.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "venus_surface.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/Venus/venus_surface.imageset/venus_surface.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/Venus/venus_surface.imageset/venus_surface.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/galaxy.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "galaxy.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | }, 21 | "properties" : { 22 | "template-rendering-intent" : "template" 23 | } 24 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/galaxy.imageset/galaxy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/galaxy.imageset/galaxy.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/light.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "light.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | }, 21 | "properties" : { 22 | "template-rendering-intent" : "template" 23 | } 24 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/light.imageset/light.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/light.imageset/light.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/orbits.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "orbits.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | }, 21 | "properties" : { 22 | "template-rendering-intent" : "template" 23 | } 24 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/orbits.imageset/orbits.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/orbits.imageset/orbits.png -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/planets.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "planets.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | }, 21 | "properties" : { 22 | "template-rendering-intent" : "template" 23 | } 24 | } -------------------------------------------------------------------------------- /ARSolar/Assets.xcassets/planets.imageset/planets.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Assets.xcassets/planets.imageset/planets.png -------------------------------------------------------------------------------- /ARSolar/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 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /ARSolar/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 | 39 | 55 | 71 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | -------------------------------------------------------------------------------- /ARSolar/Helpers/MHButton.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MHButton.swift 3 | // ARSolar 4 | // 5 | // Created by Mohamed Hegab on 12/7/17. 6 | // Copyright © 2017 Mohamed Emad Hegab. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | class MHButton: UIButton { 12 | override var isSelected: Bool { 13 | didSet { 14 | tintColor = isSelected ? UIColor.lightGray : UIColor.white 15 | } 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /ARSolar/Helpers/Queue.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Queue.swift 3 | // ARSolar 4 | // 5 | // Created by Mohamed Emad Hegab on 10/02/16. 6 | // Copyright © 2017 ARSolar. All rights reserved. 7 | // 8 | import UIKit 9 | 10 | struct Queue { 11 | 12 | static let main = Queue(queue: DispatchQueue.main) 13 | static let background = Queue(queue: .global(qos: .background)) 14 | let queue: DispatchQueue 15 | init(queue: DispatchQueue) { 16 | self.queue = queue 17 | } 18 | 19 | func after(_ time: TimeInterval, block: @escaping () -> Void) { 20 | queue.asyncAfter(deadline: DispatchTime.now() + Double(Int64(time * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC), execute: block) 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /ARSolar/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | Small Galaxy 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 | CFBundleVersion 22 | 3 23 | LSRequiresIPhoneOS 24 | 25 | NSCameraUsageDescription 26 | Your camera is essential for your AR Experience.. Please Allow Us To Use It ! 27 | UILaunchStoryboardName 28 | LaunchScreen 29 | UIMainStoryboardFile 30 | Main 31 | UIRequiredDeviceCapabilities 32 | 33 | armv7 34 | 35 | UISupportedInterfaceOrientations 36 | 37 | UIInterfaceOrientationLandscapeLeft 38 | UIInterfaceOrientationLandscapeRight 39 | 40 | UISupportedInterfaceOrientations~ipad 41 | 42 | UIInterfaceOrientationPortrait 43 | UIInterfaceOrientationPortraitUpsideDown 44 | UIInterfaceOrientationLandscapeLeft 45 | UIInterfaceOrientationLandscapeRight 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /ARSolar/Resource/ar.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* 2 | InfoPlist.strings 3 | ARSolar 4 | 5 | Created by Mohamed Hegab on 12/8/17. 6 | Copyright © 2017 Mohamed Emad Hegab. All rights reserved. 7 | */ 8 | "NSCameraUsageDescription" = "نرغب بشدة في إستخدام الكاميرا الخاصة بك لمنحك كامل التجربة مع خاصية الواقع الإفتراضي.. من فضلك اسمح لنا بها!"; 9 | "CFBundleDisplayName" = "مجرتنا الصغيرة"; 10 | -------------------------------------------------------------------------------- /ARSolar/Resource/de.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* 2 | InfoPlist.strings 3 | ARSolar 4 | 5 | Created by Mohamed Hegab on 12/8/17. 6 | Copyright © 2017 Mohamed Emad Hegab. All rights reserved. 7 | */ 8 | "NSCameraUsageDescription" = "Deine Kamera ist essentiell für deine AR Erfahrung. Bitte erlaubt uns, sie zu benutzen!"; 9 | "CFBundleDisplayName" = "Unsere kleine Galaxie"; 10 | -------------------------------------------------------------------------------- /ARSolar/Solar.scnassets/stars_milky_way.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Solar.scnassets/stars_milky_way.png -------------------------------------------------------------------------------- /ARSolar/Solar.scnassets/universe.scn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/ARSolar/Solar.scnassets/universe.scn -------------------------------------------------------------------------------- /ARSolar/SolarNode.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SolarNode.swift 3 | // ARSolar 4 | // 5 | // Created by Mohamed Hegab on 12/2/17. 6 | // Copyright © 2017 Mohamed Emad Hegab. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import ARKit 11 | 12 | class SolarNode: SCNNode { 13 | init(geometry: SCNGeometry) { 14 | super.init() 15 | self.geometry = geometry 16 | } 17 | /* Xcode required this */ 18 | required init(coder aDecoder: NSCoder) { 19 | fatalError("init(coder:) has not been implemented") 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /ARSolar/SolarViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SolarViewController.swift 3 | // ARSolar 4 | // 5 | // Created by Mohamed Emad Hegab on 2017-11-13. 6 | // Copyright © 2017 Mohamed Emad Hegab. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import ARKit 11 | 12 | class SolarViewController: UIViewController { 13 | 14 | @IBOutlet weak var sceneView: ARSCNView! 15 | @IBOutlet weak var planetButton: UIButton! 16 | let configuration = ARWorldTrackingConfiguration() 17 | let sunPosition = SCNVector3(0, -0.1, -3) 18 | let lightNode = SCNNode() 19 | var sun: SCNNode! 20 | var universe: SCNNode! 21 | var lightToggled: Bool = false 22 | var orbitToggled: Bool = false 23 | var universeToggled: Bool = false 24 | var planetsToggled: Bool = false 25 | 26 | override func viewDidLoad() { 27 | super.viewDidLoad() 28 | createSun() 29 | 30 | self.sceneView.session.run(configuration) 31 | self.sceneView.autoenablesDefaultLighting = true 32 | 33 | } 34 | 35 | func setupPlanets() { 36 | planetButton.isEnabled = false 37 | Queue.background.after(2.0) { 38 | self.createMercury() 39 | } 40 | Queue.background.after(2.0) { 41 | self.createVenus() 42 | } 43 | Queue.background.after(4.1) { 44 | self.createEarth() 45 | } 46 | Queue.background.after(4.1) { 47 | self.createMars() 48 | } 49 | Queue.background.after(6.1) { 50 | self.createJupitar() 51 | } 52 | Queue.background.after(6.1) { 53 | self.createSaturn() 54 | } 55 | Queue.background.after(7.1) { 56 | self.createUranus() 57 | } 58 | Queue.main.after(7.1) { 59 | self.createNepton() 60 | } 61 | } 62 | 63 | func createUniverse() { 64 | universe = (SCNScene(named: "Solar.scnassets/universe.scn")?.rootNode.childNode(withName: "universe", recursively: false))! 65 | universe.position = SCNVector3(0, 0, -5) 66 | sceneView.scene.rootNode.addChildNode(universe) 67 | } 68 | func createSun() { 69 | 70 | sun = SCNNode(geometry: SCNSphere(radius: 0.4)) 71 | sun.geometry?.firstMaterial?.diffuse.contents = #imageLiteral(resourceName: "Sun Diffuse") 72 | sun.geometry?.firstMaterial?.multiply.contents = #imageLiteral(resourceName: "Sun Diffuse") 73 | 74 | sun.position = sunPosition 75 | self.sceneView.scene.rootNode.addChildNode(sun) 76 | 77 | let sunAction = SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: CGFloat(360.degreesToRadians), z: 0, duration: 30)) 78 | sun.runAction(sunAction) 79 | 80 | } 81 | 82 | func createMercury() { 83 | let mercuryParent = SCNNode() 84 | mercuryParent.position = sunPosition 85 | self.sceneView.scene.rootNode.addChildNode(mercuryParent) 86 | let mercury = planet(geometry: SCNSphere(radius: 0.05), diffuse: #imageLiteral(resourceName: "mercury"), specular: nil, emission: nil, normal: nil, position: SCNVector3(0.5, 0, -0.5)) 87 | mercuryParent.addChildNode(mercury) 88 | let mercuryParentAction = SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: CGFloat(360.degreesToRadians), z: 0, duration: 6)) 89 | let venusAction = SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: CGFloat(360.degreesToRadians), z: 0, duration: 6)) 90 | mercuryParent.runAction(mercuryParentAction) 91 | mercury.runAction(venusAction) 92 | } 93 | 94 | func createVenus() { 95 | 96 | let venusParent = SCNNode() 97 | venusParent.position = sunPosition 98 | self.sceneView.scene.rootNode.addChildNode(venusParent) 99 | let venus = planet(geometry: SCNSphere(radius: 0.1), diffuse: #imageLiteral(resourceName: "venus_surface"), specular: nil, emission: #imageLiteral(resourceName: "venus_Atmospher"), normal: nil, position: SCNVector3(-1.0, 0, -1.0)) 100 | venusParent.addChildNode(venus) 101 | let venusParentAction = SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: CGFloat(360.degreesToRadians), z: 0, duration: 10)) 102 | let venusAction = SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: CGFloat(360.degreesToRadians), z: 0, duration: 7)) 103 | venusParent.runAction(venusParentAction) 104 | venus.runAction(venusAction) 105 | } 106 | 107 | func createEarth() { 108 | let earthParent = SCNNode() 109 | earthParent.position = sunPosition 110 | 111 | self.sceneView.scene.rootNode.addChildNode(earthParent) 112 | let earth = planet(geometry: SCNSphere(radius: 0.2), diffuse: #imageLiteral(resourceName: "earth-day") , specular: #imageLiteral(resourceName: "earth-specular"), emission: #imageLiteral(resourceName: "earth_night"), normal: #imageLiteral(resourceName: "earth_normal"), position: SCNVector3(1.6, 0, 1.6)) 113 | 114 | earthParent.addChildNode(earth) 115 | let earthParentAction = SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: CGFloat(360.degreesToRadians), z: 0, duration: 20)) 116 | let earthAction = SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: CGFloat(360.degreesToRadians), z: 0, duration: 10)) 117 | 118 | earthParent.runAction(earthParentAction) 119 | 120 | earth.runAction(earthAction) 121 | createMoon(earth) 122 | } 123 | 124 | func createMoon(_ earth: SCNNode) { 125 | let moonParent = SCNNode() 126 | moonParent.position = earth.position 127 | earth.parent?.addChildNode(moonParent) 128 | 129 | let moon = planet(geometry: SCNSphere(radius: CGFloat(0.2 / 6)), diffuse: #imageLiteral(resourceName: "moon") , specular: nil, emission: nil, normal: nil, position: SCNVector3(0.3, 0, 0)) 130 | earth.addChildNode(moon) 131 | let moonParentAction = SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: CGFloat(360.degreesToRadians), z: 0, duration: 2)) 132 | let moonAction = SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: CGFloat(360.degreesToRadians), z: 0, duration: 10)) 133 | moonParent.runAction(moonParentAction) 134 | moon.runAction(moonAction) 135 | } 136 | 137 | func createMars() { 138 | let marsParent = SCNNode() 139 | marsParent.position = sunPosition 140 | self.sceneView.scene.rootNode.addChildNode(marsParent) 141 | let mars = planet(geometry: SCNSphere(radius: 0.19), diffuse: #imageLiteral(resourceName: "mars") , specular: nil, emission: nil, normal: nil, position: SCNVector3(2.3, 0, 2.3)) 142 | marsParent.addChildNode(mars) 143 | let marsParentAction = SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: CGFloat(360.degreesToRadians), z: 0, duration: 30)) 144 | let marsAction = SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: CGFloat(360.degreesToRadians), z: 0, duration: 13)) 145 | 146 | marsParent.runAction(marsParentAction) 147 | mars.runAction(marsAction) 148 | } 149 | 150 | func createJupitar() { 151 | let jupiterParent = SCNNode() 152 | jupiterParent.position = sunPosition 153 | self.sceneView.scene.rootNode.addChildNode(jupiterParent) 154 | let jupiter = planet(geometry: SCNSphere(radius: 0.3), diffuse: #imageLiteral(resourceName: "jupiter") , specular: nil, emission: nil, normal: nil, position: SCNVector3(3.3, 0, 3.3)) 155 | jupiterParent.addChildNode(jupiter) 156 | let jupiterParentAction = SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: CGFloat(360.degreesToRadians), z: 0, duration: 40)) 157 | let jupiterAction = SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: CGFloat(360.degreesToRadians), z: 0, duration: 20)) 158 | 159 | jupiterParent.runAction(jupiterParentAction) 160 | jupiter.runAction(jupiterAction) 161 | } 162 | 163 | func createSaturn() { 164 | let saturnParent = SCNNode() 165 | saturnParent.position = sunPosition 166 | self.sceneView.scene.rootNode.addChildNode(saturnParent) 167 | let saturn = planet(geometry: SCNSphere(radius: 0.25), diffuse: #imageLiteral(resourceName: "saturn") , specular: nil, emission: nil, normal: nil, position: SCNVector3(-4.3, 0, -4.3)) 168 | saturnParent.addChildNode(saturn) 169 | let saturnParentAction = SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: CGFloat(360.degreesToRadians), z: 0, duration: 50)) 170 | let saturnAction = SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: CGFloat(360.degreesToRadians), z: 0, duration: 30)) 171 | 172 | saturnParent.runAction(saturnParentAction) 173 | saturn.runAction(saturnAction) 174 | createSaturnRings(saturn) 175 | } 176 | 177 | func createSaturnRings(_ saturn: SCNNode) { 178 | let rings = SCNNode(geometry: SCNTube(innerRadius: 0.30, outerRadius: 0.45, height: 0.001)) 179 | rings.geometry?.firstMaterial?.diffuse.contents = #imageLiteral(resourceName: "saturnRings") 180 | rings.position = SCNVector3(0, 0, 0) 181 | rings.eulerAngles = SCNVector3(20.degreesToRadians, 0, 0) 182 | saturn.addChildNode(rings) 183 | } 184 | 185 | func createUranus() { 186 | let uranusParent = SCNNode() 187 | uranusParent.position = sunPosition 188 | self.sceneView.scene.rootNode.addChildNode(uranusParent) 189 | let uranus = planet(geometry: SCNSphere(radius: 0.25), diffuse: #imageLiteral(resourceName: "uranus") , specular: nil, emission: nil, normal: nil, position: SCNVector3(5.3, 0, 5.3)) 190 | uranusParent.addChildNode(uranus) 191 | let uranusParentAction = SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: CGFloat(360.degreesToRadians), z: 0, duration: 60)) 192 | let uranusAction = SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: CGFloat(360.degreesToRadians), z: 0, duration: 10)) 193 | 194 | uranusParent.runAction(uranusParentAction) 195 | uranus.runAction(uranusAction) 196 | 197 | } 198 | 199 | func createNepton() { 200 | let neptunParent = SCNNode() 201 | neptunParent.position = sunPosition 202 | self.sceneView.scene.rootNode.addChildNode(neptunParent) 203 | let neptun = planet(geometry: SCNSphere(radius: 0.25), diffuse: #imageLiteral(resourceName: "neptune") , specular: nil, emission: nil, normal: nil, position: SCNVector3(6.5, 0, 6.6)) 204 | neptunParent.addChildNode(neptun) 205 | let neptunParentAction = SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: CGFloat(360.degreesToRadians), z: 0, duration: 80)) 206 | let neptunAction = SCNAction.repeatForever(SCNAction.rotateBy(x: 0, y: CGFloat(360.degreesToRadians), z: 0, duration: 10)) 207 | 208 | neptunParent.runAction(neptunParentAction) 209 | neptun.runAction(neptunAction) 210 | planetButton.isEnabled = true 211 | } 212 | 213 | 214 | 215 | func planet(geometry: SCNGeometry, diffuse: UIImage, specular: UIImage?, emission: UIImage?, normal: UIImage?, position: SCNVector3) -> SolarNode{ 216 | let planet = SolarNode(geometry: geometry) 217 | planet.geometry?.firstMaterial?.diffuse.contents = diffuse 218 | planet.geometry?.firstMaterial?.specular.contents = specular 219 | planet.geometry?.firstMaterial?.emission.contents = emission 220 | planet.geometry?.firstMaterial?.normal.contents = normal 221 | planet.geometry?.firstMaterial?.locksAmbientWithDiffuse = true 222 | planet.geometry?.firstMaterial?.shininess = 0.1 223 | planet.geometry?.firstMaterial?.specular.intensity = 0.5 224 | planet.position = position 225 | return planet 226 | } 227 | 228 | func addLight() { 229 | lightNode.light = SCNLight() 230 | darkSun() 231 | lightNode.light?.type = .omni 232 | sun.addChildNode(lightNode) 233 | lightNode.light?.attenuationEndDistance = 19 234 | lightNode.light?.attenuationStartDistance = 300 235 | 236 | self.lightSun() 237 | } 238 | 239 | func removeLight() { 240 | lightNode.removeFromParentNode() 241 | darkSun() 242 | } 243 | 244 | func darkSun() { 245 | lightNode.light?.color = UIColor.black 246 | sun.geometry?.firstMaterial?.lightingModel = SCNMaterial.LightingModel.blinn 247 | } 248 | 249 | func lightSun() { 250 | lightNode.light?.color = UIColor.white 251 | sun.geometry?.firstMaterial?.multiply.intensity = 0.5 252 | sun.geometry?.firstMaterial?.lightingModel = SCNMaterial.LightingModel.constant 253 | sun.geometry?.firstMaterial?.multiply.wrapS = .repeat 254 | sun.geometry?.firstMaterial?.diffuse.wrapS = .repeat 255 | sun.geometry?.firstMaterial?.multiply.wrapT = .repeat 256 | sun.geometry?.firstMaterial?.diffuse.wrapT = .repeat 257 | } 258 | 259 | func destroyPlanets() { 260 | sceneView.scene.rootNode.enumerateChildNodes { (node, stop) in 261 | if node is SolarNode { 262 | node.removeFromParentNode() 263 | } 264 | } 265 | } 266 | 267 | func destroyUniverse() { 268 | universe.removeFromParentNode() 269 | 270 | } 271 | 272 | @IBAction func toggleLight(_ sender: UIButton) { 273 | if lightToggled { 274 | removeLight() 275 | } else { 276 | addLight() 277 | } 278 | sender.isSelected = !sender.isSelected 279 | lightToggled = !lightToggled 280 | } 281 | @IBAction func togglePlanets(_ sender: UIButton) { 282 | if planetsToggled { 283 | destroyPlanets() 284 | } else { 285 | setupPlanets() 286 | } 287 | sender.isSelected = !sender.isSelected 288 | planetsToggled = !planetsToggled 289 | 290 | } 291 | 292 | @IBAction func toggleOrbits(_ sender: UIButton) { 293 | sender.isSelected = !sender.isSelected 294 | orbitToggled = !orbitToggled 295 | } 296 | @IBAction func toggleGalaxy(_ sender: UIButton) { 297 | if universeToggled { 298 | destroyUniverse() 299 | } else { 300 | createUniverse() 301 | } 302 | sender.isSelected = !sender.isSelected 303 | universeToggled = !universeToggled 304 | } 305 | } 306 | 307 | extension Int { 308 | 309 | var degreesToRadians: Double { return Double(self) * .pi/180} 310 | 311 | 312 | } 313 | 314 | 315 | 316 | -------------------------------------------------------------------------------- /ARSolarTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | Small Galaxy 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 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiresFullScreen 30 | 31 | UIStatusBarHidden 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationLandscapeLeft 36 | UIInterfaceOrientationLandscapeRight 37 | UIInterfaceOrientationPortrait 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /ARSolarTests/PlanetsTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PlanetsTests.swift 3 | // PlanetsTests 4 | // 5 | // Created by Mohamed Hegab on 11/12/17. 6 | // Copyright © 2017 Mohamed Emad Hegab. All rights reserved. 7 | // 8 | 9 | import XCTest 10 | @testable import Planets 11 | 12 | class PlanetsTests: XCTestCase { 13 | 14 | override func setUp() { 15 | super.setUp() 16 | // Put setup code here. This method is called before the invocation of each test method in the class. 17 | } 18 | 19 | override func tearDown() { 20 | // Put teardown code here. This method is called after the invocation of each test method in the class. 21 | super.tearDown() 22 | } 23 | 24 | func testExample() { 25 | // This is an example of a functional test case. 26 | // Use XCTAssert and related functions to verify your tests produce the correct results. 27 | } 28 | 29 | func testPerformanceExample() { 30 | // This is an example of a performance test case. 31 | self.measure { 32 | // Put the code you want to measure the time of here. 33 | } 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ARSolar 2 | Solar System with ARKit on Swift 3 | 4 | ![preview](preview.gif) 5 | 6 | # TODO 7 | * do a better rings around saturn 8 | * enhance performance 9 | 10 | # Contributing 11 | 12 | Fork it 13 | 14 | Create your feature branch (git checkout -b my-new-feature) 15 | 16 | Commit your changes (git commit -am 'Add some feature') 17 | 18 | Push to the branch (git push origin my-new-feature) 19 | 20 | Create new Pull Request to my master 21 | 22 | You Know the drill :) 23 | -------------------------------------------------------------------------------- /fastlane/.gitignore: -------------------------------------------------------------------------------- 1 | installer/ 2 | -------------------------------------------------------------------------------- /fastlane/Appfile: -------------------------------------------------------------------------------- 1 | app_identifier "com.thedarkdimension.ARSolar" # The bundle identifier of your app 2 | apple_id "emad.hegab@gmail.com" # Your Apple email address 3 | 4 | team_id "6XF42ZHPGY" # Developer Portal Team ID 5 | 6 | # you can even provide different app identifiers, Apple IDs and team names per lane: 7 | # More information: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Appfile.md 8 | 9 | username 'emadhegab' -------------------------------------------------------------------------------- /fastlane/Fastfile: -------------------------------------------------------------------------------- 1 | # More documentation about how to customize your build 2 | # can be found here: 3 | # https://docs.fastlane.tools 4 | fastlane_version "2.68.0" 5 | # This value helps us track success metrics for Fastfiles 6 | # we automatically generate. Feel free to remove this line 7 | # once you get things running smoothly! 8 | generated_fastfile_id "9296f834-f5dd-4c26-8350-efb52f58d9d3" 9 | 10 | default_platform :ios 11 | 12 | # Fastfile actions accept additional configuration, but 13 | # don't worry, fastlane will prompt you for required 14 | # info which you can add here later 15 | lane :beta do 16 | # increment_build_number 17 | # build your iOS app 18 | build_app( 19 | scheme: "ARSolar", 20 | export_method: "app-store", 21 | workspace: "ARSolar.xcworkspace", 22 | include_bitcode: true 23 | ) 24 | 25 | pilot { 26 | skip_submission:true, distribute_external:false, skip_waiting_for_build_processing:true 27 | } 28 | say "all upload .. please wait till it got proccessed" 29 | end 30 | -------------------------------------------------------------------------------- /fastlane/README.md: -------------------------------------------------------------------------------- 1 | fastlane documentation 2 | ================ 3 | # Installation 4 | 5 | Make sure you have the latest version of the Xcode command line tools installed: 6 | 7 | ``` 8 | xcode-select --install 9 | ``` 10 | 11 | ## Choose your installation method: 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
HomebrewInstaller ScriptRubyGems
macOSmacOSmacOS or Linux with Ruby 2.0.0 or above
brew cask install fastlaneDownload the zip file. Then double click on the install script (or run it in a terminal window).sudo gem install fastlane -NV
30 | 31 | # Available Actions 32 | ### beta 33 | ``` 34 | fastlane beta 35 | ``` 36 | 37 | 38 | ---- 39 | 40 | This README.md is auto-generated and will be re-generated every time [fastlane](https://fastlane.tools) is run. 41 | More information about fastlane can be found on [fastlane.tools](https://fastlane.tools). 42 | The documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools). 43 | -------------------------------------------------------------------------------- /preview.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emadhegab/ARSolar/8fad1f4bfc9fa8aa8352c883b662c79f7f811916/preview.gif --------------------------------------------------------------------------------