diff --git a/.metadata b/.metadata
index a0a9eb4..391c336 100644
--- a/.metadata
+++ b/.metadata
@@ -1,11 +1,11 @@
# This file tracks properties of this Flutter project.
# Used by Flutter tool to assess capabilities and perform upgrades etc.
#
-# This file should be version controlled.
+# This file should be version controlled and should not be manually edited.
version:
- revision: 2ad6cd72c040113b47ee9055e722606a490ef0da
- channel: stable
+ revision: "5874a72aa4c779a02553007c47dacbefba2374dc"
+ channel: "stable"
project_type: app
@@ -13,11 +13,26 @@ project_type: app
migration:
platforms:
- platform: root
- create_revision: 2ad6cd72c040113b47ee9055e722606a490ef0da
- base_revision: 2ad6cd72c040113b47ee9055e722606a490ef0da
+ create_revision: 5874a72aa4c779a02553007c47dacbefba2374dc
+ base_revision: 5874a72aa4c779a02553007c47dacbefba2374dc
+ - platform: android
+ create_revision: 5874a72aa4c779a02553007c47dacbefba2374dc
+ base_revision: 5874a72aa4c779a02553007c47dacbefba2374dc
- platform: ios
- create_revision: 2ad6cd72c040113b47ee9055e722606a490ef0da
- base_revision: 2ad6cd72c040113b47ee9055e722606a490ef0da
+ create_revision: 5874a72aa4c779a02553007c47dacbefba2374dc
+ base_revision: 5874a72aa4c779a02553007c47dacbefba2374dc
+ - platform: linux
+ create_revision: 5874a72aa4c779a02553007c47dacbefba2374dc
+ base_revision: 5874a72aa4c779a02553007c47dacbefba2374dc
+ - platform: macos
+ create_revision: 5874a72aa4c779a02553007c47dacbefba2374dc
+ base_revision: 5874a72aa4c779a02553007c47dacbefba2374dc
+ - platform: web
+ create_revision: 5874a72aa4c779a02553007c47dacbefba2374dc
+ base_revision: 5874a72aa4c779a02553007c47dacbefba2374dc
+ - platform: windows
+ create_revision: 5874a72aa4c779a02553007c47dacbefba2374dc
+ base_revision: 5874a72aa4c779a02553007c47dacbefba2374dc
# User provided section
diff --git a/README.md b/README.md
index 6e97046..739c1bd 100644
--- a/README.md
+++ b/README.md
@@ -15,6 +15,29 @@ For help getting started with Flutter development, view the
[online documentation](https://docs.flutter.dev/), which offers tutorials,
samples, guidance on mobile development, and a full API reference.
+## iOS のマニュアル更新内容
+
+* Info.plist
+ CFBundleDisplayName
+ 岐阜ナビ
+
+ CFBundleName
+ 岐阜ナビ
+
+ NSCameraUsageDescription
+ 岐阜ナビはチェックポイントで撮影した写真を写真ライブラリに保存し、通過記録を保持し、競技結果として提出することができます。
+ NSLocationAlwaysAndWhenInUseUsageDescription
+ 岐阜ナビはアプリが閉じられているときでも位置情報へのアクセスが必要です。これにより、走行履歴の記録ができ、レビュー時の参考にすることができます。
+ NSLocationAlwaysUsageDescription
+ このアプリではバックグラウンドで位置情報にアクセスします。
+ NSLocationWhenInUseUsageDescription
+ このアプリはチェックポイントへのチェックインや走行履歴を記録するために、位置情報にアクセスします。
+ NSMicrophoneUsageDescription
+ このアプリではカメラは使用しますが、マイクの使用は当面行いません。
+ NSPhotoLibraryUsageDescription
+ 撮影した写真はデバイスのアルバムに保存されます。これにより、不具合時の通過記録を安全に担保することができます。
+
+
# 更新履歴
0. flutter_compass は pub.dev cache で 34 に変更。キャッシュをクリアしたら修正が必要。
@@ -157,4 +180,13 @@ samples, guidance on mobile development, and a full API reference.
テスト用位置情報:
大垣駅: 35.36701369466119, 136.61783662683948
大垣城: 35.36182698266251, 136.61558088722234
-関ケ原駅:35.36365422752628, 136.47061844402452
\ No newline at end of file
+関ケ原駅:35.36365422752628, 136.47061844402452
+高山駅:36.14130783620718, 137.25050201764944
+ガソリンスタンド:36.13826570797936, 137.21513450124928
+
+バグ:
+履歴の写真:アクセスエラー
+バックアップをイベントごとに保存・レストア
+
+ログインした際に、イベントが選択されていなければ、イベントを選択するように促す。
+事前チェックインした写真が履歴に表示されない。
diff --git a/android/app/src/main/kotlin/com/dvox/gifunavi_git/MainActivity.kt b/android/app/src/main/kotlin/com/dvox/gifunavi_git/MainActivity.kt
new file mode 100644
index 0000000..29bb72e
--- /dev/null
+++ b/android/app/src/main/kotlin/com/dvox/gifunavi_git/MainActivity.kt
@@ -0,0 +1,5 @@
+package com.dvox.gifunavi_git
+
+import io.flutter.embedding.android.FlutterActivity
+
+class MainActivity: FlutterActivity()
diff --git a/devtools_options.yaml b/devtools_options.yaml
new file mode 100644
index 0000000..fa0b357
--- /dev/null
+++ b/devtools_options.yaml
@@ -0,0 +1,3 @@
+description: This file stores settings for Dart & Flutter DevTools.
+documentation: https://docs.flutter.dev/tools/devtools/extensions#configure-extension-enablement-states
+extensions:
diff --git a/ios/GifuNavigation.mobileprovision b/ios/GifuNavigation.mobileprovision
deleted file mode 100644
index c523c3f..0000000
Binary files a/ios/GifuNavigation.mobileprovision and /dev/null differ
diff --git a/ios/Podfile.lock b/ios/Podfile.lock
index 2531a8c..af37d55 100644
--- a/ios/Podfile.lock
+++ b/ios/Podfile.lock
@@ -4,6 +4,8 @@ PODS:
- connectivity_plus (0.0.1):
- Flutter
- FlutterMacOS
+ - device_info_plus (0.0.1):
+ - Flutter
- Flutter (1.0.0)
- flutter_compass (0.0.1):
- Flutter
@@ -43,6 +45,7 @@ PODS:
DEPENDENCIES:
- camera_avfoundation (from `.symlinks/plugins/camera_avfoundation/ios`)
- connectivity_plus (from `.symlinks/plugins/connectivity_plus/darwin`)
+ - device_info_plus (from `.symlinks/plugins/device_info_plus/ios`)
- Flutter (from `Flutter`)
- flutter_compass (from `.symlinks/plugins/flutter_compass/ios`)
- flutter_keyboard_visibility (from `.symlinks/plugins/flutter_keyboard_visibility/ios`)
@@ -68,6 +71,8 @@ EXTERNAL SOURCES:
:path: ".symlinks/plugins/camera_avfoundation/ios"
connectivity_plus:
:path: ".symlinks/plugins/connectivity_plus/darwin"
+ device_info_plus:
+ :path: ".symlinks/plugins/device_info_plus/ios"
Flutter:
:path: Flutter
flutter_compass:
@@ -102,6 +107,7 @@ EXTERNAL SOURCES:
SPEC CHECKSUMS:
camera_avfoundation: dd002b0330f4981e1bbcb46ae9b62829237459a4
connectivity_plus: ddd7f30999e1faaef5967c23d5b6d503d10434db
+ device_info_plus: 97af1d7e84681a90d0693e63169a5d50e0839a0d
Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
flutter_compass: cbbd285cea1584c7ac9c4e0c3e1f17cbea55e855
flutter_keyboard_visibility: 0339d06371254c3eb25eeb90ba8d17dca8f9c069
diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj
index 986ec01..298f241 100644
--- a/ios/Runner.xcodeproj/project.pbxproj
+++ b/ios/Runner.xcodeproj/project.pbxproj
@@ -8,14 +8,14 @@
/* Begin PBXBuildFile section */
1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; };
- 2EAA11F0595B6B1A6B6ADED8 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53C8E795FF5969F8C7B6A237 /* Pods_RunnerTests.framework */; };
331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; };
3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; };
+ 712BA8D3720206B23B820A9B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C4E153E327A403FD75830D36 /* Pods_RunnerTests.framework */; };
74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; };
+ 8B39E7104A3E3C6F3B501CB2 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 6A39AA3BE6DA0B7B42041019 /* Pods_Runner.framework */; };
97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; };
97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; };
97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; };
- B6A4962F862B554C98AD7E0A /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F31FDD2E828C96A459E4AA85 /* Pods_Runner.framework */; };
/* End PBXBuildFile section */
/* Begin PBXContainerItemProxy section */
@@ -46,14 +46,16 @@
1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; };
331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; };
331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; };
+ 3592C2DA8DF570D2D07650A8 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; };
3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; };
- 53C8E795FF5969F8C7B6A237 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 402073277F0CF7D1DE2A9F29 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; };
+ 6850CF9EE994EB8682BD460F /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; };
+ 6A39AA3BE6DA0B7B42041019 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 6FFD6A432600780CEB6D6374 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; };
74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; };
74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; };
- 84738EC4DA98A3780DDAB81F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; };
- 89205C63F97F88BDB459168E /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; };
- 89EEC485D24E5B1BC0DD7B8E /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; };
+ 86D6A3692EBE5943C3C75411 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; };
9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; };
9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; };
97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; };
@@ -61,10 +63,8 @@
97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
- AC42218FD0A0DB137D157E93 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; };
- D773E9161AA2211A3E2B94DD /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; };
- DA00EBAA91366A0B5BFDAE96 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; };
- F31FDD2E828C96A459E4AA85 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 9E76BC5648643A00E08CF70B /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; };
+ C4E153E327A403FD75830D36 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
@@ -72,15 +72,15 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- B6A4962F862B554C98AD7E0A /* Pods_Runner.framework in Frameworks */,
+ 8B39E7104A3E3C6F3B501CB2 /* Pods_Runner.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
- CEDA9491D04A70CE2A58DF32 /* Frameworks */ = {
+ F68F88FFE2DC7D6754431798 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 2EAA11F0595B6B1A6B6ADED8 /* Pods_RunnerTests.framework in Frameworks */,
+ 712BA8D3720206B23B820A9B /* Pods_RunnerTests.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -95,11 +95,24 @@
path = RunnerTests;
sourceTree = "";
};
- 3806CD679A8B2BB869428B93 /* Frameworks */ = {
+ 7F718872327E3605229882F1 /* Pods */ = {
isa = PBXGroup;
children = (
- F31FDD2E828C96A459E4AA85 /* Pods_Runner.framework */,
- 53C8E795FF5969F8C7B6A237 /* Pods_RunnerTests.framework */,
+ 402073277F0CF7D1DE2A9F29 /* Pods-Runner.debug.xcconfig */,
+ 3592C2DA8DF570D2D07650A8 /* Pods-Runner.release.xcconfig */,
+ 6FFD6A432600780CEB6D6374 /* Pods-Runner.profile.xcconfig */,
+ 86D6A3692EBE5943C3C75411 /* Pods-RunnerTests.debug.xcconfig */,
+ 6850CF9EE994EB8682BD460F /* Pods-RunnerTests.release.xcconfig */,
+ 9E76BC5648643A00E08CF70B /* Pods-RunnerTests.profile.xcconfig */,
+ );
+ path = Pods;
+ sourceTree = "";
+ };
+ 85F630F9575BB5DDC6F6B3B2 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 6A39AA3BE6DA0B7B42041019 /* Pods_Runner.framework */,
+ C4E153E327A403FD75830D36 /* Pods_RunnerTests.framework */,
);
name = Frameworks;
sourceTree = "";
@@ -122,8 +135,8 @@
97C146F01CF9000F007C117D /* Runner */,
97C146EF1CF9000F007C117D /* Products */,
331C8082294A63A400263BE5 /* RunnerTests */,
- B9F40AE3939A8E59418B2C25 /* Pods */,
- 3806CD679A8B2BB869428B93 /* Frameworks */,
+ 7F718872327E3605229882F1 /* Pods */,
+ 85F630F9575BB5DDC6F6B3B2 /* Frameworks */,
);
sourceTree = "";
};
@@ -151,19 +164,6 @@
path = Runner;
sourceTree = "";
};
- B9F40AE3939A8E59418B2C25 /* Pods */ = {
- isa = PBXGroup;
- children = (
- DA00EBAA91366A0B5BFDAE96 /* Pods-Runner.debug.xcconfig */,
- D773E9161AA2211A3E2B94DD /* Pods-Runner.release.xcconfig */,
- 84738EC4DA98A3780DDAB81F /* Pods-Runner.profile.xcconfig */,
- AC42218FD0A0DB137D157E93 /* Pods-RunnerTests.debug.xcconfig */,
- 89205C63F97F88BDB459168E /* Pods-RunnerTests.release.xcconfig */,
- 89EEC485D24E5B1BC0DD7B8E /* Pods-RunnerTests.profile.xcconfig */,
- );
- path = Pods;
- sourceTree = "";
- };
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
@@ -171,10 +171,10 @@
isa = PBXNativeTarget;
buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
buildPhases = (
- CD76B1A18202CBE77CBE3DCF /* [CP] Check Pods Manifest.lock */,
+ 7F66DF627A66DF465C5F63D3 /* [CP] Check Pods Manifest.lock */,
331C807D294A63A400263BE5 /* Sources */,
331C807F294A63A400263BE5 /* Resources */,
- CEDA9491D04A70CE2A58DF32 /* Frameworks */,
+ F68F88FFE2DC7D6754431798 /* Frameworks */,
);
buildRules = (
);
@@ -190,15 +190,15 @@
isa = PBXNativeTarget;
buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */;
buildPhases = (
- 7EC19810B524B833F58A16B8 /* [CP] Check Pods Manifest.lock */,
+ 9BC3CC202AEB33DDD6358396 /* [CP] Check Pods Manifest.lock */,
9740EEB61CF901F6004384FC /* Run Script */,
97C146EA1CF9000F007C117D /* Sources */,
97C146EB1CF9000F007C117D /* Frameworks */,
97C146EC1CF9000F007C117D /* Resources */,
9705A1C41CF9048500538489 /* Embed Frameworks */,
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
- 3CF3DF1DB3C3E48099A705D1 /* [CP] Embed Pods Frameworks */,
- 9D3C0722FFFB9D74548C2A72 /* [CP] Copy Pods Resources */,
+ B576B812EBF41188E37C7BA1 /* [CP] Embed Pods Frameworks */,
+ 8EF00F2B7B12B1557BEC9D5A /* [CP] Copy Pods Resources */,
);
buildRules = (
);
@@ -286,24 +286,61 @@
shellPath = /bin/sh;
shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin";
};
- 3CF3DF1DB3C3E48099A705D1 /* [CP] Embed Pods Frameworks */ = {
+ 7F66DF627A66DF465C5F63D3 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
- name = "[CP] Embed Pods Frameworks";
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
outputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
- 7EC19810B524B833F58A16B8 /* [CP] Check Pods Manifest.lock */ = {
+ 8EF00F2B7B12B1557BEC9D5A /* [CP] Copy Pods Resources */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Copy Pods Resources";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 9740EEB61CF901F6004384FC /* Run Script */ = {
+ isa = PBXShellScriptBuildPhase;
+ alwaysOutOfDate = 1;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputPaths = (
+ );
+ name = "Run Script";
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
+ };
+ 9BC3CC202AEB33DDD6358396 /* [CP] Check Pods Manifest.lock */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
@@ -325,58 +362,21 @@
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
showEnvVarsInLog = 0;
};
- 9740EEB61CF901F6004384FC /* Run Script */ = {
- isa = PBXShellScriptBuildPhase;
- alwaysOutOfDate = 1;
- buildActionMask = 2147483647;
- files = (
- );
- inputPaths = (
- );
- name = "Run Script";
- outputPaths = (
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build";
- };
- 9D3C0722FFFB9D74548C2A72 /* [CP] Copy Pods Resources */ = {
+ B576B812EBF41188E37C7BA1 /* [CP] Embed Pods Frameworks */ = {
isa = PBXShellScriptBuildPhase;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist",
);
- name = "[CP] Copy Pods Resources";
+ name = "[CP] Embed Pods Frameworks";
outputFileListPaths = (
- "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
+ "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
- shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
- showEnvVarsInLog = 0;
- };
- CD76B1A18202CBE77CBE3DCF /* [CP] Check Pods Manifest.lock */ = {
- isa = PBXShellScriptBuildPhase;
- buildActionMask = 2147483647;
- files = (
- );
- inputFileListPaths = (
- );
- inputPaths = (
- "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
- "${PODS_ROOT}/Manifest.lock",
- );
- name = "[CP] Check Pods Manifest.lock";
- outputFileListPaths = (
- );
- outputPaths = (
- "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt",
- );
- runOnlyForDeploymentPostprocessing = 0;
- shellPath = /bin/sh;
- shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */
@@ -508,14 +508,14 @@
};
331C8088294A63A400263BE5 /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = AC42218FD0A0DB137D157E93 /* Pods-RunnerTests.debug.xcconfig */;
+ baseConfigurationReference = 86D6A3692EBE5943C3C75411 /* Pods-RunnerTests.debug.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = com.example.gifunavi.RunnerTests;
+ PRODUCT_BUNDLE_IDENTIFIER = com.dvox.gifunaviGit.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
SWIFT_OPTIMIZATION_LEVEL = "-Onone";
@@ -526,14 +526,14 @@
};
331C8089294A63A400263BE5 /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 89205C63F97F88BDB459168E /* Pods-RunnerTests.release.xcconfig */;
+ baseConfigurationReference = 6850CF9EE994EB8682BD460F /* Pods-RunnerTests.release.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = com.example.gifunavi.RunnerTests;
+ PRODUCT_BUNDLE_IDENTIFIER = com.dvox.gifunaviGit.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
@@ -542,14 +542,14 @@
};
331C808A294A63A400263BE5 /* Profile */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 89EEC485D24E5B1BC0DD7B8E /* Pods-RunnerTests.profile.xcconfig */;
+ baseConfigurationReference = 9E76BC5648643A00E08CF70B /* Pods-RunnerTests.profile.xcconfig */;
buildSettings = {
BUNDLE_LOADER = "$(TEST_HOST)";
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
GENERATE_INFOPLIST_FILE = YES;
MARKETING_VERSION = 1.0;
- PRODUCT_BUNDLE_IDENTIFIER = com.example.gifunavi.RunnerTests;
+ PRODUCT_BUNDLE_IDENTIFIER = com.dvox.gifunaviGit.RunnerTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_VERSION = 5.0;
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner";
@@ -560,7 +560,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
- ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
@@ -617,7 +617,7 @@
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
- ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = AppIcon;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
CLANG_ANALYZER_NONNULL = YES;
CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
CLANG_CXX_LIBRARY = "libc++";
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
index e25381f..dc9ada4 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
index 3641719..7353c41 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
index 683703e..797d452 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
index 33f79d9..6ed2d93 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
index cc4b3ac..4cd7b00 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
index c1b47e2..fe73094 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
index c1e2731..321773c 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
index 683703e..797d452 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
index 8a55696..502f463 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
index a14e94b..0ec3034 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png
deleted file mode 100644
index ee6c4d3..0000000
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@1x.png and /dev/null differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png
deleted file mode 100644
index 4d15a63..0000000
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-50x50@2x.png and /dev/null differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png
deleted file mode 100644
index ad1119d..0000000
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@1x.png and /dev/null differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png
deleted file mode 100644
index c3a317b..0000000
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-57x57@2x.png and /dev/null differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
index a14e94b..0ec3034 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
index 1599df8..e9f5fea 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png
deleted file mode 100644
index 899012d..0000000
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@1x.png and /dev/null differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png
deleted file mode 100644
index c94b6f2..0000000
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-72x72@2x.png and /dev/null differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
index 39ec196..84ac32a 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
index 8106b9a..8953cba 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ
diff --git a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
index a964c5e..0467bf1 100644
Binary files a/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and b/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ
diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist
index 5bf9375..5d91f6a 100644
--- a/ios/Runner/Info.plist
+++ b/ios/Runner/Info.plist
@@ -24,28 +24,24 @@
????
CFBundleVersion
$(FLUTTER_BUILD_NUMBER)
- LSApplicationCategoryType
-
LSRequiresIPhoneOS
- NSCameraUsageDescription
- 岐阜ナビはチェックポイントで撮影した写真を写真ライブラリに保存し、通過記録を保持し、競技結果として提出することができます。
- NSLocationAlwaysAndWhenInUseUsageDescription
- 岐阜ナビはアプリが閉じられているときでも位置情報へのアクセスが必要です。これにより、走行履歴の記録ができ、レビュー時の参考にすることができます。
- NSLocationAlwaysUsageDescription
- このアプリではバックグラウンドで位置情報にアクセスします。
- NSLocationWhenInUseUsageDescription
- このアプリはチェックポイントへのチェックインや走行履歴を記録するために、位置情報にアクセスします。
- NSMicrophoneUsageDescription
- このアプリではカメラは使用しますが、マイクの使用は当面行いません。
- NSPhotoLibraryUsageDescription
- 撮影した写真はデバイスのアルバムに保存されます。これにより、不具合時の通過記録を安全に担保することができます。
+ NSCameraUsageDescription
+ 岐阜ナビはチェックポイントで撮影した写真を写真ライブラリに保存し、通過記録を保持し、競技結果として提出することができます。
+ NSLocationAlwaysAndWhenInUseUsageDescription
+ 岐阜ナビはアプリが閉じられているときでも位置情報へのアクセスが必要です。これにより、走行履歴の記録ができ、レビュー時の参考にすることができます。
+ NSLocationAlwaysUsageDescription
+ このアプリではバックグラウンドで位置情報にアクセスします。
+ NSLocationWhenInUseUsageDescription
+ このアプリはチェックポイントへのチェックインや走行履歴を記録するために、位置情報にアクセスします。
+ NSMicrophoneUsageDescription
+ このアプリではカメラは使用しますが、マイクの使用は当面行いません。
+ NSPhotoLibraryAddUsageDescription
+ 撮影した写真はデバイスのアルバムに保存されます。これにより、不具合時の通過記録を安全に担保することができます。
+ NSPhotoLibraryUsageDescription
+ 撮影した写真はデバイスのアルバムに保存されます。これにより、不具合時の通過記録を安全に担保することができます。
UIApplicationSupportsIndirectInputEvents
- UIBackgroundModes
-
- location
-
UILaunchStoryboardName
LaunchScreen
UIMainStoryboardFile
@@ -63,9 +59,7 @@
UIInterfaceOrientationLandscapeLeft
UIInterfaceOrientationLandscapeRight
- UIViewControllerBasedStatusBarAppearance
-
- io.flutter.embedded_views_preview
-
+ LSApplicationCategoryType
+
diff --git a/lib/main.dart b/lib/main.dart
index f1a4da6..61d31df 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -38,8 +38,10 @@ import 'pages/permission/permission.dart';
import 'package:gifunavi/services/api_service.dart';
import 'package:gifunavi/provider/cached_tile_provider.dart';
-import 'package:gifunavi/pages/entry/entry_controller.dart';
-import 'package:gifunavi/pages/team/team_controller.dart';
+//import 'package:gifunavi/pages/entry/entry_controller.dart';
+//import 'package:gifunavi/pages/team/team_controller.dart';
+
+import 'package:timezone/timezone.dart' as tz;
Map deviceInfo = {};
@@ -56,14 +58,25 @@ void saveGameState() async {
*/
// 現在のユーザーのIDも一緒に保存するようにします。
-void saveGameState() async {
+Future saveGameState() async {
DestinationController destinationController =
Get.find();
IndexController indexController = Get.find();
SharedPreferences pref = await SharedPreferences.getInstance();
- debugPrint("indexController.currentUser = ${indexController.currentUser}");
+ debugPrint("ゲームステータス保存 = ${indexController.currentUser}");
if(indexController.currentUser.isNotEmpty) {
pref.setInt("user_id", indexController.currentUser[0]["user"]["id"]);
+
+ if(indexController.currentUser[0]["user"]["event_date"]!=null) {
+ final date = indexController.currentUser[0]["user"]["event_date"];
+ pref.setString('eventDate', date.toIso8601String());
+ debugPrint("Saved date is ${date} => ${date.toIso8601String()}");
+ pref.setString('eventCode', indexController.currentUser[0]["user"]["event_code"]);
+ pref.setString('teamName', indexController.currentUser[0]["user"]["team_name"]);
+ pref.setString('group', indexController.currentUser[0]["user"]["group"]);
+ //final zekken = indexController.currentUser[0]["user"]["zekken_number"];
+ pref.setInt('zekkenNumber', indexController.currentUser[0]["user"]["zekken_number"]);
+ }
}else{
debugPrint("User is empty....");
}
@@ -73,75 +86,118 @@ void saveGameState() async {
pref.setBool("ready_for_goal", DestinationController.ready_for_goal);
}
-/*
-void restoreGame() async {
- SharedPreferences pref = await SharedPreferences.getInstance();
- DestinationController destinationController =
- Get.find();
- destinationController.skipGps = false;
- destinationController.isInRog.value = pref.getBool("is_in_rog") ?? false;
- destinationController.rogainingCounted.value =
- pref.getBool("rogaining_counted") ?? false;
- DestinationController.ready_for_goal =
- pref.getBool("ready_for_goal") ?? false;
- //print(
- // "--restored -- destinationController.isInRog.value ${pref.getBool("is_in_rog")} -- ${pref.getBool("rogaining_counted")}");
-}
- */
-void restoreGame() async {
+
+// _indexController.currentUser[0]["user"]["event_date"] = entryDate; // 追加2024-8-9
+// _indexController.currentUser[0]["user"]["event_code"] = entry.event.eventName;
+// _indexController.currentUser[0]["user"]["team_name"] = entry.team.teamName;
+// _indexController.currentUser[0]["user"]["group"] = entry.team.category.categoryName;
+// _indexController.currentUser[0]["user"]["zekken_number"] = entry.zekkenNumber;
+
+Future restoreGame() async {
SharedPreferences pref = await SharedPreferences.getInstance();
+
IndexController indexController = Get.find();
int? savedUserId = pref.getInt("user_id");
//int? currUserId = indexController.currentUser[0]['user']['id'];
- //debugPrint("savedUserId=${savedUserId}, currentUser=${currUserId}");
+ debugPrint("ゲームステータス再現 savedUserId=${savedUserId}");
if (indexController.currentUser.isNotEmpty &&
indexController.currentUser[0]["user"]["id"] == savedUserId) {
- DestinationController destinationController =
- Get.find();
+
+ final dateString = pref.getString('eventDate');
+ if (dateString != null) {
+ final parsedDate = DateTime.parse(dateString);
+ final jstDate = tz.TZDateTime.from(parsedDate, tz.getLocation('Asia/Tokyo'));
+ debugPrint("restore date is ${dateString} => ${jstDate}");
+ indexController.currentUser[0]["user"]["event_date"] = jstDate;
+ //indexController.currentUser[0]["user"]["event_date"] = DateTime.parse(dateString);
+ }
+ //debugPrint("restore date is ${dateString?} => ${DateTime.parse(dateString)}");
+
+ indexController.currentUser[0]["user"]["event_code"] = pref.getString('eventCode');
+ indexController.currentUser[0]["user"]["team_name"] = pref.getString('teamName');
+ indexController.currentUser[0]["user"]["group"] = pref.getString('group');
+ indexController.currentUser[0]["user"]["zekken_number"] = pref.getInt('zekkenNumber');
+
+ debugPrint("user = ${indexController.currentUser[0]["user"]}");
+
+ DestinationController destinationController = Get.find();
destinationController.skipGps = false;
destinationController.isInRog.value = pref.getBool("is_in_rog") ?? false;
- destinationController.rogainingCounted.value =
- pref.getBool("rogaining_counted") ?? false;
- DestinationController.ready_for_goal =
- pref.getBool("ready_for_goal") ?? false;
- await Get.putAsync(() => ApiService().init());
+ destinationController.rogainingCounted.value = pref.getBool("rogaining_counted") ?? false;
+ DestinationController.ready_for_goal = pref.getBool("ready_for_goal") ?? false;
+ //await Get.putAsync(() => ApiService().init());
+
+ if (indexController.currentUser[0]["user"]["event_code"] != null) {
+ indexController.setSelectedEventName(indexController.currentUser[0]["user"]["event_code"]);
+ } else {
+ indexController.setSelectedEventName('未参加');
+ }
+
+ }else{
+ indexController.setSelectedEventName('未参加');
}
}
+/*
+void restoreGame_new() async {
+ SharedPreferences pref = await SharedPreferences.getInstance();
+ IndexController indexController = Get.find();
+
+ DestinationController destinationController = Get.find();
+ destinationController.skipGps = false;
+ destinationController.isInRog.value = pref.getBool("is_in_rog") ?? false;
+ destinationController.rogainingCounted.value = pref.getBool("rogaining_counted") ?? false;
+ DestinationController.ready_for_goal = pref.getBool("ready_for_goal") ?? false;
+
+ int? savedUserId = pref.getInt("user_id");
+ if (indexController.currentUser.isNotEmpty && indexController.currentUser[0]["user"]["id"] == savedUserId) {
+ final dateString = pref.getString('eventDate');
+ if (dateString != null) {
+ indexController.currentUser[0]["user"]["event_date"] = DateTime.parse(dateString);
+ }
+ indexController.currentUser[0]["user"]["event_code"] = pref.getString('eventCode');
+ indexController.currentUser[0]["user"]["team_name"] = pref.getString('teamName');
+ indexController.currentUser[0]["user"]["group"] = pref.getString('group');
+ indexController.currentUser[0]["user"]["zekken_number"] = pref.getInt('zekkenNumber');
+
+ if (indexController.currentUser[0]["user"]["event_code"] != null) {
+ indexController.setSelectedEventName(indexController.currentUser[0]["user"]["event_code"]);
+ } else {
+ indexController.setSelectedEventName('未参加');
+ _showEventSelectionWarning();
+ Get.toNamed(AppPages.EVENT_ENTRY);
+ }
+ } else {
+ indexController.setSelectedEventName('未参加');
+ _showEventSelectionWarning();
+ Get.toNamed(AppPages.EVENT_ENTRY);
+ }
+
+ await Get.putAsync(() => ApiService().init());
+}
+
+ */
+
+void _showEventSelectionWarning() {
+ Get.dialog(
+ AlertDialog(
+ title: Text('警告'),
+ content: Text('イベントを選択してください。'),
+ actions: [
+ TextButton(
+ child: Text('OK'),
+ onPressed: () => Get.back(),
+ ),
+ ],
+ ),
+ );
+}
+
void main() async {
WidgetsFlutterBinding.ensureInitialized();
- Get.put(LocationController());
- /*
- Get.put(ApiService());
- Get.put(TeamController());
- Get.put(EntryController());
- Get.put(IndexController());
- */
- /*
- await FlutterMapTileCaching.initialise();
-
- final StoreDirectory instanceA = FMTC.instance('OpenStreetMap (A)');
- await instanceA.manage.createAsync();
- await instanceA.metadata.addAsync(
- key: 'sourceURL',
- value: 'https://cyberjapandata.gsi.go.jp/xyz/std/{z}/{x}/{y}.png',
- );
- await instanceA.metadata.addAsync(
- key: 'validDuration',
- value: '14',
- );
- await instanceA.metadata.addAsync(
- key: 'behaviour',
- value: 'cacheFirst',
- );
-*/
-// 新しいキャッシュプロバイダーの初期化
- await CacheProvider.initialize();
-
- // 使用不可
- //deviceInfo = await DeviceInfoService.getDeviceInfo();
+ final IndexController _indexController;
FlutterError.onError = (FlutterErrorDetails details) {
FlutterError.presentError(details);
@@ -150,67 +206,98 @@ void main() async {
ErrorService.reportError(details.exception, details.stack ?? StackTrace.current, deviceInfo, LogManager().operationLogs);
};
- //Get.put(LocationController());
-
- //await PermissionController.checkAndRequestPermissions();
- //requestLocationPermission();
-
-
-
- // startMemoryMonitoring(); // 2024-4-8 Akira: メモリ使用量のチェックを開始 See #2810
- Get.put(SettingsController()); // これを追加
-
-
- /*
- runZonedGuarded(() {
- runApp(const ProviderScope(child: MyApp()));
- }, (error, stackTrace) {
- ErrorService.reportError(error, stackTrace, deviceInfo);
- });
- */
-
- FlutterError.onError = (FlutterErrorDetails details) {
- FlutterError.presentError(details);
- debugPrint('Flutter error: ${details.exception}');
- debugPrint('Stack trace: ${details.stack}');
- };
-
try {
- tz.initializeTimeZones();
-
- // ApiServiceを初期化
//await Get.putAsync(() => ApiService().init());
+ await _initApiService();
+ debugPrint("1: start ApiService");
+
+ // すべてのコントローラーとサービスを非同期で初期化
+ Get.lazyPut(() => IndexController(apiService: Get.find()));
+ debugPrint("2: start IndexController");
+
+
+ // その他のコントローラーを遅延初期化
+ Get.lazyPut(() => SettingsController());
+ debugPrint("2: start SettingsController");
+ Get.lazyPut(() => DestinationController());
+ debugPrint("3: start DestinationController");
+
await initServices();
runApp(const ProviderScope(child: MyApp()));
- //runApp(HomePage()); // MyApp()からHomePage()に変更
- //runApp(const MyApp());
}catch(e, stackTrace){
print('Error during initialization: $e');
print('Stack trace: $stackTrace');
+
+ // エラーが発生した場合、エラー画面を表示
+ runApp(ErrorApp(error: e.toString()));
}
}
Future initServices() async {
print('Starting services ...');
try {
- await Get.putAsync(() => ApiService().init());
- print('All services started...');
+
+ // 非同期処理を並列実行
+ await Future.wait([
+ _initTimeZone(),
+ _initCacheProvider(),
+ ]);
+ print('=== 5. Initialized TimeZone...');
+ print('=== 6. CacheProvider started...');
+
+ Get.put(PermissionController());
+ await _checkPermissions();
+ debugPrint("7: start PermissionController");
+
}catch(e){
- print('Error initializing ApiService: $e');
+ print('Error initializing : $e');
}
-
- try {
- Get.put(SettingsController());
- print('SettingsController initialized successfully');
- } catch (e) {
- print('Error initializing SettingsController: $e');
- }
-
print('All services started...');
}
+Future _initLocationController() async {
+ if (!Get.isRegistered()) {
+ Get.put(LocationController());
+ }
+ print('=== 1. LocationController started...');
+}
+
+Future _initTimeZone() async {
+ tz.initializeTimeZones();
+}
+
+Future _initCacheProvider() async {
+ await CacheProvider.initialize();
+}
+
+Future _checkPermissions() async {
+ await PermissionController.checkAndRequestPermissions();
+}
+
+Future _initApiService() async {
+ await Get.putAsync(() => ApiService().init());
+ //Get.lazyPut(() => ApiService());
+}
+
+class ErrorApp extends StatelessWidget {
+ final String error;
+
+ const ErrorApp({super.key, required this.error});
+
+ @override
+ Widget build(BuildContext context) {
+ return MaterialApp(
+ home: Scaffold(
+ body: Center(
+ child: Text('アプリの起動中にエラーが発生しました: $error'),
+ ),
+ ),
+ );
+ }
+ }
+
Future requestLocationPermission() async {
try {
final status = await Permission.locationAlways.request();
@@ -300,70 +387,80 @@ String team_name="";
String event_code="";
Future startBackgroundTracking() async {
- if (Platform.isIOS && background==false) {
-
- final IndexController indexController = Get.find();
- if(indexController.currentUser.isNotEmpty) {
- team_name = indexController.currentUser[0]["user"]['team_name'];
- event_code = indexController.currentUser[0]["user"]["event_code"];
- }
+ try {
+ if (Platform.isIOS && background == false) {
+ final IndexController indexController = Get.find();
+ if (indexController.currentUser.isNotEmpty &&
+ indexController.currentUser[0]["user"]['team_name'] != null) {
+ team_name = indexController.currentUser[0]["user"]['team_name'];
+ event_code = indexController.currentUser[0]["user"]["event_code"];
+ }
background = true;
- debugPrint("バックグラウンド処理を開始しました。");
- const LocationSettings locationSettings = LocationSettings(
- accuracy: LocationAccuracy.high,
- distanceFilter: 100,
- );
+ debugPrint("バックグラウンド処理を開始しました。");
+ const LocationSettings locationSettings = LocationSettings(
+ accuracy: LocationAccuracy.high,
+ distanceFilter: 100,
+ );
- try {
- positionStream = Geolocator.getPositionStream(locationSettings: locationSettings)
- .listen((Position? position) async {
- if (position != null) {
- final lat = position.latitude;
- final lng = position.longitude;
- //final timestamp = DateTime.now();
- final accuracy = position.accuracy;
+ try {
+ positionStream =
+ Geolocator.getPositionStream(locationSettings: locationSettings)
+ .listen((Position? position) async {
+ if (position != null) {
+ final lat = position.latitude;
+ final lng = position.longitude;
+ //final timestamp = DateTime.now();
+ final accuracy = position.accuracy;
- // GPS信号強度がlowの場合はスキップ
- if (accuracy > 100) {
- debugPrint("GPS signal strength is low. Skipping data saving.");
- return;
- }
+ // GPS信号強度がlowの場合はスキップ
+ if (accuracy > 100) {
+ debugPrint(
+ "GPS signal strength is low. Skipping data saving.");
+ return;
+ }
- Duration difference = lastGPSCollectedTime.difference(DateTime.now())
- .abs();
- // 最後にGPS信号を取得した時刻から10秒以上経過、かつ10m以上経過(普通に歩くスピード)
- //debugPrint("時間差:${difference}");
- if (difference.inSeconds >= 10 ) {
- debugPrint("バックグラウンドでのGPS取得時の処理(10secおき) count=${difference.inSeconds}, time=${DateTime.now()}");
+ Duration difference = lastGPSCollectedTime.difference(
+ DateTime.now())
+ .abs();
+ // 最後にGPS信号を取得した時刻から10秒以上経過、かつ10m以上経過(普通に歩くスピード)
+ //debugPrint("時間差:${difference}");
+ if (difference.inSeconds >= 10) {
+ debugPrint(
+ "バックグラウンドでのGPS取得時の処理(10secおき) count=${difference
+ .inSeconds}, time=${DateTime.now()}");
- // DBにGPSデータを保存 pages/destination/destination_controller.dart
- await addGPStoDB(lat, lng);
+ // DBにGPSデータを保存 pages/destination/destination_controller.dart
+ await addGPStoDB(lat, lng);
- lastGPSCollectedTime = DateTime.now();
- }
- }
- }, onError: (error) {
- if (error is LocationServiceDisabledException) {
- print('Location services are disabled');
- } else if (error is PermissionDeniedException) {
- print('Location permissions are denied');
- } else {
- print('Location Error: $error');
- }
- });
- } catch (e) {
- print('Error starting background tracking: $e');
- }
- }else if (Platform.isAndroid && background == false) {
- background = true;
- debugPrint("バックグラウンド処理を開始しました。");
-
- try {
- // 位置情報の権限が許可されているかを確認
- await PermissionController.checkAndRequestPermissions();
- }catch(e){
- print('Error starting background tracking: $e');
+ lastGPSCollectedTime = DateTime.now();
+ }
+ }
+ }, onError: (error) {
+ if (error is LocationServiceDisabledException) {
+ print('Location services are disabled');
+ } else if (error is PermissionDeniedException) {
+ print('Location permissions are denied');
+ } else {
+ print('Location Error: $error');
+ }
+ });
+ } catch (e) {
+ print('Error starting background tracking: $e');
+ }
+ } else if (Platform.isAndroid && background == false) {
+ background = true;
+ debugPrint("バックグラウンド処理を開始しました。");
+
+ try {
+ // 位置情報の権限が許可されているかを確認
+ await PermissionController.checkAndRequestPermissions();
+ } catch (e) {
+ print('Error starting background tracking: $e');
+ }
}
+ } catch (e) {
+ print('Error starting background tracking: $e');
+ // 再試行するか、エラーを適切に処理
}
}
@@ -388,20 +485,24 @@ Future addGPStoDB(double la, double ln) async {
}
Future stopBackgroundTracking() async {
- if (Platform.isIOS && background==true) {
- background=false;
- debugPrint("バックグラウンド処理:停止しました。");
- await positionStream?.cancel();
- positionStream = null;
- }else if(Platform.isAndroid && background==true){
- background=false;
- debugPrint("バックグラウンド処理:停止しました。");
- const platform = MethodChannel('location');
- try {
- await platform.invokeMethod('stopLocationService');
- } on PlatformException catch (e) {
- print("Failed to stop location service: '${e.message}'.");
+ try {
+ if (Platform.isIOS && background == true) {
+ background = false;
+ debugPrint("バックグラウンド処理:停止しました。");
+ await positionStream?.cancel();
+ positionStream = null;
+ } else if (Platform.isAndroid && background == true) {
+ background = false;
+ debugPrint("バックグラウンド処理:停止しました。");
+ const platform = MethodChannel('location');
+ try {
+ await platform.invokeMethod('stopLocationService');
+ } on PlatformException catch (e) {
+ print("Failed to stop location service: '${e.message}'.");
+ }
}
+ } catch(e){
+ print('Error stopping background tracking: $e');
}
}
@@ -414,18 +515,22 @@ class MyApp extends StatefulWidget {
class _MyAppState extends State with WidgetsBindingObserver {
// This widget is the root of your application.
+ late final LocationController _locationController;
+ late final IndexController _indexController;
+ late final DestinationController _destinationController;
+ late final PermissionController _permissionController;
+ Timer? _memoryCheckTimer;
@override
void initState() {
super.initState();
- if (!Get.isRegistered()) {
- Get.put(LocationController());
- }
+ _initializeControllers();
+ WidgetsBinding.instance.addObserver(this);
+ //_startMemoryMonitoring();
if (context.mounted) {
- restoreGame();
+ // _restoreGameAndInitialize();
}
- WidgetsBinding.instance.addObserver(this);
// ウィジェットが構築された後に権限をチェック
WidgetsBinding.instance.addPostFrameCallback((_) {
@@ -435,6 +540,105 @@ class _MyAppState extends State with WidgetsBindingObserver {
debugPrint("Start MyAppState...");
}
+ Future _restoreGameAndInitialize() async {
+ await restoreGame();
+ // ここに他の初期化処理を追加できます
+ }
+
+ void _initializeControllers() {
+ /*
+ if (!Get.isRegistered()) {
+ _locationController = Get.put(LocationController(), permanent: true);
+ }
+ if (!Get.isRegistered()) {
+ _indexController = Get.put(IndexController(apiService: Get.find()), permanent: true);
+ }
+ if (!Get.isRegistered()) {
+ _destinationController =
+ Get.put(DestinationController(), permanent: true);
+ }
+ if (!Get.isRegistered()) {
+ _permissionController = Get.put(PermissionController());
+ }
+ // 他の必要なコントローラーの初期化
+
+ */
+ }
+
+ void _startMemoryMonitoring() {
+ /*
+ _memoryCheckTimer = Timer.periodic(const Duration(seconds: 10), (timer) {
+ _checkMemoryUsage();
+ });
+
+ */
+ }
+
+ void _checkMemoryUsage() async {
+ final memoryInfo = await _getMemoryInfo();
+ //debugPrint('Current memory usage: ${memoryInfo['used']} MB');
+ if (memoryInfo['used']! > 100) { // 100MB以上使用している場合
+ _performMemoryCleanup();
+ }
+ }
+
+ Future