diff --git a/AgileWorks/AgileWorks.xcodeproj/project.pbxproj b/AgileWorks/AgileWorks.xcodeproj/project.pbxproj index bafadefc015576e1f17c2287f7dc2f183af71c28..5fdb160bd538f1135fa79cef5450fe6020a4d6a4 100644 --- a/AgileWorks/AgileWorks.xcodeproj/project.pbxproj +++ b/AgileWorks/AgileWorks.xcodeproj/project.pbxproj @@ -24,6 +24,11 @@ 3AED7EE42449387600FC6BCC /* SearchResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3AED7EE32449387600FC6BCC /* SearchResponse.swift */; }; 3AF4A84524A06A73006C0C0A /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 3AF4A84724A06A73006C0C0A /* Localizable.strings */; }; 430C967B2E966FC047726763 /* Pods_All_AgileWorks.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CF516C40B9AA44C977664C98 /* Pods_All_AgileWorks.framework */; }; + 7549FC8F27EAF42C00FF9E0C /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 3AF4A84724A06A73006C0C0A /* Localizable.strings */; }; + 7549FC9027EAF42C00FF9E0C /* English.strings in Resources */ = {isa = PBXBuildFile; fileRef = 75917F9D27BDF1C30051E201 /* English.strings */; }; + 7549FC9127EAF42C00FF9E0C /* Japanese.strings in Resources */ = {isa = PBXBuildFile; fileRef = 75917F9B27BDF0F10051E201 /* Japanese.strings */; }; + 7549FC9227EAF42C00FF9E0C /* Chinese-Simplified.strings in Resources */ = {isa = PBXBuildFile; fileRef = 75917F9F27BDF2050051E201 /* Chinese-Simplified.strings */; }; + 7549FC9327EAF42C00FF9E0C /* Chinese-Traditional.strings in Resources */ = {isa = PBXBuildFile; fileRef = 75917FA127BDF2250051E201 /* Chinese-Traditional.strings */; }; 75917F9C27BDF0F10051E201 /* Japanese.strings in Resources */ = {isa = PBXBuildFile; fileRef = 75917F9B27BDF0F10051E201 /* Japanese.strings */; }; 75917F9E27BDF1C30051E201 /* English.strings in Resources */ = {isa = PBXBuildFile; fileRef = 75917F9D27BDF1C30051E201 /* English.strings */; }; 75917FA027BDF2050051E201 /* Chinese-Simplified.strings in Resources */ = {isa = PBXBuildFile; fileRef = 75917F9F27BDF2050051E201 /* Chinese-Simplified.strings */; }; @@ -44,6 +49,30 @@ 75917FB527C371390051E201 /* StringsUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75917FB227C371390051E201 /* StringsUtility.swift */; }; 75917FB627C372C80051E201 /* XCGLoggerExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD8D55D82420609000A667B0 /* XCGLoggerExtensions.swift */; }; 75917FB727C373060051E201 /* UserDefaultsExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDAB1F6C240D0D0000EA15FD /* UserDefaultsExtensions.swift */; }; + 75EF9CAE27E9E983003178A3 /* WidgetKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 75EF9CAD27E9E983003178A3 /* WidgetKit.framework */; }; + 75EF9CB027E9E983003178A3 /* SwiftUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 75EF9CAF27E9E983003178A3 /* SwiftUI.framework */; }; + 75EF9CB327E9E983003178A3 /* WidgetExtension.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EF9CB227E9E983003178A3 /* WidgetExtension.swift */; }; + 75EF9CB527E9E984003178A3 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 75EF9CB427E9E984003178A3 /* Assets.xcassets */; }; + 75EF9CB927E9E985003178A3 /* WidgetExtension.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 75EF9CAC27E9E983003178A3 /* WidgetExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 75EF9CC027E9EC88003178A3 /* NumberUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761F49E1255511A1007708D8 /* NumberUtility.swift */; }; + 75EF9CC127E9EC90003178A3 /* CertificateDataStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = 764D0DB0257F44DF00AB6617 /* CertificateDataStore.swift */; }; + 75EF9CC227E9ECD2003178A3 /* GetSessionEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDAB1F70240D0E5C00EA15FD /* GetSessionEndpoint.swift */; }; + 75EF9CC327E9ECDB003178A3 /* KeychainDataStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDEA2CD4246CDAEF00D3E15F /* KeychainDataStore.swift */; }; + 75EF9CC427E9ECE5003178A3 /* URLAuthenticationUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 764D0E1A2580ABCB00AB6617 /* URLAuthenticationUtility.swift */; }; + 75EF9CC527E9ECEF003178A3 /* SessionInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD969630240C9CD400521925 /* SessionInfo.swift */; }; + 75EF9CC627E9ECEF003178A3 /* Session.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD25F852242A05510014B726 /* Session.swift */; }; + 75EF9CC727E9ECF9003178A3 /* APIEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDAB1F6E240D0D1400EA15FD /* APIEndpoint.swift */; }; + 75EF9CC827E9ED18003178A3 /* UserDefaultsDataStore.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD928CCD2407500400ED04C2 /* UserDefaultsDataStore.swift */; }; + 75EF9CC927E9ED18003178A3 /* UserDefaultsExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDAB1F6C240D0D0000EA15FD /* UserDefaultsExtensions.swift */; }; + 75EF9CCA27E9ED21003178A3 /* APIResult.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD86A6B024067EB3007B48F1 /* APIResult.swift */; }; + 75EF9CCB27E9ED28003178A3 /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD5061B3242866780014F3FA /* Configuration.swift */; }; + 75EF9CCC27E9ED3B003178A3 /* ApprovalResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = 31AA002E24347BBD000177B4 /* ApprovalResponse.swift */; }; + 75EF9CCD27E9ED53003178A3 /* GetApprovalsEndpoint.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD904167243B2994009D0B19 /* GetApprovalsEndpoint.swift */; }; + 75EF9CCE27E9ED5F003178A3 /* Log.swift in Sources */ = {isa = PBXBuildFile; fileRef = BDA74C5524501917000D4351 /* Log.swift */; }; + 75EF9CCF27E9ED6D003178A3 /* ErrorResponse.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD7DC0F124C0608800C3FBED /* ErrorResponse.swift */; }; + 75EF9CD027E9ED7B003178A3 /* StringsUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75917FB227C371390051E201 /* StringsUtility.swift */; }; + 75EF9CD127E9ED82003178A3 /* XCGLoggerExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD8D55D82420609000A667B0 /* XCGLoggerExtensions.swift */; }; + 75EF9CD227E9ED8C003178A3 /* OAuthService.swift in Sources */ = {isa = PBXBuildFile; fileRef = BD72589E240E69E000928CE9 /* OAuthService.swift */; }; 7604950425380980000D6951 /* FirebaseSupport.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7604950325380980000D6951 /* FirebaseSupport.swift */; }; 761F49E2255511A1007708D8 /* NumberUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761F49E1255511A1007708D8 /* NumberUtility.swift */; }; 761F4A0925551FCF007708D8 /* NumberUtility.swift in Sources */ = {isa = PBXBuildFile; fileRef = 761F49E1255511A1007708D8 /* NumberUtility.swift */; }; @@ -181,6 +210,13 @@ remoteGlobalIDString = 3127EE09241A2A9500535CC7; remoteInfo = TodayExtension; }; + 75EF9CB727E9E984003178A3 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = BDA1830723F3FD7F00C9A6DD /* Project object */; + proxyType = 1; + remoteGlobalIDString = 75EF9CAB27E9E983003178A3; + remoteInfo = WidgetExtensionExtension; + }; 7672AD71257EFF500063884A /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BDA1830723F3FD7F00C9A6DD /* Project object */; @@ -199,6 +235,7 @@ files = ( 7672AD73257EFF500063884A /* ShareExtension.appex in Embed App Extensions */, 3127EE16241A2A9500535CC7 /* TodayExtension.appex in Embed App Extensions */, + 75EF9CB927E9E985003178A3 /* WidgetExtension.appex in Embed App Extensions */, ); name = "Embed App Extensions"; runOnlyForDeploymentPostprocessing = 0; @@ -222,6 +259,7 @@ 3AED7EE32449387600FC6BCC /* SearchResponse.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SearchResponse.swift; sourceTree = ""; }; 3AF4A84624A06A73006C0C0A /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 3AF4A84824A06AD0006C0C0A /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/Localizable.strings; sourceTree = ""; }; + 7503F77D27EAF7E00074A76E /* WidgetExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = WidgetExtension.entitlements; sourceTree = ""; }; 75917F8F27BD315A0051E201 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/LaunchScreen.strings"; sourceTree = ""; }; 75917F9027BD315A0051E201 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/MainInterface.strings"; sourceTree = ""; }; 75917F9227BD315A0051E201 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/Localizable.strings"; sourceTree = ""; }; @@ -233,6 +271,15 @@ 75917F9F27BDF2050051E201 /* Chinese-Simplified.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; path = "Chinese-Simplified.strings"; sourceTree = ""; }; 75917FA127BDF2250051E201 /* Chinese-Traditional.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; path = "Chinese-Traditional.strings"; sourceTree = ""; }; 75917FB227C371390051E201 /* StringsUtility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StringsUtility.swift; sourceTree = ""; }; + 75EF9CAC27E9E983003178A3 /* WidgetExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = WidgetExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; + 75EF9CAD27E9E983003178A3 /* WidgetKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WidgetKit.framework; path = System/Library/Frameworks/WidgetKit.framework; sourceTree = SDKROOT; }; + 75EF9CAF27E9E983003178A3 /* SwiftUI.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SwiftUI.framework; path = System/Library/Frameworks/SwiftUI.framework; sourceTree = SDKROOT; }; + 75EF9CB227E9E983003178A3 /* WidgetExtension.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WidgetExtension.swift; sourceTree = ""; }; + 75EF9CB427E9E984003178A3 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 75EF9CB627E9E984003178A3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 75EF9CBD27E9EB6E003178A3 /* Production-Widget.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Production-Widget.xcconfig"; sourceTree = ""; }; + 75EF9CBE27E9EB93003178A3 /* Debug-Production-Widget.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Debug-Production-Widget.xcconfig"; sourceTree = ""; }; + 75EF9CBF27E9EBB3003178A3 /* Release-Production-Widget.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Release-Production-Widget.xcconfig"; sourceTree = ""; }; 7604950325380980000D6951 /* FirebaseSupport.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirebaseSupport.swift; sourceTree = ""; }; 761F49E1255511A1007708D8 /* NumberUtility.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NumberUtility.swift; sourceTree = ""; }; 761F4A48255D15DA007708D8 /* AppShared.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppShared.swift; sourceTree = ""; }; @@ -368,6 +415,15 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 75EF9CA927E9E983003178A3 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 75EF9CB027E9E983003178A3 /* SwiftUI.framework in Frameworks */, + 75EF9CAE27E9E983003178A3 /* WidgetKit.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 7672AD66257EFF500063884A /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -393,6 +449,8 @@ BDEB7D8F23F530A400EFAF31 /* KeychainAccess.framework */, 3127EE0B241A2A9500535CC7 /* NotificationCenter.framework */, CF516C40B9AA44C977664C98 /* Pods_All_AgileWorks.framework */, + 75EF9CAD27E9E983003178A3 /* WidgetKit.framework */, + 75EF9CAF27E9E983003178A3 /* SwiftUI.framework */, ); name = Frameworks; sourceTree = ""; @@ -466,6 +524,17 @@ path = Strings; sourceTree = ""; }; + 75EF9CB127E9E983003178A3 /* WidgetExtension */ = { + isa = PBXGroup; + children = ( + 7503F77D27EAF7E00074A76E /* WidgetExtension.entitlements */, + 75EF9CB227E9E983003178A3 /* WidgetExtension.swift */, + 75EF9CB427E9E984003178A3 /* Assets.xcassets */, + 75EF9CB627E9E984003178A3 /* Info.plist */, + ); + path = WidgetExtension; + sourceTree = ""; + }; 761F49E025551159007708D8 /* Utility */ = { isa = PBXGroup; children = ( @@ -635,6 +704,8 @@ BD5061AF242848560014F3FA /* Release-Production-Today.xcconfig */, 764D0DFF257F602400AB6617 /* Debug-Production-Share.xcconfig */, 764D0E00257F603400AB6617 /* Release-Production-Share.xcconfig */, + 75EF9CBE27E9EB93003178A3 /* Debug-Production-Widget.xcconfig */, + 75EF9CBF27E9EBB3003178A3 /* Release-Production-Widget.xcconfig */, ); path = Configurations; sourceTree = ""; @@ -646,6 +717,7 @@ BD50619B242844CC0014F3FA /* Production.xcconfig */, BD5061A1242845750014F3FA /* Production-Today.xcconfig */, 764D0DF7257F589D00AB6617 /* Production-Share.xcconfig */, + 75EF9CBD27E9EB6E003178A3 /* Production-Widget.xcconfig */, ); path = Flavor; sourceTree = ""; @@ -772,6 +844,7 @@ BD0231F1242B6DF3000A95BB /* Common */, 3127EE0D241A2A9500535CC7 /* TodayExtension */, 7672AD6A257EFF500063884A /* ShareExtension */, + 75EF9CB127E9E983003178A3 /* WidgetExtension */, BDA1831023F3FD7F00C9A6DD /* Products */, 833C64FFE6F6CB735DE07EB7 /* Pods */, 07A802C56A3436654CD69C43 /* Frameworks */, @@ -784,6 +857,7 @@ BDA1830F23F3FD7F00C9A6DD /* AgileWorks.app */, 3127EE0A241A2A9500535CC7 /* TodayExtension.appex */, 7672AD69257EFF500063884A /* ShareExtension.appex */, + 75EF9CAC27E9E983003178A3 /* WidgetExtension.appex */, ); name = Products; sourceTree = ""; @@ -1028,6 +1102,23 @@ productReference = 3127EE0A241A2A9500535CC7 /* TodayExtension.appex */; productType = "com.apple.product-type.app-extension"; }; + 75EF9CAB27E9E983003178A3 /* WidgetExtension */ = { + isa = PBXNativeTarget; + buildConfigurationList = 75EF9CBC27E9E985003178A3 /* Build configuration list for PBXNativeTarget "WidgetExtension" */; + buildPhases = ( + 75EF9CA827E9E983003178A3 /* Sources */, + 75EF9CA927E9E983003178A3 /* Frameworks */, + 75EF9CAA27E9E983003178A3 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = WidgetExtension; + productName = WidgetExtensionExtension; + productReference = 75EF9CAC27E9E983003178A3 /* WidgetExtension.appex */; + productType = "com.apple.product-type.app-extension"; + }; 7672AD68257EFF500063884A /* ShareExtension */ = { isa = PBXNativeTarget; buildConfigurationList = 7672AD76257EFF500063884A /* Build configuration list for PBXNativeTarget "ShareExtension" */; @@ -1063,6 +1154,7 @@ dependencies = ( 3127EE15241A2A9500535CC7 /* PBXTargetDependency */, 7672AD72257EFF500063884A /* PBXTargetDependency */, + 75EF9CB827E9E984003178A3 /* PBXTargetDependency */, ); name = AgileWorks; productName = AgileWorks; @@ -1075,13 +1167,16 @@ BDA1830723F3FD7F00C9A6DD /* Project object */ = { isa = PBXProject; attributes = { - LastSwiftUpdateCheck = 1220; + LastSwiftUpdateCheck = 1320; LastUpgradeCheck = 1140; ORGANIZATIONNAME = "ATLED CORP"; TargetAttributes = { 3127EE09241A2A9500535CC7 = { CreatedOnToolsVersion = 11.3.1; }; + 75EF9CAB27E9E983003178A3 = { + CreatedOnToolsVersion = 13.2.1; + }; 7672AD68257EFF500063884A = { CreatedOnToolsVersion = 12.2; }; @@ -1110,6 +1205,7 @@ BDA1830E23F3FD7F00C9A6DD /* AgileWorks */, 3127EE09241A2A9500535CC7 /* TodayExtension */, 7672AD68257EFF500063884A /* ShareExtension */, + 75EF9CAB27E9E983003178A3 /* WidgetExtension */, ); }; /* End PBXProject section */ @@ -1128,6 +1224,19 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 75EF9CAA27E9E983003178A3 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7549FC8F27EAF42C00FF9E0C /* Localizable.strings in Resources */, + 7549FC9027EAF42C00FF9E0C /* English.strings in Resources */, + 7549FC9127EAF42C00FF9E0C /* Japanese.strings in Resources */, + 7549FC9227EAF42C00FF9E0C /* Chinese-Simplified.strings in Resources */, + 7549FC9327EAF42C00FF9E0C /* Chinese-Traditional.strings in Resources */, + 75EF9CB527E9E984003178A3 /* Assets.xcassets in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 7672AD67257EFF500063884A /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -1283,6 +1392,33 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 75EF9CA827E9E983003178A3 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 75EF9CD227E9ED8C003178A3 /* OAuthService.swift in Sources */, + 75EF9CD127E9ED82003178A3 /* XCGLoggerExtensions.swift in Sources */, + 75EF9CD027E9ED7B003178A3 /* StringsUtility.swift in Sources */, + 75EF9CCF27E9ED6D003178A3 /* ErrorResponse.swift in Sources */, + 75EF9CCE27E9ED5F003178A3 /* Log.swift in Sources */, + 75EF9CCD27E9ED53003178A3 /* GetApprovalsEndpoint.swift in Sources */, + 75EF9CCC27E9ED3B003178A3 /* ApprovalResponse.swift in Sources */, + 75EF9CCB27E9ED28003178A3 /* Configuration.swift in Sources */, + 75EF9CCA27E9ED21003178A3 /* APIResult.swift in Sources */, + 75EF9CC827E9ED18003178A3 /* UserDefaultsDataStore.swift in Sources */, + 75EF9CC927E9ED18003178A3 /* UserDefaultsExtensions.swift in Sources */, + 75EF9CC727E9ECF9003178A3 /* APIEndpoint.swift in Sources */, + 75EF9CC527E9ECEF003178A3 /* SessionInfo.swift in Sources */, + 75EF9CC627E9ECEF003178A3 /* Session.swift in Sources */, + 75EF9CC427E9ECE5003178A3 /* URLAuthenticationUtility.swift in Sources */, + 75EF9CC327E9ECDB003178A3 /* KeychainDataStore.swift in Sources */, + 75EF9CC227E9ECD2003178A3 /* GetSessionEndpoint.swift in Sources */, + 75EF9CC127E9EC90003178A3 /* CertificateDataStore.swift in Sources */, + 75EF9CC027E9EC88003178A3 /* NumberUtility.swift in Sources */, + 75EF9CB327E9E983003178A3 /* WidgetExtension.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 7672AD65257EFF500063884A /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -1405,6 +1541,11 @@ target = 3127EE09241A2A9500535CC7 /* TodayExtension */; targetProxy = 3127EE14241A2A9500535CC7 /* PBXContainerItemProxy */; }; + 75EF9CB827E9E984003178A3 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 75EF9CAB27E9E983003178A3 /* WidgetExtension */; + targetProxy = 75EF9CB727E9E984003178A3 /* PBXContainerItemProxy */; + }; 7672AD72257EFF500063884A /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 7672AD68257EFF500063884A /* ShareExtension */; @@ -1480,14 +1621,180 @@ }; name = "Release-Production"; }; + 75EF9CBA27E9E985003178A3 /* Release-Production */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 75EF9CBF27E9EBB3003178A3 /* Release-Production-Widget.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_ENTITLEMENTS = WidgetExtension/WidgetExtension.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Manual; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + DEVELOPMENT_TEAM = "4TWZNUHVN6"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = WidgetExtension/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = WidgetExtension; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 ATLED CORP. All rights reserved."; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_BUNDLE_IDENTIFIER = jp.atled.agileworks.WidgetExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = "Release-Production"; + }; + 75EF9CBB27E9E985003178A3 /* Debug-Production */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 75EF9CBE27E9EB93003178A3 /* Debug-Production-Widget.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; + ASSETCATALOG_COMPILER_WIDGET_BACKGROUND_COLOR_NAME = WidgetBackground; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_ENABLE_OBJC_WEAK = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + CODE_SIGN_ENTITLEMENTS = WidgetExtension/WidgetExtension.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + CODE_SIGN_STYLE = Manual; + COPY_PHASE_STRIP = NO; + CURRENT_PROJECT_VERSION = 1; + DEBUG_INFORMATION_FORMAT = dwarf; + DEVELOPMENT_TEAM = "4TWZNUHVN6"; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_FILE = WidgetExtension/Info.plist; + INFOPLIST_KEY_CFBundleDisplayName = WidgetExtension; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2022 ATLED CORP. All rights reserved."; + IPHONEOS_DEPLOYMENT_TARGET = 14.0; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); + MARKETING_VERSION = 1.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_BUNDLE_IDENTIFIER = jp.atled.agileworks.WidgetExtension; + PRODUCT_NAME = "$(TARGET_NAME)"; + PROVISIONING_PROFILE_SPECIFIER = ""; + SDKROOT = iphoneos; + SKIP_INSTALL = YES; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_EMIT_LOC_STRINGS = YES; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = "Debug-Production"; + }; 7672AD74257EFF500063884A /* Release-Production */ = { isa = XCBuildConfiguration; baseConfigurationReference = 764D0E00257F603400AB6617 /* Release-Production-Share.xcconfig */; buildSettings = { - CODE_SIGN_IDENTITY = "iPhone Distribution"; + CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Manual; CURRENT_PROJECT_VERSION = 1; - DEVELOPMENT_TEAM = 4TWZNUHVN6; + DEVELOPMENT_TEAM = "4TWZNUHVN6"; INFOPLIST_FILE = ShareExtension/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; LD_RUNPATH_SEARCH_PATHS = ( @@ -1498,7 +1805,7 @@ MARKETING_VERSION = 1.1.0; PRODUCT_BUNDLE_IDENTIFIER = jp.atled.agileworks.ShareExtension; PRODUCT_NAME = "$(TARGET_NAME)"; - PROVISIONING_PROFILE_SPECIFIER = "AgileWorks App ShareExtension Ad Hoc"; + PROVISIONING_PROFILE_SPECIFIER = ""; SKIP_INSTALL = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1583,7 +1890,7 @@ MTL_FAST_MATH = YES; SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; VALIDATE_PRODUCT = YES; }; name = "Debug-Production"; @@ -1751,7 +2058,7 @@ MTL_FAST_MATH = YES; SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; - SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; VALIDATE_PRODUCT = YES; }; name = "Release-Production"; @@ -1853,6 +2160,15 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = "Release-Production"; }; + 75EF9CBC27E9E985003178A3 /* Build configuration list for PBXNativeTarget "WidgetExtension" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 75EF9CBA27E9E985003178A3 /* Release-Production */, + 75EF9CBB27E9E985003178A3 /* Debug-Production */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = "Release-Production"; + }; 7672AD76257EFF500063884A /* Build configuration list for PBXNativeTarget "ShareExtension" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/AgileWorks/AgileWorks.xcodeproj/xcshareddata/xcschemes/WidgetExtension.xcscheme b/AgileWorks/AgileWorks.xcodeproj/xcshareddata/xcschemes/WidgetExtension.xcscheme new file mode 100644 index 0000000000000000000000000000000000000000..f4fd053830708006e397ba949dc01dd3ecd295ba --- /dev/null +++ b/AgileWorks/AgileWorks.xcodeproj/xcshareddata/xcschemes/WidgetExtension.xcscheme @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/AgileWorks/AgileWorks/App/RootViewController.swift b/AgileWorks/AgileWorks/App/RootViewController.swift index 578203f73f2ea82d840018a7a3ffd36f376cb62d..aa5bfab52cbda11d9eb7177d2c70a54376b72456 100644 --- a/AgileWorks/AgileWorks/App/RootViewController.swift +++ b/AgileWorks/AgileWorks/App/RootViewController.swift @@ -7,6 +7,7 @@ // import UIKit +import WidgetKit class RootViewController: UIViewController { private var current: UIViewController @@ -69,6 +70,10 @@ extension RootViewController { DispatchQueue.main.async { self.switchToLogout() + //ウィジェットの更新 + if #available(iOS 14.0, *) { + WidgetCenter.shared.reloadAllTimelines() + } } } } diff --git a/AgileWorks/AgileWorks/Strings/Chinese-Simplified.strings b/AgileWorks/AgileWorks/Strings/Chinese-Simplified.strings index aff780d68edbe42d925ab17308518297ee9fa934..3a3ce53f0b6c6651fe286af330b278d0f6463daa 100644 --- a/AgileWorks/AgileWorks/Strings/Chinese-Simplified.strings +++ b/AgileWorks/AgileWorks/Strings/Chinese-Simplified.strings @@ -63,7 +63,7 @@ // Approval Detail, Search Result "Number" = "No. %d"; "Form" = "%@"; -"Draft" = "下書き"; +//"Draft" = "下書き"; "Approving" = "承認中"; "Hold" = "保留"; "Reject" = "却下"; @@ -164,3 +164,14 @@ "CertificateImportSuccess" = "クライアント証明書をインポートしました。"; "IncorrectPassphrase" = "パスフレーズが違います。"; "CertificateImportError" = "証明書のインポート中にエラーが発生しました。"; + +// WidgetExtension +"Draft" = "下書き"; +"RequestApplication" = "申請依頼"; +"RequestApproval" = "承認依頼"; +"Remand" = "差戻し"; +"CheckReport" = "報告確認"; +"Demand" = "催促あり"; +"Share" = "共有した"; +"Shared" = "共有された"; +"Circulation" = "回付予定"; diff --git a/AgileWorks/AgileWorks/Strings/Chinese-Traditional.strings b/AgileWorks/AgileWorks/Strings/Chinese-Traditional.strings index 58f58101b5ae86f8db52aa26a025ce87eb2e4140..3b2086f28b7fa4ae55d26300cf87fed54a6259ee 100644 --- a/AgileWorks/AgileWorks/Strings/Chinese-Traditional.strings +++ b/AgileWorks/AgileWorks/Strings/Chinese-Traditional.strings @@ -63,7 +63,7 @@ // Approval Detail, Search Result "Number" = "No. %d"; "Form" = "%@"; -"Draft" = "下書き"; +//"Draft" = "下書き"; "Approving" = "承認中"; "Hold" = "保留"; "Reject" = "却下"; @@ -164,3 +164,14 @@ "CertificateImportSuccess" = "クライアント証明書をインポートしました。"; "IncorrectPassphrase" = "パスフレーズが違います。"; "CertificateImportError" = "証明書のインポート中にエラーが発生しました。"; + +// WidgetExtension +"Draft" = "下書き"; +"RequestApplication" = "申請依頼"; +"RequestApproval" = "承認依頼"; +"Remand" = "差戻し"; +"CheckReport" = "報告確認"; +"Demand" = "催促あり"; +"Share" = "共有した"; +"Shared" = "共有された"; +"Circulation" = "回付予定"; diff --git a/AgileWorks/AgileWorks/Strings/English.strings b/AgileWorks/AgileWorks/Strings/English.strings index 5d6317b6932ee6cc4176c02fc74cf65e1ce0ce3f..ca8214a59fda8ae25e23ca153fa71d02dc2cffa4 100644 --- a/AgileWorks/AgileWorks/Strings/English.strings +++ b/AgileWorks/AgileWorks/Strings/English.strings @@ -63,7 +63,7 @@ // Approval Detail, Search Result "Number" = "No. %d"; "Form" = "%@"; -"Draft" = "下書き"; +//"Draft" = "下書き"; "Approving" = "承認中"; "Hold" = "保留"; "Reject" = "却下"; @@ -164,3 +164,14 @@ "CertificateImportSuccess" = "クライアント証明書をインポートしました。"; "IncorrectPassphrase" = "パスフレーズが違います。"; "CertificateImportError" = "証明書のインポート中にエラーが発生しました。"; + +// WidgetExtension +"Draft" = "下書き"; +"RequestApplication" = "申請依頼"; +"RequestApproval" = "承認依頼"; +"Remand" = "差戻し"; +"CheckReport" = "報告確認"; +"Demand" = "催促あり"; +"Share" = "共有した"; +"Shared" = "共有された"; +"Circulation" = "回付予定"; diff --git a/AgileWorks/AgileWorks/Strings/Japanese.strings b/AgileWorks/AgileWorks/Strings/Japanese.strings index 8c8c1d070f2540f16ca1189c198922b844ac42f2..456297dfa16d614e4a3e53f2a358e981d6bc5cd2 100644 --- a/AgileWorks/AgileWorks/Strings/Japanese.strings +++ b/AgileWorks/AgileWorks/Strings/Japanese.strings @@ -63,7 +63,7 @@ // Approval Detail, Search Result "Number" = "No. %d"; "Form" = "%@"; -"Draft" = "下書き"; +//"Draft" = "下書き"; "Approving" = "承認中"; "Hold" = "保留"; "Reject" = "却下"; @@ -164,3 +164,14 @@ "CertificateImportSuccess" = "クライアント証明書をインポートしました。"; "IncorrectPassphrase" = "パスフレーズが違います。"; "CertificateImportError" = "証明書のインポート中にエラーが発生しました。"; + +// WidgetExtension +"Draft" = "下書き"; +"RequestApplication" = "申請依頼"; +"RequestApproval" = "承認依頼"; +"Remand" = "差戻し"; +"CheckReport" = "報告確認"; +"Demand" = "催促あり"; +"Share" = "共有した"; +"Shared" = "共有された"; +"Circulation" = "回付予定"; diff --git a/AgileWorks/AgileWorks/Strings/en.lproj/Localizable.strings b/AgileWorks/AgileWorks/Strings/en.lproj/Localizable.strings index 0fb1fd3bf9a1b5dd9ac89a2f9b42d032712a7229..4ccfae582b47e627fd0553e2f779a60b87871b8e 100644 --- a/AgileWorks/AgileWorks/Strings/en.lproj/Localizable.strings +++ b/AgileWorks/AgileWorks/Strings/en.lproj/Localizable.strings @@ -63,7 +63,7 @@ // Approval Detail, Search Result "Number" = "No. %d"; "Form" = "%@"; -"Draft" = "下書き"; +//"Draft" = "下書き"; "Approving" = "承認中"; "Hold" = "保留"; "Reject" = "却下"; @@ -164,3 +164,14 @@ "CertificateImportSuccess" = "クライアント証明書をインポートしました。"; "IncorrectPassphrase" = "パスフレーズが違います。"; "CertificateImportError" = "証明書のインポート中にエラーが発生しました。"; + +// WidgetExtension +"Draft" = "下書き"; +"RequestApplication" = "申請依頼"; +"RequestApproval" = "承認依頼"; +"Remand" = "差戻し"; +"CheckReport" = "報告確認"; +"Demand" = "催促あり"; +"Share" = "共有した"; +"Shared" = "共有された"; +"Circulation" = "回付予定"; diff --git a/AgileWorks/AgileWorks/Strings/ja.lproj/Localizable.strings b/AgileWorks/AgileWorks/Strings/ja.lproj/Localizable.strings index aaea5220bdd3cb457af23e665b25e6ee136cfed8..2ebe4b2a4f8de8a725c0c9c94376f7ff7b605031 100644 --- a/AgileWorks/AgileWorks/Strings/ja.lproj/Localizable.strings +++ b/AgileWorks/AgileWorks/Strings/ja.lproj/Localizable.strings @@ -63,7 +63,7 @@ // Approval Detail, Search Result "Number" = "No. %d"; "Form" = "%@"; -"Draft" = "下書き"; +//"Draft" = "下書き"; "Approving" = "承認中"; "Hold" = "保留"; "Reject" = "却下"; @@ -164,3 +164,14 @@ "CertificateImportSuccess" = "クライアント証明書をインポートしました。"; "IncorrectPassphrase" = "パスフレーズが違います。"; "CertificateImportError" = "証明書のインポート中にエラーが発生しました。"; + +// WidgetExtension +"Draft" = "下書き"; +"RequestApplication" = "申請依頼"; +"RequestApproval" = "承認依頼"; +"Remand" = "差戻し"; +"CheckReport" = "報告確認"; +"Demand" = "催促あり"; +"Share" = "共有した"; +"Shared" = "共有された"; +"Circulation" = "回付予定"; diff --git a/AgileWorks/AgileWorks/Strings/zh-Hans.lproj/Localizable.strings b/AgileWorks/AgileWorks/Strings/zh-Hans.lproj/Localizable.strings index 85862b004dc03466be9edc146d5151429a540532..4223252fe06edd1701ec712672f87af6fb6e2855 100644 --- a/AgileWorks/AgileWorks/Strings/zh-Hans.lproj/Localizable.strings +++ b/AgileWorks/AgileWorks/Strings/zh-Hans.lproj/Localizable.strings @@ -63,7 +63,7 @@ // Approval Detail, Search Result "Number" = "No. %d"; "Form" = "%@"; -"Draft" = "下書き"; +//"Draft" = "下書き"; "Approving" = "承認中"; "Hold" = "保留"; "Reject" = "却下"; @@ -164,3 +164,14 @@ "CertificateImportSuccess" = "クライアント証明書をインポートしました。"; "IncorrectPassphrase" = "パスフレーズが違います。"; "CertificateImportError" = "証明書のインポート中にエラーが発生しました。"; + +// WidgetExtension +"Draft" = "下書き"; +"RequestApplication" = "申請依頼"; +"RequestApproval" = "承認依頼"; +"Remand" = "差戻し"; +"CheckReport" = "報告確認"; +"Demand" = "催促あり"; +"Share" = "共有した"; +"Shared" = "共有された"; +"Circulation" = "回付予定"; diff --git a/AgileWorks/AgileWorks/Strings/zh-Hant.lproj/Localizable.strings b/AgileWorks/AgileWorks/Strings/zh-Hant.lproj/Localizable.strings index 4613b550a162950985aae413192bc4650521e85e..48d8d959b3a140e097b002b4702d97c4f952c653 100644 --- a/AgileWorks/AgileWorks/Strings/zh-Hant.lproj/Localizable.strings +++ b/AgileWorks/AgileWorks/Strings/zh-Hant.lproj/Localizable.strings @@ -63,7 +63,7 @@ // Approval Detail, Search Result "Number" = "No. %d"; "Form" = "%@"; -"Draft" = "下書き"; +//"Draft" = "下書き"; "Approving" = "承認中"; "Hold" = "保留"; "Reject" = "却下"; @@ -165,3 +165,13 @@ "IncorrectPassphrase" = "パスフレーズが違います。"; "CertificateImportError" = "証明書のインポート中にエラーが発生しました。"; +// WidgetExtension +"Draft" = "下書き"; +"RequestApplication" = "申請依頼"; +"RequestApproval" = "承認依頼"; +"Remand" = "差戻し"; +"CheckReport" = "報告確認"; +"Demand" = "催促あり"; +"Share" = "共有した"; +"Shared" = "共有された"; +"Circulation" = "回付予定"; diff --git a/AgileWorks/Common/Entity/ApprovalResponse.swift b/AgileWorks/Common/Entity/ApprovalResponse.swift index b9a0316b95a7fb076bd69b71f7c967646e41e377..ccb0ee5a662f6019c6c2f7d30314617c739a78e2 100644 --- a/AgileWorks/Common/Entity/ApprovalResponse.swift +++ b/AgileWorks/Common/Entity/ApprovalResponse.swift @@ -9,16 +9,13 @@ import Foundation struct ApprovalResponse: Codable { - let itemCount: Int let items: [ApprovalItem] } struct ApprovalItem: Codable { - let id: Int + let code: String let name: String - let docCount: Int - let itemCount: Int - let items: [ApprovalSubItem] + let count: Int } struct ApprovalSubItem: Codable { diff --git a/AgileWorks/Common/OAuthService.swift b/AgileWorks/Common/OAuthService.swift index 0f90106500efa1198df6191280d670471ca82c8d..6141dc13517e9211cb2cfaab114964e53293f079 100644 --- a/AgileWorks/Common/OAuthService.swift +++ b/AgileWorks/Common/OAuthService.swift @@ -8,6 +8,7 @@ import AppAuth import Foundation +import WidgetKit public enum OAuthError: Error { case noOAuthStateError @@ -51,6 +52,10 @@ public class OAuthService: NSObject { } KeychainDataStore().writeAccessToken(accessToken: accessToken) + //ウィジェットの更新 + if #available(iOS 14.0, *) { + WidgetCenter.shared.reloadAllTimelines() + } completion(.success(())) } else { self.setAuthState(nil) diff --git a/AgileWorks/Common/WebClient/GetApprovalsEndpoint.swift b/AgileWorks/Common/WebClient/GetApprovalsEndpoint.swift index 6ba8c92d9604e9837d3cbfbaca9f5dd0053b5d37..23d3a115f21a5d9d990207b5d3223d5d7cf24b6c 100644 --- a/AgileWorks/Common/WebClient/GetApprovalsEndpoint.swift +++ b/AgileWorks/Common/WebClient/GetApprovalsEndpoint.swift @@ -19,7 +19,7 @@ struct GetApprovalsEndpoint: APIEndpoint { typealias Response = ApprovalResponse let method: HttpMethod = .GET - let path = "/xpoint/x/v1/approvals" + let path = "/" + (KeychainDataStore().readContextPath() ?? "") + "/Broker/MobileAppApi/Approvals" var headerFields: [String: String]? { return ["Authorization": "Bearer \(KeychainDataStore().readAccessToken() ?? "")", diff --git a/AgileWorks/Common/WebClient/Session.swift b/AgileWorks/Common/WebClient/Session.swift index da0f712ec3c119f40eb09df4fef1398c50e62e7f..506e5fa54f787ef2fc3859979cbe531470730fd4 100644 --- a/AgileWorks/Common/WebClient/Session.swift +++ b/AgileWorks/Common/WebClient/Session.swift @@ -34,7 +34,7 @@ class Session { class func send(_ request: T, completion: @escaping (Result) -> Void) -> URLSessionTask? { let req = request.request log.debug("Session Request: \(String(describing: req.url))\nHTTPMethod: \(String(describing: req.httpMethod) )\nHeaders: \(String(describing: req.allHTTPHeaderFields))\nHTTPBody: \(String(data: req.httpBody ?? Data(), encoding: .utf8)!)") - + let task = shared.dataTask(with: req) { data, response, error in let result: Result let res = response as? HTTPURLResponse diff --git a/AgileWorks/Configurations/Debug-Production-Widget.xcconfig b/AgileWorks/Configurations/Debug-Production-Widget.xcconfig new file mode 100644 index 0000000000000000000000000000000000000000..bf2e856ad207b54e7e2b4e71d8ff961b5e424360 --- /dev/null +++ b/AgileWorks/Configurations/Debug-Production-Widget.xcconfig @@ -0,0 +1,13 @@ +// +// Debug-Production-Widget.xcconfig +// AgileWorks +// +// Created by Azuma Kasumi on 2022/03/22. +// Copyright © 2022 ATLED CORP. All rights reserved. +// + +// Configuration settings file format documentation can be found at: +// https://help.apple.com/xcode/#/dev745c5c974 +#include "../Pods/Target Support Files/Pods-All-AgileWorks/Pods-All-AgileWorks.debug-production.xcconfig" +#include "Build/Debug.xcconfig" +#include "Flavor/Production-Widget.xcconfig" diff --git a/AgileWorks/Configurations/Flavor/Production-Widget.xcconfig b/AgileWorks/Configurations/Flavor/Production-Widget.xcconfig new file mode 100644 index 0000000000000000000000000000000000000000..7598431940b133752b86d51e49fffa90e78e103f --- /dev/null +++ b/AgileWorks/Configurations/Flavor/Production-Widget.xcconfig @@ -0,0 +1,17 @@ +// +// Production-Widget.xcconfig +// AgileWorks +// +// Created by Azuma Kasumi on 2022/03/22. +// Copyright © 2022 ATLED CORP. All rights reserved. +// + +// Configuration settings file format documentation can be found at: +// https://help.apple.com/xcode/#/dev745c5c974 +#include "Base-Production.xcconfig" + +DISPLAY_NAME = AgileWorks + +PRODUCT_BUNDLE_IDENTIFIER = $(AGILE_WORKS_SHARE_BUNDLE_IDENTIFIER).WidgetExtension + +CODE_SIGN_ENTITLEMENTS = WidgetExtension/WidgetExtension.entitlements diff --git a/AgileWorks/Configurations/Release-Production-Widget.xcconfig b/AgileWorks/Configurations/Release-Production-Widget.xcconfig new file mode 100644 index 0000000000000000000000000000000000000000..c14b53bf5030d92cf33da6d2005493cd4b50294b --- /dev/null +++ b/AgileWorks/Configurations/Release-Production-Widget.xcconfig @@ -0,0 +1,13 @@ +// +// Release-Production-Widget.xcconfig +// AgileWorks +// +// Created by Azuma Kasumi on 2022/03/22. +// Copyright © 2022 ATLED CORP. All rights reserved. +// + +// Configuration settings file format documentation can be found at: +// https://help.apple.com/xcode/#/dev745c5c974 +#include "../Pods/Target Support Files/Pods-All-AgileWorks/Pods-All-AgileWorks.release-production.xcconfig" +#include "Build/Release.xcconfig" +#include "Flavor/Production-Widget.xcconfig" diff --git a/AgileWorks/TodayExtension/View/TodayViewController.swift b/AgileWorks/TodayExtension/View/TodayViewController.swift index bb0451d0b4bebbc0970ae280733a71f85f599cc5..45f791406ff98adfb0184436b0b77401c58465bf 100644 --- a/AgileWorks/TodayExtension/View/TodayViewController.swift +++ b/AgileWorks/TodayExtension/View/TodayViewController.swift @@ -93,7 +93,7 @@ extension TodayViewController: UITableViewDataSource { func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = tableView.dequeueReusableCell(withIdentifier: "todayCell", for: indexPath) - cell.textLabel?.text = approvalItems[indexPath.row].name + " (" + String(approvalItems[indexPath.row].docCount.toFormattedString()) + ")" + cell.textLabel?.text = approvalItems[indexPath.row].name + " (" + String(approvalItems[indexPath.row].count.toFormattedString()) + ")" return cell } } @@ -120,7 +120,7 @@ extension TodayViewController { Session.send(approvalsEndpoint) { result in switch result { case .success(let response): - if response.itemCount > 0 { + if !response.items.isEmpty { completion(.success(response)) } else { completion(.nodate(localizadString(key: "NoData", comment: ""))) diff --git a/AgileWorks/WidgetExtension/Assets.xcassets/AccentColor.colorset/Contents.json b/AgileWorks/WidgetExtension/Assets.xcassets/AccentColor.colorset/Contents.json new file mode 100644 index 0000000000000000000000000000000000000000..eb8789700816459c1e1480e0b34781d9fb78a1ca --- /dev/null +++ b/AgileWorks/WidgetExtension/Assets.xcassets/AccentColor.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/AgileWorks/WidgetExtension/Assets.xcassets/AppIcon.appiconset/Contents.json b/AgileWorks/WidgetExtension/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 0000000000000000000000000000000000000000..9221b9bb1a35f5de270a41afa01305478221ae32 --- /dev/null +++ b/AgileWorks/WidgetExtension/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,98 @@ +{ + "images" : [ + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "20x20" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "29x29" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "40x40" + }, + { + "idiom" : "iphone", + "scale" : "2x", + "size" : "60x60" + }, + { + "idiom" : "iphone", + "scale" : "3x", + "size" : "60x60" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "20x20" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "29x29" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "40x40" + }, + { + "idiom" : "ipad", + "scale" : "1x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "76x76" + }, + { + "idiom" : "ipad", + "scale" : "2x", + "size" : "83.5x83.5" + }, + { + "idiom" : "ios-marketing", + "scale" : "1x", + "size" : "1024x1024" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/AgileWorks/WidgetExtension/Assets.xcassets/Contents.json b/AgileWorks/WidgetExtension/Assets.xcassets/Contents.json new file mode 100644 index 0000000000000000000000000000000000000000..73c00596a7fca3f3d4bdd64053b69d86745f9e10 --- /dev/null +++ b/AgileWorks/WidgetExtension/Assets.xcassets/Contents.json @@ -0,0 +1,6 @@ +{ + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/AgileWorks/WidgetExtension/Assets.xcassets/WidgetBackground.colorset/Contents.json b/AgileWorks/WidgetExtension/Assets.xcassets/WidgetBackground.colorset/Contents.json new file mode 100644 index 0000000000000000000000000000000000000000..eb8789700816459c1e1480e0b34781d9fb78a1ca --- /dev/null +++ b/AgileWorks/WidgetExtension/Assets.xcassets/WidgetBackground.colorset/Contents.json @@ -0,0 +1,11 @@ +{ + "colors" : [ + { + "idiom" : "universal" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/AgileWorks/WidgetExtension/Info.plist b/AgileWorks/WidgetExtension/Info.plist new file mode 100644 index 0000000000000000000000000000000000000000..f8f812c399f888a9529b85d0ffb3abb2479f80f3 --- /dev/null +++ b/AgileWorks/WidgetExtension/Info.plist @@ -0,0 +1,20 @@ + + + + + NSExtension + + NSExtensionPointIdentifier + com.apple.widgetkit-extension + + AppIdentifierPrefix + $(AppIdentifierPrefix) + AppConfig + + OAUTH_CLIENTID + $(OAUTH_CLIENTID) + AGILE_WORKS_SHARE_BUNDLE_IDENTIFIER + $(AGILE_WORKS_SHARE_BUNDLE_IDENTIFIER) + + + diff --git a/AgileWorks/WidgetExtension/WidgetExtension.entitlements b/AgileWorks/WidgetExtension/WidgetExtension.entitlements new file mode 100644 index 0000000000000000000000000000000000000000..71e202e86c51a580927e119b7fcbf713d2418ec3 --- /dev/null +++ b/AgileWorks/WidgetExtension/WidgetExtension.entitlements @@ -0,0 +1,10 @@ + + + + + keychain-access-groups + + $(AppIdentifierPrefix)jp.atled.agileworks + + + diff --git a/AgileWorks/WidgetExtension/WidgetExtension.swift b/AgileWorks/WidgetExtension/WidgetExtension.swift new file mode 100644 index 0000000000000000000000000000000000000000..890bc42b1701c71aacdab7a0e3ef7736a369e7c9 --- /dev/null +++ b/AgileWorks/WidgetExtension/WidgetExtension.swift @@ -0,0 +1,238 @@ +// +// WidgetExtension.swift +// WidgetExtension +// +// Created by Azuma Kasumi on 2022/03/14. +// Copyright © 2022 ATLED CORP. All rights reserved. +// + +import WidgetKit +import SwiftUI + + +//ウィジェット選択のプレビュー画面などで表示させる項目 +private func previewItems() -> [ApprovalItem]{ + var items = [ApprovalItem]() + items.append(ApprovalItem(code: "DRAFT", name: localizadString(key: "Draft", comment: ""), count: 1)) + items.append(ApprovalItem(code: "REQUEST_APPLICATION", name: localizadString(key: "RequestApplication", comment: ""), count: 10)) + items.append(ApprovalItem(code: "REQUEST_APPROVAL", name: localizadString(key: "RequestApproval", comment: ""), count: 35)) + items.append(ApprovalItem(code: "REMAND", name: localizadString(key: "Remand", comment: ""), count: 6)) + items.append(ApprovalItem(code: "CHECK_REPORT", name: localizadString(key: "CheckReport", comment: ""), count: 10)) + items.append(ApprovalItem(code: "DEMAND", name: localizadString(key: "Demand", comment: ""), count: 0)) + items.append(ApprovalItem(code: "SHARE", name: localizadString(key: "Share", comment: ""), count: 0)) + items.append(ApprovalItem(code: "SHARED", name: localizadString(key: "Shared", comment: ""), count: 0)) + items.append(ApprovalItem(code: "CIRCULATION", name: localizadString(key: "Circulation", comment: ""), count: 0)) + + return items +} + +struct Provider: TimelineProvider { + func placeholder(in context: Context) -> SimpleEntry { + SimpleEntry(date: Date(), approvalItems:previewItems(), message: nil) + } + + func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> ()) { + let entry = SimpleEntry(date: Date(), approvalItems: previewItems(), message: nil) + completion(entry) + } + + func getTimeline(in context: Context, completion: @escaping (Timeline) -> ()) { + var entries: [SimpleEntry] = [] + + // Generate a timeline consisting of five entries an hour apart, starting from the current date. + let entryDate = Calendar.current.date(byAdding: .minute, value: 15, to: Date()) ?? Date() + + fetch { result in + DispatchQueue.main.async { + switch result { + case .success(let response): + entries.append(SimpleEntry(date: entryDate, approvalItems: response.items, message: nil)) + case .nodate(let message): + entries.append(SimpleEntry(date: entryDate, approvalItems: [ApprovalItem](), message: message)) + case .failure(let message): + entries.append(SimpleEntry(date: entryDate, approvalItems: previewItems(), message: message)) + } + let timeline = Timeline(entries: entries, policy: .after(entryDate)) + completion(timeline) + } + } + } +} + +struct SimpleEntry: TimelineEntry { + let date: Date + var approvalItems: [ApprovalItem] + var message: String? +} + +struct ApprovalsWidgetView : View { + var entry: Provider.Entry + var body: some View { + //API取得成功 + if entry.message == nil { + ApplovalsBoxView(entry: entry) + }else { + //APIサーバーエラー + if entry.message == "-" { + ApplovalsBoxView(entry: entry) + }else { //ログイン・コネクションエラー + FailureWidgetView(entry: entry) + } + } + } +} + +//書類状況を表示するための各BOXビュー +struct ApplovalsBoxView : View { + var entry: Provider.Entry + + //書類状態の種類をカウント + func rowCnt() -> Int { + var row = entry.approvalItems.count / 2 + if (entry.approvalItems.count % 2 != 0) { + row += 1 + } + return row + } + + //BOXの右側を表示させるかの条件 + func evenCheck(row: Int) -> Bool { + row < rowCnt()-1 || entry.approvalItems.count % 2 == 0 + } + + var body: some View { + GeometryReader { geometry in + VStack (spacing: 5){ + ForEach(0.. { + case success(T) + case nodate(String) + case failure(String) +} + +func fetch(completion: @escaping (widgetAPIResult) -> Void) { + guard KeychainDataStore().readAccessToken() != nil else { + completion(.failure(localizadString(key: "NotLogedin", comment: ""))) + return + } + + let approvalsEndpoint = GetApprovalsEndpoint() + + Session.send(approvalsEndpoint) { result in + switch result { + case .success(let response): + if !response.items.isEmpty { + completion(.success(response)) + } else { + completion(.nodate(localizadString(key: "NoData", comment: ""))) + } + case .failure(let error): + var errorMessage = "-" + switch error { + case .connectionError(let error): + if let message = errorMessageNSError(error: error) { + errorMessage = message + } + default: + break + } + completion(.failure(errorMessage)) + } + } +} + +func errorMessageNSError(error: Error) -> String? { + switch URLError.Code(rawValue: (error as NSError).code) { + case .notConnectedToInternet: // -1009 + return localizadString(key: "NotConnectNetworkError", comment: "") + case .timedOut: // -1001 + return localizadString(key: "TimedOutNetworkError", comment: "") + default: + return nil + } +}