feat: ✨ Added details of the type of bike available
Added details of the type of bike available; fixed a bug where the application would not load the bikes; added a shortcut to the settings app in the event of location refusal.
@ -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)";
|
||||
|
BIN
velibtracker/Assets.xcassets/AppIcon.appiconset/1024 1.png
Normal file
After Width: | Height: | Size: 460 KiB |
BIN
velibtracker/Assets.xcassets/AppIcon.appiconset/1024.png
Normal file
After Width: | Height: | Size: 460 KiB |
BIN
velibtracker/Assets.xcassets/AppIcon.appiconset/128.png
Normal file
After Width: | Height: | Size: 19 KiB |
BIN
velibtracker/Assets.xcassets/AppIcon.appiconset/16.png
Normal file
After Width: | Height: | Size: 820 B |
BIN
velibtracker/Assets.xcassets/AppIcon.appiconset/256 1.png
Normal file
After Width: | Height: | Size: 56 KiB |
BIN
velibtracker/Assets.xcassets/AppIcon.appiconset/256.png
Normal file
After Width: | Height: | Size: 56 KiB |
BIN
velibtracker/Assets.xcassets/AppIcon.appiconset/32 1.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
velibtracker/Assets.xcassets/AppIcon.appiconset/32.png
Normal file
After Width: | Height: | Size: 2.2 KiB |
BIN
velibtracker/Assets.xcassets/AppIcon.appiconset/512 1.png
Normal file
After Width: | Height: | Size: 166 KiB |
BIN
velibtracker/Assets.xcassets/AppIcon.appiconset/512.png
Normal file
After Width: | Height: | Size: 166 KiB |
BIN
velibtracker/Assets.xcassets/AppIcon.appiconset/64.png
Normal file
After Width: | Height: | Size: 6.4 KiB |
@ -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"
|
||||
|
@ -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 {
|
||||
|
@ -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()
|
||||
|
@ -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))
|
||||
}
|
||||
}
|
||||
|