From ffe1870bb846fcc069f0a1b3fe8e75e9f98d6e9b Mon Sep 17 00:00:00 2001 From: Guido Date: Wed, 21 Oct 2026 05:45:42 +0200 Subject: [PATCH] build: Die iOS-App laesst sich mit einem Befehl bauen, starten und testen Bisher musste das Xcode-Projekt von Hand angelegt werden, und der Swift-Code wurde blind geschrieben, ohne ihn je zu uebersetzen. ios/project.yml beschreibt das Projekt jetzt in 50 Zeilen; xcodegen generate macht daraus Certain.xcodeproj. Das erzeugte Projekt liegt mit im Repository, damit man es ohne xcodegen einfach oeffnen kann - geaendert wird aber die project.yml. Festgelegt nach dem Muster von Vorrania: Buendelkennung com.scarriffle.certain, Team PP34X97WS3, iPhone und iPad, Entwicklungssprache Deutsch, iOS 26 als Mindestversion. Sprachfassung Swift 5, weil der Code nicht auf die strikte Nebenlaeufigkeitspruefung von Swift 6 hin geschrieben ist. Stufe 1 uebersetzt damit fehlerfrei, die 28 Tests laufen durch, und die App startet im Simulator bei der Serverabfrage. Co-Authored-By: Claude Opus 5 --- ios/Certain.xcodeproj/project.pbxproj | 570 ++++++++++++++++++ .../contents.xcworkspacedata | 7 + .../xcshareddata/xcschemes/Certain.xcscheme | 104 ++++ ios/project.yml | 73 +++ 4 files changed, 754 insertions(+) create mode 100644 ios/Certain.xcodeproj/project.pbxproj create mode 100644 ios/Certain.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 ios/Certain.xcodeproj/xcshareddata/xcschemes/Certain.xcscheme create mode 100644 ios/project.yml diff --git a/ios/Certain.xcodeproj/project.pbxproj b/ios/Certain.xcodeproj/project.pbxproj new file mode 100644 index 0000000..b168eab --- /dev/null +++ b/ios/Certain.xcodeproj/project.pbxproj @@ -0,0 +1,570 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 77; + objects = { + +/* Begin PBXBuildFile section */ + 0E66BEE1DEE6E4A5D88A6696 /* Konto.swift in Sources */ = {isa = PBXBuildFile; fileRef = 4119B85EFF3FB38E84FAA913 /* Konto.swift */; }; + 18B6A9629AA749B790F21DC9 /* CertainApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8A1BD38230CAE03DFA02A3F0 /* CertainApp.swift */; }; + 1E0AE92B8994298A0468E4EC /* ZweiFaktorAnsicht.swift in Sources */ = {isa = PBXBuildFile; fileRef = A39A3E42F80E88125AB372BD /* ZweiFaktorAnsicht.swift */; }; + 25EC32ED2FF88F4286B752A7 /* Zustandsansichten.swift in Sources */ = {isa = PBXBuildFile; fileRef = 776F26865B849D2318B6819B /* Zustandsansichten.swift */; }; + 3E574E1D2C0CDB24C652190C /* ServerAnsicht.swift in Sources */ = {isa = PBXBuildFile; fileRef = A987A2CB878E52BAF6A9808D /* ServerAnsicht.swift */; }; + 3F49B22ED7C840858749B143 /* KontenListe.swift in Sources */ = {isa = PBXBuildFile; fileRef = 78AD0B83BDFDF777917C9382 /* KontenListe.swift */; }; + 402F07ED1E39AB8C3BC6F62B /* AppZustand.swift in Sources */ = {isa = PBXBuildFile; fileRef = D9FE5CE135C1B9607C47BCE9 /* AppZustand.swift */; }; + 431D27A182E4DEBD84F0DA05 /* Geldbetrag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 287D314176EBA5E888605F5F /* Geldbetrag.swift */; }; + 4C9AC9D9DCA7A94F831AB207 /* Zwischenspeicher.swift in Sources */ = {isa = PBXBuildFile; fileRef = C24DAC366AE34403646DBE67 /* Zwischenspeicher.swift */; }; + 66EE367CB37CDA59EEF0F023 /* EinstellungenAnsicht.swift in Sources */ = {isa = PBXBuildFile; fileRef = 09B6D688EF69B6EC58A8B4BE /* EinstellungenAnsicht.swift */; }; + 7A5BD17CBEB8E7E61BEC6396 /* GrundlagenTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 23B6CF6893EB57064D36F609 /* GrundlagenTests.swift */; }; + 7AFCD4ADF85329F373C89E06 /* Zeitangaben.swift in Sources */ = {isa = PBXBuildFile; fileRef = 75EA409F3F0CEF3DF04C32E7 /* Zeitangaben.swift */; }; + 8EAA9F11CF1FDFE702557B55 /* Grundmodelle.swift in Sources */ = {isa = PBXBuildFile; fileRef = F8BE152C9F91584900796ADA /* Grundmodelle.swift */; }; + 918BA7A7CC3972ED4D8A93B1 /* Darstellung.swift in Sources */ = {isa = PBXBuildFile; fileRef = 451BA41D9B53FB6B511AF734 /* Darstellung.swift */; }; + B2470AAE64D657CF7CDEA099 /* PasswortWechselAnsicht.swift in Sources */ = {isa = PBXBuildFile; fileRef = 52A55D83C342BDB64428D8F9 /* PasswortWechselAnsicht.swift */; }; + B90D679A31C1627CC7B788DA /* RootAnsicht.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1AB439591BFEABB503F2E071 /* RootAnsicht.swift */; }; + BEC6BF023D4A649003F38A2D /* Endpunkte.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5D6CEAB46FB8955115A3064B /* Endpunkte.swift */; }; + C518581A7F62632420821479 /* APIFehler.swift in Sources */ = {isa = PBXBuildFile; fileRef = C5C59F93E8CD995DFDCABF90 /* APIFehler.swift */; }; + D5AFF6E8CE7AB6674BDCEEE1 /* Lader.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBDF1014AC23C916BE571DDC /* Lader.swift */; }; + E49213EDDBF2C0C7995AF558 /* AnmeldeAnsicht.swift in Sources */ = {isa = PBXBuildFile; fileRef = DDF0ED12E1BBB42E39295725 /* AnmeldeAnsicht.swift */; }; + E5F283F445FA9E26CFC15FA5 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = BDF076C7F062202810699EE9 /* Localizable.strings */; }; + EE4F2382CFF3F60FF5AC8241 /* CertainClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = 77E5A58246E6A9D72E99C2F2 /* CertainClient.swift */; }; + F414F982412C79242CADB473 /* Ablage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 13C14F1D9CEF39FF3E095239 /* Ablage.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 2D43432195E8A8F77E79DF49 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E5DF7640265CD3906602698E /* Project object */; + proxyType = 1; + remoteGlobalIDString = 273DB28E6F6B8944B4879A06; + remoteInfo = Certain; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 09B6D688EF69B6EC58A8B4BE /* EinstellungenAnsicht.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EinstellungenAnsicht.swift; sourceTree = ""; }; + 13C14F1D9CEF39FF3E095239 /* Ablage.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Ablage.swift; sourceTree = ""; }; + 1AB439591BFEABB503F2E071 /* RootAnsicht.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootAnsicht.swift; sourceTree = ""; }; + 1E6FE0925FC71A03818FFF72 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; + 23B6CF6893EB57064D36F609 /* GrundlagenTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GrundlagenTests.swift; sourceTree = ""; }; + 287D314176EBA5E888605F5F /* Geldbetrag.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Geldbetrag.swift; sourceTree = ""; }; + 4119B85EFF3FB38E84FAA913 /* Konto.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Konto.swift; sourceTree = ""; }; + 416FD5B020E78140037306C8 /* Certain.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = Certain.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 451BA41D9B53FB6B511AF734 /* Darstellung.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Darstellung.swift; sourceTree = ""; }; + 52A55D83C342BDB64428D8F9 /* PasswortWechselAnsicht.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PasswortWechselAnsicht.swift; sourceTree = ""; }; + 5D3341CDA026CDF55D621A8A /* CertainTests.xctest */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.cfbundle; path = CertainTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 5D6CEAB46FB8955115A3064B /* Endpunkte.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Endpunkte.swift; sourceTree = ""; }; + 75EA409F3F0CEF3DF04C32E7 /* Zeitangaben.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Zeitangaben.swift; sourceTree = ""; }; + 776F26865B849D2318B6819B /* Zustandsansichten.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Zustandsansichten.swift; sourceTree = ""; }; + 77E5A58246E6A9D72E99C2F2 /* CertainClient.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CertainClient.swift; sourceTree = ""; }; + 78AD0B83BDFDF777917C9382 /* KontenListe.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KontenListe.swift; sourceTree = ""; }; + 8A1BD38230CAE03DFA02A3F0 /* CertainApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CertainApp.swift; sourceTree = ""; }; + A39A3E42F80E88125AB372BD /* ZweiFaktorAnsicht.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ZweiFaktorAnsicht.swift; sourceTree = ""; }; + A987A2CB878E52BAF6A9808D /* ServerAnsicht.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerAnsicht.swift; sourceTree = ""; }; + C24DAC366AE34403646DBE67 /* Zwischenspeicher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Zwischenspeicher.swift; sourceTree = ""; }; + C5C59F93E8CD995DFDCABF90 /* APIFehler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = APIFehler.swift; sourceTree = ""; }; + C5F948B06FF2E65118C82636 /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; + D9FE5CE135C1B9607C47BCE9 /* AppZustand.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppZustand.swift; sourceTree = ""; }; + DBDF1014AC23C916BE571DDC /* Lader.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Lader.swift; sourceTree = ""; }; + DDF0ED12E1BBB42E39295725 /* AnmeldeAnsicht.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AnmeldeAnsicht.swift; sourceTree = ""; }; + F8BE152C9F91584900796ADA /* Grundmodelle.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Grundmodelle.swift; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXGroup section */ + 0EDDD922C06B1465AD13C782 /* Texte */ = { + isa = PBXGroup; + children = ( + BDF076C7F062202810699EE9 /* Localizable.strings */, + ); + path = Texte; + sourceTree = ""; + }; + 298E43BBA9248E5A9779DA98 /* Konten */ = { + isa = PBXGroup; + children = ( + 78AD0B83BDFDF777917C9382 /* KontenListe.swift */, + ); + path = Konten; + sourceTree = ""; + }; + 524FD85EDE7C4DE5ABE9A8E5 /* Tests */ = { + isa = PBXGroup; + children = ( + 23B6CF6893EB57064D36F609 /* GrundlagenTests.swift */, + ); + path = Tests; + sourceTree = ""; + }; + 56CB7B1C18136BFD83ACADBD /* Einstellungen */ = { + isa = PBXGroup; + children = ( + 09B6D688EF69B6EC58A8B4BE /* EinstellungenAnsicht.swift */, + ); + path = Einstellungen; + sourceTree = ""; + }; + 5E720D91F0CF9DBDA975A959 /* Bausteine */ = { + isa = PBXGroup; + children = ( + 451BA41D9B53FB6B511AF734 /* Darstellung.swift */, + 287D314176EBA5E888605F5F /* Geldbetrag.swift */, + 776F26865B849D2318B6819B /* Zustandsansichten.swift */, + ); + path = Bausteine; + sourceTree = ""; + }; + 80EFC9A43394C64E9AEEF5A1 /* Modelle */ = { + isa = PBXGroup; + children = ( + F8BE152C9F91584900796ADA /* Grundmodelle.swift */, + 4119B85EFF3FB38E84FAA913 /* Konto.swift */, + 75EA409F3F0CEF3DF04C32E7 /* Zeitangaben.swift */, + ); + path = Modelle; + sourceTree = ""; + }; + B4505C6E527A0020B80AFF04 /* Anmeldung */ = { + isa = PBXGroup; + children = ( + DDF0ED12E1BBB42E39295725 /* AnmeldeAnsicht.swift */, + 52A55D83C342BDB64428D8F9 /* PasswortWechselAnsicht.swift */, + A987A2CB878E52BAF6A9808D /* ServerAnsicht.swift */, + A39A3E42F80E88125AB372BD /* ZweiFaktorAnsicht.swift */, + ); + path = Anmeldung; + sourceTree = ""; + }; + BC82A6A323BDD2AD8325BEA2 = { + isa = PBXGroup; + children = ( + B4505C6E527A0020B80AFF04 /* Anmeldung */, + BEE6BC97D865C2F0C4EB80C4 /* App */, + 5E720D91F0CF9DBDA975A959 /* Bausteine */, + 56CB7B1C18136BFD83ACADBD /* Einstellungen */, + 298E43BBA9248E5A9779DA98 /* Konten */, + 80EFC9A43394C64E9AEEF5A1 /* Modelle */, + DB51F54CC077E85C286AD9DC /* Netzwerk */, + 524FD85EDE7C4DE5ABE9A8E5 /* Tests */, + 0EDDD922C06B1465AD13C782 /* Texte */, + C36A0DD814B82B9DA47A4D58 /* Products */, + ); + sourceTree = ""; + }; + BEE6BC97D865C2F0C4EB80C4 /* App */ = { + isa = PBXGroup; + children = ( + D9FE5CE135C1B9607C47BCE9 /* AppZustand.swift */, + 8A1BD38230CAE03DFA02A3F0 /* CertainApp.swift */, + 1AB439591BFEABB503F2E071 /* RootAnsicht.swift */, + ); + path = App; + sourceTree = ""; + }; + C36A0DD814B82B9DA47A4D58 /* Products */ = { + isa = PBXGroup; + children = ( + 416FD5B020E78140037306C8 /* Certain.app */, + 5D3341CDA026CDF55D621A8A /* CertainTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + DB51F54CC077E85C286AD9DC /* Netzwerk */ = { + isa = PBXGroup; + children = ( + 13C14F1D9CEF39FF3E095239 /* Ablage.swift */, + C5C59F93E8CD995DFDCABF90 /* APIFehler.swift */, + 77E5A58246E6A9D72E99C2F2 /* CertainClient.swift */, + 5D6CEAB46FB8955115A3064B /* Endpunkte.swift */, + DBDF1014AC23C916BE571DDC /* Lader.swift */, + C24DAC366AE34403646DBE67 /* Zwischenspeicher.swift */, + ); + path = Netzwerk; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 273DB28E6F6B8944B4879A06 /* Certain */ = { + isa = PBXNativeTarget; + buildConfigurationList = 5FB7AD5694029CE8047B30A6 /* Build configuration list for PBXNativeTarget "Certain" */; + buildPhases = ( + AD804F932D01445AA1EBDDF6 /* Sources */, + 0C89482C2F6A53CC6DF65D35 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Certain; + packageProductDependencies = ( + ); + productName = Certain; + productReference = 416FD5B020E78140037306C8 /* Certain.app */; + productType = "com.apple.product-type.application"; + }; + 30BF803561347EA12325BCAA /* CertainTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = B7C4A363393DD132E27BF360 /* Build configuration list for PBXNativeTarget "CertainTests" */; + buildPhases = ( + 104B97AFE88042A9CF83B9C7 /* Sources */, + ); + buildRules = ( + ); + dependencies = ( + 183CFCE6D6F6769B7A0CFE43 /* PBXTargetDependency */, + ); + name = CertainTests; + packageProductDependencies = ( + ); + productName = CertainTests; + productReference = 5D3341CDA026CDF55D621A8A /* CertainTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + E5DF7640265CD3906602698E /* Project object */ = { + isa = PBXProject; + attributes = { + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1430; + TargetAttributes = { + 273DB28E6F6B8944B4879A06 = { + DevelopmentTeam = PP34X97WS3; + ProvisioningStyle = Automatic; + }; + }; + }; + buildConfigurationList = FE4C13F0F9703E456BEE9496 /* Build configuration list for PBXProject "Certain" */; + developmentRegion = de; + hasScannedForEncodings = 0; + knownRegions = ( + Base, + de, + en, + ); + mainGroup = BC82A6A323BDD2AD8325BEA2; + minimizedProjectReferenceProxies = 1; + preferredProjectObjectVersion = 77; + productRefGroup = C36A0DD814B82B9DA47A4D58 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 273DB28E6F6B8944B4879A06 /* Certain */, + 30BF803561347EA12325BCAA /* CertainTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 0C89482C2F6A53CC6DF65D35 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E5F283F445FA9E26CFC15FA5 /* Localizable.strings in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 104B97AFE88042A9CF83B9C7 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 7A5BD17CBEB8E7E61BEC6396 /* GrundlagenTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + AD804F932D01445AA1EBDDF6 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + C518581A7F62632420821479 /* APIFehler.swift in Sources */, + F414F982412C79242CADB473 /* Ablage.swift in Sources */, + E49213EDDBF2C0C7995AF558 /* AnmeldeAnsicht.swift in Sources */, + 402F07ED1E39AB8C3BC6F62B /* AppZustand.swift in Sources */, + 18B6A9629AA749B790F21DC9 /* CertainApp.swift in Sources */, + EE4F2382CFF3F60FF5AC8241 /* CertainClient.swift in Sources */, + 918BA7A7CC3972ED4D8A93B1 /* Darstellung.swift in Sources */, + 66EE367CB37CDA59EEF0F023 /* EinstellungenAnsicht.swift in Sources */, + BEC6BF023D4A649003F38A2D /* Endpunkte.swift in Sources */, + 431D27A182E4DEBD84F0DA05 /* Geldbetrag.swift in Sources */, + 8EAA9F11CF1FDFE702557B55 /* Grundmodelle.swift in Sources */, + 3F49B22ED7C840858749B143 /* KontenListe.swift in Sources */, + 0E66BEE1DEE6E4A5D88A6696 /* Konto.swift in Sources */, + D5AFF6E8CE7AB6674BDCEEE1 /* Lader.swift in Sources */, + B2470AAE64D657CF7CDEA099 /* PasswortWechselAnsicht.swift in Sources */, + B90D679A31C1627CC7B788DA /* RootAnsicht.swift in Sources */, + 3E574E1D2C0CDB24C652190C /* ServerAnsicht.swift in Sources */, + 7AFCD4ADF85329F373C89E06 /* Zeitangaben.swift in Sources */, + 25EC32ED2FF88F4286B752A7 /* Zustandsansichten.swift in Sources */, + 1E0AE92B8994298A0468E4EC /* ZweiFaktorAnsicht.swift in Sources */, + 4C9AC9D9DCA7A94F831AB207 /* Zwischenspeicher.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 183CFCE6D6F6769B7A0CFE43 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 273DB28E6F6B8944B4879A06 /* Certain */; + targetProxy = 2D43432195E8A8F77E79DF49 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + BDF076C7F062202810699EE9 /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + C5F948B06FF2E65118C82636 /* de */, + 1E6FE0925FC71A03818FFF72 /* en */, + ); + name = Localizable.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 0C1990D56F8E2B65D3DB0A44 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = PP34X97WS3; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = Certain; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 0.1; + PRODUCT_BUNDLE_IDENTIFIER = com.scarriffle.certain; + SDKROOT = iphoneos; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Release; + }; + 507EC2B7E4B0269B65F8F2A2 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + 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; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + 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 = ( + "$(inherited)", + "DEBUG=1", + ); + 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; + IPHONEOS_DEPLOYMENT_TARGET = 26.0; + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; + MTL_FAST_MATH = YES; + ONLY_ACTIVE_ARCH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 6E14A372460452CBE33D2F62 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + GENERATE_INFOPLIST_FILE = YES; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.scarriffle.CertainTests; + SDKROOT = iphoneos; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Certain.app/Certain"; + }; + name = Debug; + }; + 78BBFF0B27B6614A8955859E /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + 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; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + 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; + IPHONEOS_DEPLOYMENT_TARGET = 26.0; + MTL_ENABLE_DEBUG_INFO = NO; + MTL_FAST_MATH = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SDKROOT = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 9611AED428CDAEAF407DCF13 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + GENERATE_INFOPLIST_FILE = YES; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.scarriffle.CertainTests; + SDKROOT = iphoneos; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Certain.app/Certain"; + }; + name = Release; + }; + CADCD521080B321D3D652106 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CODE_SIGN_IDENTITY = "iPhone Developer"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = PP34X97WS3; + GENERATE_INFOPLIST_FILE = YES; + INFOPLIST_KEY_CFBundleDisplayName = Certain; + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; + INFOPLIST_KEY_UILaunchScreen_Generation = YES; + INFOPLIST_KEY_UISupportedInterfaceOrientations = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + MARKETING_VERSION = 0.1; + PRODUCT_BUNDLE_IDENTIFIER = com.scarriffle.certain; + SDKROOT = iphoneos; + SWIFT_VERSION = 5.0; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 5FB7AD5694029CE8047B30A6 /* Build configuration list for PBXNativeTarget "Certain" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + CADCD521080B321D3D652106 /* Debug */, + 0C1990D56F8E2B65D3DB0A44 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + B7C4A363393DD132E27BF360 /* Build configuration list for PBXNativeTarget "CertainTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 6E14A372460452CBE33D2F62 /* Debug */, + 9611AED428CDAEAF407DCF13 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; + FE4C13F0F9703E456BEE9496 /* Build configuration list for PBXProject "Certain" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 507EC2B7E4B0269B65F8F2A2 /* Debug */, + 78BBFF0B27B6614A8955859E /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Debug; + }; +/* End XCConfigurationList section */ + }; + rootObject = E5DF7640265CD3906602698E /* Project object */; +} diff --git a/ios/Certain.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/ios/Certain.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/ios/Certain.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/ios/Certain.xcodeproj/xcshareddata/xcschemes/Certain.xcscheme b/ios/Certain.xcodeproj/xcshareddata/xcschemes/Certain.xcscheme new file mode 100644 index 0000000..07aff4d --- /dev/null +++ b/ios/Certain.xcodeproj/xcshareddata/xcschemes/Certain.xcscheme @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/project.yml b/ios/project.yml new file mode 100644 index 0000000..00bb058 --- /dev/null +++ b/ios/project.yml @@ -0,0 +1,73 @@ +# XcodeGen-Spezifikation - erzeugt das Xcode-Projekt aus diesen Quellen. +# brew install xcodegen && cd ios && xcodegen generate && open Certain.xcodeproj +# Die Datei ist die Wahrheit, nicht das erzeugte Certain.xcodeproj: wer einen +# Ordner hinzufuegt, laeuft einmal "xcodegen generate" und ist fertig. +name: Certain +options: + bundleIdPrefix: com.scarriffle + # Ohne das baut Xcode eine englische App: Datumsauswahl und Monatsnamen + # erscheinen dann als "10. Dec 2027" statt "10. Dez. 2027". + developmentLanguage: de + deploymentTarget: + iOS: "26.0" + createIntermediateGroups: true + +targets: + Certain: + type: application + platform: iOS + sources: + - path: Anmeldung + - path: App + - path: Bausteine + - path: Einstellungen + - path: Konten + - path: Modelle + - path: Netzwerk + # Deutsch und Englisch, zeilengleich gehalten. + - path: Texte + settings: + base: + PRODUCT_BUNDLE_IDENTIFIER: com.scarriffle.certain + # Signing automatisch; wer mit einem anderen Apple-Konto baut, traegt + # hier seine Team-ID ein (Xcode: Signing & Capabilities -> Team). + CODE_SIGN_STYLE: Automatic + DEVELOPMENT_TEAM: PP34X97WS3 + MARKETING_VERSION: "0.1" + CURRENT_PROJECT_VERSION: "1" + # iPhone und iPad, zweispaltig gedacht. + TARGETED_DEVICE_FAMILY: "1,2" + # Sprachfassung 5: der Code ist nicht auf die strikte + # Nebenlaeufigkeitspruefung von Swift 6 hin geschrieben. Umstellen, + # wenn die Uebergaenge AppZustand <-> CertainClient geprueft sind. + SWIFT_VERSION: "5.0" + # Keine eigene Info.plist pflegen - Xcode erzeugt sie aus diesen Werten. + GENERATE_INFOPLIST_FILE: YES + INFOPLIST_KEY_CFBundleDisplayName: Certain + INFOPLIST_KEY_UILaunchScreen_Generation: YES + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents: YES + INFOPLIST_KEY_UISupportedInterfaceOrientations: "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight" + + CertainTests: + type: bundle.unit-test + platform: iOS + sources: + - path: Tests + dependencies: + - target: Certain + settings: + base: + SWIFT_VERSION: "5.0" + GENERATE_INFOPLIST_FILE: YES + +schemes: + Certain: + build: + targets: + Certain: all + run: + config: Debug + test: + config: Debug + targets: + - CertainTests