diff --git a/velibtracker.xcodeproj/project.pbxproj b/velibtracker.xcodeproj/project.pbxproj index a8b5702..7df613d 100644 --- a/velibtracker.xcodeproj/project.pbxproj +++ b/velibtracker.xcodeproj/project.pbxproj @@ -309,6 +309,8 @@ ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = "Velib' Tracker"; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.lifestyle"; INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "Display Velib stations near your current location"; "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; @@ -318,12 +320,11 @@ "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES; "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault; "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - IPHONEOS_DEPLOYMENT_TARGET = 16.4; + INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 13.3; + MACOSX_DEPLOYMENT_TARGET = 12.0; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = fr.louisgallet.velibtracker; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -348,6 +349,8 @@ ENABLE_HARDENED_RUNTIME = YES; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = "Velib' Tracker"; + INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.lifestyle"; INFOPLIST_KEY_NSLocationWhenInUseUsageDescription = "Display Velib stations near your current location"; "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphoneos*]" = YES; "INFOPLIST_KEY_UIApplicationSceneManifest_Generation[sdk=iphonesimulator*]" = YES; @@ -357,12 +360,11 @@ "INFOPLIST_KEY_UILaunchScreen_Generation[sdk=iphonesimulator*]" = YES; "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphoneos*]" = UIStatusBarStyleDefault; "INFOPLIST_KEY_UIStatusBarStyle[sdk=iphonesimulator*]" = UIStatusBarStyleDefault; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; - IPHONEOS_DEPLOYMENT_TARGET = 16.4; + INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks"; "LD_RUNPATH_SEARCH_PATHS[sdk=macosx*]" = "@executable_path/../Frameworks"; - MACOSX_DEPLOYMENT_TARGET = 13.3; + MACOSX_DEPLOYMENT_TARGET = 12.0; MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = fr.louisgallet.velibtracker; PRODUCT_NAME = "$(TARGET_NAME)"; diff --git a/velibtracker/Assets.xcassets/AppIcon.appiconset/1024 1.png b/velibtracker/Assets.xcassets/AppIcon.appiconset/1024 1.png new file mode 100644 index 0000000..3bb3604 Binary files /dev/null and b/velibtracker/Assets.xcassets/AppIcon.appiconset/1024 1.png differ diff --git a/velibtracker/Assets.xcassets/AppIcon.appiconset/1024.png b/velibtracker/Assets.xcassets/AppIcon.appiconset/1024.png new file mode 100644 index 0000000..3bb3604 Binary files /dev/null and b/velibtracker/Assets.xcassets/AppIcon.appiconset/1024.png differ diff --git a/velibtracker/Assets.xcassets/AppIcon.appiconset/128.png b/velibtracker/Assets.xcassets/AppIcon.appiconset/128.png new file mode 100644 index 0000000..aaaf1bf Binary files /dev/null and b/velibtracker/Assets.xcassets/AppIcon.appiconset/128.png differ diff --git a/velibtracker/Assets.xcassets/AppIcon.appiconset/16.png b/velibtracker/Assets.xcassets/AppIcon.appiconset/16.png new file mode 100644 index 0000000..9813a4f Binary files /dev/null and b/velibtracker/Assets.xcassets/AppIcon.appiconset/16.png differ diff --git a/velibtracker/Assets.xcassets/AppIcon.appiconset/256 1.png b/velibtracker/Assets.xcassets/AppIcon.appiconset/256 1.png new file mode 100644 index 0000000..e5de76c Binary files /dev/null and b/velibtracker/Assets.xcassets/AppIcon.appiconset/256 1.png differ diff --git a/velibtracker/Assets.xcassets/AppIcon.appiconset/256.png b/velibtracker/Assets.xcassets/AppIcon.appiconset/256.png new file mode 100644 index 0000000..e5de76c Binary files /dev/null and b/velibtracker/Assets.xcassets/AppIcon.appiconset/256.png differ diff --git a/velibtracker/Assets.xcassets/AppIcon.appiconset/32 1.png b/velibtracker/Assets.xcassets/AppIcon.appiconset/32 1.png new file mode 100644 index 0000000..e25ea90 Binary files /dev/null and b/velibtracker/Assets.xcassets/AppIcon.appiconset/32 1.png differ diff --git a/velibtracker/Assets.xcassets/AppIcon.appiconset/32.png b/velibtracker/Assets.xcassets/AppIcon.appiconset/32.png new file mode 100644 index 0000000..e25ea90 Binary files /dev/null and b/velibtracker/Assets.xcassets/AppIcon.appiconset/32.png differ diff --git a/velibtracker/Assets.xcassets/AppIcon.appiconset/512 1.png b/velibtracker/Assets.xcassets/AppIcon.appiconset/512 1.png new file mode 100644 index 0000000..354a6de Binary files /dev/null and b/velibtracker/Assets.xcassets/AppIcon.appiconset/512 1.png differ diff --git a/velibtracker/Assets.xcassets/AppIcon.appiconset/512.png b/velibtracker/Assets.xcassets/AppIcon.appiconset/512.png new file mode 100644 index 0000000..354a6de Binary files /dev/null and b/velibtracker/Assets.xcassets/AppIcon.appiconset/512.png differ diff --git a/velibtracker/Assets.xcassets/AppIcon.appiconset/64.png b/velibtracker/Assets.xcassets/AppIcon.appiconset/64.png new file mode 100644 index 0000000..2879b27 Binary files /dev/null and b/velibtracker/Assets.xcassets/AppIcon.appiconset/64.png differ diff --git a/velibtracker/Assets.xcassets/AppIcon.appiconset/Contents.json b/velibtracker/Assets.xcassets/AppIcon.appiconset/Contents.json index 532cd72..658451f 100644 --- a/velibtracker/Assets.xcassets/AppIcon.appiconset/Contents.json +++ b/velibtracker/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -1,56 +1,67 @@ { "images" : [ { + "filename" : "1024.png", "idiom" : "universal", "platform" : "ios", "size" : "1024x1024" }, { + "filename" : "16.png", "idiom" : "mac", "scale" : "1x", "size" : "16x16" }, { + "filename" : "32.png", "idiom" : "mac", "scale" : "2x", "size" : "16x16" }, { + "filename" : "32 1.png", "idiom" : "mac", "scale" : "1x", "size" : "32x32" }, { + "filename" : "64.png", "idiom" : "mac", "scale" : "2x", "size" : "32x32" }, { + "filename" : "128.png", "idiom" : "mac", "scale" : "1x", "size" : "128x128" }, { + "filename" : "256.png", "idiom" : "mac", "scale" : "2x", "size" : "128x128" }, { + "filename" : "256 1.png", "idiom" : "mac", "scale" : "1x", "size" : "256x256" }, { + "filename" : "512.png", "idiom" : "mac", "scale" : "2x", "size" : "256x256" }, { + "filename" : "512 1.png", "idiom" : "mac", "scale" : "1x", "size" : "512x512" }, { + "filename" : "1024 1.png", "idiom" : "mac", "scale" : "2x", "size" : "512x512" diff --git a/velibtracker/ContentView.swift b/velibtracker/ContentView.swift index 9a08e0a..57b3ccc 100644 --- a/velibtracker/ContentView.swift +++ b/velibtracker/ContentView.swift @@ -12,17 +12,12 @@ struct ContentView: View { @State private var isLocationAuthorized = false var body: some View { VStack { - var latitude = locationManager.userLocation?.latitude - var longitude = locationManager.userLocation?.longitude if locationManager.isLocationAuthorized { // Afficher le contenu de l'application une fois que la localisation est autorisée - Text("Latitude: \(locationManager.userLocation?.latitude ?? 0), Longitude: \(locationManager.userLocation?.longitude ?? 0)") } else { // Afficher un message ou un bouton pour demander l'autorisation de localisation Button("Autoriser la localisation") { - locationManager.onLocationUpdate = { - // Appel à la requête API lorsque la localisation est autorisée - } + openAppSettings() } } } @@ -35,6 +30,7 @@ struct ContentView: View { } NavigationView { ScrollView { + Text("Stations dans un rayon de 5km") ForEach(velibStations, id: \.stationcode) { station in StationComponent(station: station) .padding(.bottom, 16) @@ -47,6 +43,16 @@ struct ContentView: View { } +private func openAppSettings() { + guard let settingsURL = URL(string: UIApplication.openSettingsURLString) else { + return + } + + if UIApplication.shared.canOpenURL(settingsURL) { + UIApplication.shared.open(settingsURL) + } +} + struct ContentView_Previews: PreviewProvider { diff --git a/velibtracker/components/StationComponent.swift b/velibtracker/components/StationComponent.swift index de2eab3..685466c 100644 --- a/velibtracker/components/StationComponent.swift +++ b/velibtracker/components/StationComponent.swift @@ -25,10 +25,19 @@ struct StationComponent: View { .foregroundColor(.secondary) Spacer() - - Text("Disponibles: \(station.numbikesavailable)") - .font(.subheadline) - .foregroundColor(.secondary) + + VStack { + Text("Disponibles: \(station.numbikesavailable)") + .font(.subheadline) + .foregroundColor(.secondary) + Text("Electriques: \(station.ebike)") + .font(.subheadline) + .foregroundColor(.blue) + Text("Mécaniques: \(station.mechanical)") + .font(.subheadline) + .foregroundColor(.green) + } + } } .padding() diff --git a/velibtracker/velibtrackerApp.swift b/velibtracker/velibtrackerApp.swift index 08c3b14..58f2a88 100644 --- a/velibtracker/velibtrackerApp.swift +++ b/velibtracker/velibtrackerApp.swift @@ -7,14 +7,16 @@ import SwiftUI + @main struct velibtrackerApp: App { + @ObservedObject var locationManager = LocationManager() var body: some Scene { WindowGroup { ContentView() } } - // init() { - // fetchVelibData() - // } + init() { + fetchVelibDataLocation(lon: Double(locationManager.userLocation?.longitude ?? 0), lat: Double(locationManager.userLocation?.latitude ?? 0)) + } }