a native iOS client for tangled
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

initial commit: created project scaffold

daniel daum 04fa789a

+905
.DS_Store

This is a binary file and will not be displayed.

+64
.gitignore
··· 1 + # Xcode 2 + # 3 + # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 + 5 + ## User settings 6 + xcuserdata/ 7 + 8 + ## Obj-C/Swift specific 9 + *.hmap 10 + 11 + ## App packaging 12 + *.ipa 13 + *.dSYM.zip 14 + *.dSYM 15 + 16 + ## Playgrounds 17 + timeline.xctimeline 18 + playground.xcworkspace 19 + 20 + # Swift Package Manager 21 + # 22 + # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 23 + # Packages/ 24 + # Package.pins 25 + # Package.resolved 26 + # *.xcodeproj 27 + # 28 + # Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata 29 + # hence it is not needed unless you have added a package configuration file to your project 30 + # .swiftpm 31 + 32 + .build/ 33 + PLAN.md 34 + CLAUDE.md 35 + 36 + # CocoaPods 37 + # 38 + # We recommend against adding the Pods directory to your .gitignore. However 39 + # you should judge for yourself, the pros and cons are mentioned at: 40 + # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 41 + # 42 + # Pods/ 43 + # 44 + # Add this line if you want to avoid checking in source code from the Xcode workspace 45 + # *.xcworkspace 46 + 47 + # Carthage 48 + # 49 + # Add this line if you want to avoid checking in source code from Carthage dependencies. 50 + # Carthage/Checkouts 51 + 52 + Carthage/Build/ 53 + 54 + # fastlane 55 + # 56 + # It is recommended to not store the screenshots in the git repo. 57 + # Instead, use fastlane to re-generate the screenshots whenever they are needed. 58 + # For more information about the recommended setup visit: 59 + # https://docs.fastlane.tools/best-practices/source-control/#source-control 60 + 61 + fastlane/report.xml 62 + fastlane/Preview.html 63 + fastlane/screenshots/**/*.png 64 + fastlane/test_output
+25
.tangled/workflows/mirror-to-github.yaml
··· 1 + # .tangled/workflows/mirror-to-github.yml 2 + 3 + when: 4 + - event: ["push", "manual"] 5 + branch: ["main"] 6 + 7 + engine: "nixery" 8 + 9 + clone: 10 + depth: 0 11 + 12 + dependencies: 13 + nixpkgs: 14 + - git 15 + 16 + steps: 17 + - name: "Mirror to GitHub" 18 + command: | 19 + git fetch --unshallow origin || true 20 + git fetch origin refs/heads/main:refs/heads/main 21 + git remote add github https://x-access-token:${GITHUB_PAT}@github.com/${GITHUB_USERNAME}/${GITHUB_REPO_NAME}.git 22 + git push github refs/heads/main:refs/heads/main --force 23 + environment: 24 + GITHUB_USERNAME: "daniel-daum" 25 + GITHUB_REPO_NAME: "frayed"
+11
README.md
··· 1 + # Frayed 2 + 3 + A native iOS client for [Tangled](https://tangled.org), a code collaboration platform built on the AT Protocol. 4 + 5 + > Early development. Not yet functional. 6 + 7 + ## About 8 + 9 + Frayed is being built as a learning project in Swift and SwiftUI. The goal is a clean, native iOS experience for browsing Tangled repositories, issues, and profiles. 10 + 11 + ## Hosted on Tangled, mirrored to GitHub.
+594
frayed.xcodeproj/project.pbxproj
··· 1 + // !$*UTF8*$! 2 + { 3 + archiveVersion = 1; 4 + classes = { 5 + }; 6 + objectVersion = 77; 7 + objects = { 8 + 9 + /* Begin PBXBuildFile section */ 10 + 650AEDFC2F803959008112CB /* PLAN.md in Sources */ = {isa = PBXBuildFile; fileRef = 650AEDFB2F803955008112CB /* PLAN.md */; }; 11 + 650AEDFE2F803A46008112CB /* README.md in Resources */ = {isa = PBXBuildFile; fileRef = 650AEDFD2F803A42008112CB /* README.md */; }; 12 + /* End PBXBuildFile section */ 13 + 14 + /* Begin PBXContainerItemProxy section */ 15 + 6555AD032F80348800159B0B /* PBXContainerItemProxy */ = { 16 + isa = PBXContainerItemProxy; 17 + containerPortal = 6555ACED2F80348700159B0B /* Project object */; 18 + proxyType = 1; 19 + remoteGlobalIDString = 6555ACF42F80348700159B0B; 20 + remoteInfo = frayed; 21 + }; 22 + 6555AD0D2F80348800159B0B /* PBXContainerItemProxy */ = { 23 + isa = PBXContainerItemProxy; 24 + containerPortal = 6555ACED2F80348700159B0B /* Project object */; 25 + proxyType = 1; 26 + remoteGlobalIDString = 6555ACF42F80348700159B0B; 27 + remoteInfo = frayed; 28 + }; 29 + /* End PBXContainerItemProxy section */ 30 + 31 + /* Begin PBXFileReference section */ 32 + 650AEDFB2F803955008112CB /* PLAN.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = PLAN.md; sourceTree = "<group>"; }; 33 + 650AEDFD2F803A42008112CB /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; }; 34 + 6555ACF52F80348700159B0B /* frayed.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = frayed.app; sourceTree = BUILT_PRODUCTS_DIR; }; 35 + 6555AD022F80348800159B0B /* frayedTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = frayedTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 36 + 6555AD0C2F80348800159B0B /* frayedUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = frayedUITests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 37 + /* End PBXFileReference section */ 38 + 39 + /* Begin PBXFileSystemSynchronizedRootGroup section */ 40 + 6555ACF72F80348700159B0B /* frayed */ = { 41 + isa = PBXFileSystemSynchronizedRootGroup; 42 + path = frayed; 43 + sourceTree = "<group>"; 44 + }; 45 + 6555AD052F80348800159B0B /* frayedTests */ = { 46 + isa = PBXFileSystemSynchronizedRootGroup; 47 + path = frayedTests; 48 + sourceTree = "<group>"; 49 + }; 50 + 6555AD0F2F80348800159B0B /* frayedUITests */ = { 51 + isa = PBXFileSystemSynchronizedRootGroup; 52 + path = frayedUITests; 53 + sourceTree = "<group>"; 54 + }; 55 + /* End PBXFileSystemSynchronizedRootGroup section */ 56 + 57 + /* Begin PBXFrameworksBuildPhase section */ 58 + 6555ACF22F80348700159B0B /* Frameworks */ = { 59 + isa = PBXFrameworksBuildPhase; 60 + buildActionMask = 2147483647; 61 + files = ( 62 + ); 63 + runOnlyForDeploymentPostprocessing = 0; 64 + }; 65 + 6555ACFF2F80348800159B0B /* Frameworks */ = { 66 + isa = PBXFrameworksBuildPhase; 67 + buildActionMask = 2147483647; 68 + files = ( 69 + ); 70 + runOnlyForDeploymentPostprocessing = 0; 71 + }; 72 + 6555AD092F80348800159B0B /* Frameworks */ = { 73 + isa = PBXFrameworksBuildPhase; 74 + buildActionMask = 2147483647; 75 + files = ( 76 + ); 77 + runOnlyForDeploymentPostprocessing = 0; 78 + }; 79 + /* End PBXFrameworksBuildPhase section */ 80 + 81 + /* Begin PBXGroup section */ 82 + 6555ACEC2F80348700159B0B = { 83 + isa = PBXGroup; 84 + children = ( 85 + 650AEDFD2F803A42008112CB /* README.md */, 86 + 650AEDFB2F803955008112CB /* PLAN.md */, 87 + 6555ACF72F80348700159B0B /* frayed */, 88 + 6555AD052F80348800159B0B /* frayedTests */, 89 + 6555AD0F2F80348800159B0B /* frayedUITests */, 90 + 6555ACF62F80348700159B0B /* Products */, 91 + ); 92 + sourceTree = "<group>"; 93 + }; 94 + 6555ACF62F80348700159B0B /* Products */ = { 95 + isa = PBXGroup; 96 + children = ( 97 + 6555ACF52F80348700159B0B /* frayed.app */, 98 + 6555AD022F80348800159B0B /* frayedTests.xctest */, 99 + 6555AD0C2F80348800159B0B /* frayedUITests.xctest */, 100 + ); 101 + name = Products; 102 + sourceTree = "<group>"; 103 + }; 104 + /* End PBXGroup section */ 105 + 106 + /* Begin PBXNativeTarget section */ 107 + 6555ACF42F80348700159B0B /* frayed */ = { 108 + isa = PBXNativeTarget; 109 + buildConfigurationList = 6555AD162F80348800159B0B /* Build configuration list for PBXNativeTarget "frayed" */; 110 + buildPhases = ( 111 + 6555ACF12F80348700159B0B /* Sources */, 112 + 6555ACF22F80348700159B0B /* Frameworks */, 113 + 6555ACF32F80348700159B0B /* Resources */, 114 + ); 115 + buildRules = ( 116 + ); 117 + dependencies = ( 118 + ); 119 + fileSystemSynchronizedGroups = ( 120 + 6555ACF72F80348700159B0B /* frayed */, 121 + ); 122 + name = frayed; 123 + packageProductDependencies = ( 124 + ); 125 + productName = frayed; 126 + productReference = 6555ACF52F80348700159B0B /* frayed.app */; 127 + productType = "com.apple.product-type.application"; 128 + }; 129 + 6555AD012F80348800159B0B /* frayedTests */ = { 130 + isa = PBXNativeTarget; 131 + buildConfigurationList = 6555AD192F80348800159B0B /* Build configuration list for PBXNativeTarget "frayedTests" */; 132 + buildPhases = ( 133 + 6555ACFE2F80348800159B0B /* Sources */, 134 + 6555ACFF2F80348800159B0B /* Frameworks */, 135 + 6555AD002F80348800159B0B /* Resources */, 136 + ); 137 + buildRules = ( 138 + ); 139 + dependencies = ( 140 + 6555AD042F80348800159B0B /* PBXTargetDependency */, 141 + ); 142 + fileSystemSynchronizedGroups = ( 143 + 6555AD052F80348800159B0B /* frayedTests */, 144 + ); 145 + name = frayedTests; 146 + packageProductDependencies = ( 147 + ); 148 + productName = frayedTests; 149 + productReference = 6555AD022F80348800159B0B /* frayedTests.xctest */; 150 + productType = "com.apple.product-type.bundle.unit-test"; 151 + }; 152 + 6555AD0B2F80348800159B0B /* frayedUITests */ = { 153 + isa = PBXNativeTarget; 154 + buildConfigurationList = 6555AD1C2F80348800159B0B /* Build configuration list for PBXNativeTarget "frayedUITests" */; 155 + buildPhases = ( 156 + 6555AD082F80348800159B0B /* Sources */, 157 + 6555AD092F80348800159B0B /* Frameworks */, 158 + 6555AD0A2F80348800159B0B /* Resources */, 159 + ); 160 + buildRules = ( 161 + ); 162 + dependencies = ( 163 + 6555AD0E2F80348800159B0B /* PBXTargetDependency */, 164 + ); 165 + fileSystemSynchronizedGroups = ( 166 + 6555AD0F2F80348800159B0B /* frayedUITests */, 167 + ); 168 + name = frayedUITests; 169 + packageProductDependencies = ( 170 + ); 171 + productName = frayedUITests; 172 + productReference = 6555AD0C2F80348800159B0B /* frayedUITests.xctest */; 173 + productType = "com.apple.product-type.bundle.ui-testing"; 174 + }; 175 + /* End PBXNativeTarget section */ 176 + 177 + /* Begin PBXProject section */ 178 + 6555ACED2F80348700159B0B /* Project object */ = { 179 + isa = PBXProject; 180 + attributes = { 181 + BuildIndependentTargetsInParallel = 1; 182 + LastSwiftUpdateCheck = 2640; 183 + LastUpgradeCheck = 2640; 184 + TargetAttributes = { 185 + 6555ACF42F80348700159B0B = { 186 + CreatedOnToolsVersion = 26.4; 187 + }; 188 + 6555AD012F80348800159B0B = { 189 + CreatedOnToolsVersion = 26.4; 190 + TestTargetID = 6555ACF42F80348700159B0B; 191 + }; 192 + 6555AD0B2F80348800159B0B = { 193 + CreatedOnToolsVersion = 26.4; 194 + TestTargetID = 6555ACF42F80348700159B0B; 195 + }; 196 + }; 197 + }; 198 + buildConfigurationList = 6555ACF02F80348700159B0B /* Build configuration list for PBXProject "frayed" */; 199 + developmentRegion = en; 200 + hasScannedForEncodings = 0; 201 + knownRegions = ( 202 + en, 203 + Base, 204 + ); 205 + mainGroup = 6555ACEC2F80348700159B0B; 206 + minimizedProjectReferenceProxies = 1; 207 + preferredProjectObjectVersion = 77; 208 + productRefGroup = 6555ACF62F80348700159B0B /* Products */; 209 + projectDirPath = ""; 210 + projectRoot = ""; 211 + targets = ( 212 + 6555ACF42F80348700159B0B /* frayed */, 213 + 6555AD012F80348800159B0B /* frayedTests */, 214 + 6555AD0B2F80348800159B0B /* frayedUITests */, 215 + ); 216 + }; 217 + /* End PBXProject section */ 218 + 219 + /* Begin PBXResourcesBuildPhase section */ 220 + 6555ACF32F80348700159B0B /* Resources */ = { 221 + isa = PBXResourcesBuildPhase; 222 + buildActionMask = 2147483647; 223 + files = ( 224 + 650AEDFE2F803A46008112CB /* README.md in Resources */, 225 + ); 226 + runOnlyForDeploymentPostprocessing = 0; 227 + }; 228 + 6555AD002F80348800159B0B /* Resources */ = { 229 + isa = PBXResourcesBuildPhase; 230 + buildActionMask = 2147483647; 231 + files = ( 232 + ); 233 + runOnlyForDeploymentPostprocessing = 0; 234 + }; 235 + 6555AD0A2F80348800159B0B /* Resources */ = { 236 + isa = PBXResourcesBuildPhase; 237 + buildActionMask = 2147483647; 238 + files = ( 239 + ); 240 + runOnlyForDeploymentPostprocessing = 0; 241 + }; 242 + /* End PBXResourcesBuildPhase section */ 243 + 244 + /* Begin PBXSourcesBuildPhase section */ 245 + 6555ACF12F80348700159B0B /* Sources */ = { 246 + isa = PBXSourcesBuildPhase; 247 + buildActionMask = 2147483647; 248 + files = ( 249 + 650AEDFC2F803959008112CB /* PLAN.md in Sources */, 250 + ); 251 + runOnlyForDeploymentPostprocessing = 0; 252 + }; 253 + 6555ACFE2F80348800159B0B /* Sources */ = { 254 + isa = PBXSourcesBuildPhase; 255 + buildActionMask = 2147483647; 256 + files = ( 257 + ); 258 + runOnlyForDeploymentPostprocessing = 0; 259 + }; 260 + 6555AD082F80348800159B0B /* Sources */ = { 261 + isa = PBXSourcesBuildPhase; 262 + buildActionMask = 2147483647; 263 + files = ( 264 + ); 265 + runOnlyForDeploymentPostprocessing = 0; 266 + }; 267 + /* End PBXSourcesBuildPhase section */ 268 + 269 + /* Begin PBXTargetDependency section */ 270 + 6555AD042F80348800159B0B /* PBXTargetDependency */ = { 271 + isa = PBXTargetDependency; 272 + target = 6555ACF42F80348700159B0B /* frayed */; 273 + targetProxy = 6555AD032F80348800159B0B /* PBXContainerItemProxy */; 274 + }; 275 + 6555AD0E2F80348800159B0B /* PBXTargetDependency */ = { 276 + isa = PBXTargetDependency; 277 + target = 6555ACF42F80348700159B0B /* frayed */; 278 + targetProxy = 6555AD0D2F80348800159B0B /* PBXContainerItemProxy */; 279 + }; 280 + /* End PBXTargetDependency section */ 281 + 282 + /* Begin XCBuildConfiguration section */ 283 + 6555AD142F80348800159B0B /* Debug */ = { 284 + isa = XCBuildConfiguration; 285 + buildSettings = { 286 + ALWAYS_SEARCH_USER_PATHS = NO; 287 + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 288 + CLANG_ANALYZER_NONNULL = YES; 289 + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 290 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; 291 + CLANG_ENABLE_MODULES = YES; 292 + CLANG_ENABLE_OBJC_ARC = YES; 293 + CLANG_ENABLE_OBJC_WEAK = YES; 294 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 295 + CLANG_WARN_BOOL_CONVERSION = YES; 296 + CLANG_WARN_COMMA = YES; 297 + CLANG_WARN_CONSTANT_CONVERSION = YES; 298 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 299 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 300 + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 301 + CLANG_WARN_EMPTY_BODY = YES; 302 + CLANG_WARN_ENUM_CONVERSION = YES; 303 + CLANG_WARN_INFINITE_RECURSION = YES; 304 + CLANG_WARN_INT_CONVERSION = YES; 305 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 306 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 307 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 308 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 309 + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 310 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 311 + CLANG_WARN_STRICT_PROTOTYPES = YES; 312 + CLANG_WARN_SUSPICIOUS_MOVE = YES; 313 + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 314 + CLANG_WARN_UNREACHABLE_CODE = YES; 315 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 316 + COPY_PHASE_STRIP = NO; 317 + DEBUG_INFORMATION_FORMAT = dwarf; 318 + DEVELOPMENT_TEAM = V4A23659NX; 319 + ENABLE_STRICT_OBJC_MSGSEND = YES; 320 + ENABLE_TESTABILITY = YES; 321 + ENABLE_USER_SCRIPT_SANDBOXING = YES; 322 + GCC_C_LANGUAGE_STANDARD = gnu17; 323 + GCC_DYNAMIC_NO_PIC = NO; 324 + GCC_NO_COMMON_BLOCKS = YES; 325 + GCC_OPTIMIZATION_LEVEL = 0; 326 + GCC_PREPROCESSOR_DEFINITIONS = ( 327 + "DEBUG=1", 328 + "$(inherited)", 329 + ); 330 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 331 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 332 + GCC_WARN_UNDECLARED_SELECTOR = YES; 333 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 334 + GCC_WARN_UNUSED_FUNCTION = YES; 335 + GCC_WARN_UNUSED_VARIABLE = YES; 336 + IPHONEOS_DEPLOYMENT_TARGET = 26.4; 337 + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; 338 + MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 339 + MTL_FAST_MATH = YES; 340 + ONLY_ACTIVE_ARCH = YES; 341 + SDKROOT = iphoneos; 342 + SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited)"; 343 + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 344 + }; 345 + name = Debug; 346 + }; 347 + 6555AD152F80348800159B0B /* Release */ = { 348 + isa = XCBuildConfiguration; 349 + buildSettings = { 350 + ALWAYS_SEARCH_USER_PATHS = NO; 351 + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; 352 + CLANG_ANALYZER_NONNULL = YES; 353 + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 354 + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; 355 + CLANG_ENABLE_MODULES = YES; 356 + CLANG_ENABLE_OBJC_ARC = YES; 357 + CLANG_ENABLE_OBJC_WEAK = YES; 358 + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 359 + CLANG_WARN_BOOL_CONVERSION = YES; 360 + CLANG_WARN_COMMA = YES; 361 + CLANG_WARN_CONSTANT_CONVERSION = YES; 362 + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 363 + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 364 + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 365 + CLANG_WARN_EMPTY_BODY = YES; 366 + CLANG_WARN_ENUM_CONVERSION = YES; 367 + CLANG_WARN_INFINITE_RECURSION = YES; 368 + CLANG_WARN_INT_CONVERSION = YES; 369 + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 370 + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 371 + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 372 + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 373 + CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES; 374 + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 375 + CLANG_WARN_STRICT_PROTOTYPES = YES; 376 + CLANG_WARN_SUSPICIOUS_MOVE = YES; 377 + CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 378 + CLANG_WARN_UNREACHABLE_CODE = YES; 379 + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 380 + COPY_PHASE_STRIP = NO; 381 + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 382 + DEVELOPMENT_TEAM = V4A23659NX; 383 + ENABLE_NS_ASSERTIONS = NO; 384 + ENABLE_STRICT_OBJC_MSGSEND = YES; 385 + ENABLE_USER_SCRIPT_SANDBOXING = YES; 386 + GCC_C_LANGUAGE_STANDARD = gnu17; 387 + GCC_NO_COMMON_BLOCKS = YES; 388 + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 389 + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 390 + GCC_WARN_UNDECLARED_SELECTOR = YES; 391 + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 392 + GCC_WARN_UNUSED_FUNCTION = YES; 393 + GCC_WARN_UNUSED_VARIABLE = YES; 394 + IPHONEOS_DEPLOYMENT_TARGET = 26.4; 395 + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; 396 + MTL_ENABLE_DEBUG_INFO = NO; 397 + MTL_FAST_MATH = YES; 398 + SDKROOT = iphoneos; 399 + SWIFT_COMPILATION_MODE = wholemodule; 400 + VALIDATE_PRODUCT = YES; 401 + }; 402 + name = Release; 403 + }; 404 + 6555AD172F80348800159B0B /* Debug */ = { 405 + isa = XCBuildConfiguration; 406 + buildSettings = { 407 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 408 + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 409 + CODE_SIGN_STYLE = Automatic; 410 + CURRENT_PROJECT_VERSION = 1; 411 + DEVELOPMENT_TEAM = V4A23659NX; 412 + ENABLE_PREVIEWS = YES; 413 + GENERATE_INFOPLIST_FILE = YES; 414 + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; 415 + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; 416 + INFOPLIST_KEY_UILaunchScreen_Generation = YES; 417 + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 418 + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 419 + LD_RUNPATH_SEARCH_PATHS = ( 420 + "$(inherited)", 421 + "@executable_path/Frameworks", 422 + ); 423 + MARKETING_VERSION = 1.0; 424 + PRODUCT_BUNDLE_IDENTIFIER = net.danieldaum.frayed; 425 + PRODUCT_NAME = "$(TARGET_NAME)"; 426 + STRING_CATALOG_GENERATE_SYMBOLS = YES; 427 + SWIFT_APPROACHABLE_CONCURRENCY = YES; 428 + SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; 429 + SWIFT_EMIT_LOC_STRINGS = YES; 430 + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; 431 + SWIFT_VERSION = 5.0; 432 + TARGETED_DEVICE_FAMILY = "1,2"; 433 + }; 434 + name = Debug; 435 + }; 436 + 6555AD182F80348800159B0B /* Release */ = { 437 + isa = XCBuildConfiguration; 438 + buildSettings = { 439 + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 440 + ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; 441 + CODE_SIGN_STYLE = Automatic; 442 + CURRENT_PROJECT_VERSION = 1; 443 + DEVELOPMENT_TEAM = V4A23659NX; 444 + ENABLE_PREVIEWS = YES; 445 + GENERATE_INFOPLIST_FILE = YES; 446 + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; 447 + INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; 448 + INFOPLIST_KEY_UILaunchScreen_Generation = YES; 449 + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 450 + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; 451 + LD_RUNPATH_SEARCH_PATHS = ( 452 + "$(inherited)", 453 + "@executable_path/Frameworks", 454 + ); 455 + MARKETING_VERSION = 1.0; 456 + PRODUCT_BUNDLE_IDENTIFIER = net.danieldaum.frayed; 457 + PRODUCT_NAME = "$(TARGET_NAME)"; 458 + STRING_CATALOG_GENERATE_SYMBOLS = YES; 459 + SWIFT_APPROACHABLE_CONCURRENCY = YES; 460 + SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor; 461 + SWIFT_EMIT_LOC_STRINGS = YES; 462 + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; 463 + SWIFT_VERSION = 5.0; 464 + TARGETED_DEVICE_FAMILY = "1,2"; 465 + }; 466 + name = Release; 467 + }; 468 + 6555AD1A2F80348800159B0B /* Debug */ = { 469 + isa = XCBuildConfiguration; 470 + buildSettings = { 471 + BUNDLE_LOADER = "$(TEST_HOST)"; 472 + CODE_SIGN_STYLE = Automatic; 473 + CURRENT_PROJECT_VERSION = 1; 474 + DEVELOPMENT_TEAM = V4A23659NX; 475 + GENERATE_INFOPLIST_FILE = YES; 476 + IPHONEOS_DEPLOYMENT_TARGET = 26.4; 477 + MARKETING_VERSION = 1.0; 478 + PRODUCT_BUNDLE_IDENTIFIER = net.danieldaum.frayedTests; 479 + PRODUCT_NAME = "$(TARGET_NAME)"; 480 + STRING_CATALOG_GENERATE_SYMBOLS = NO; 481 + SWIFT_APPROACHABLE_CONCURRENCY = YES; 482 + SWIFT_EMIT_LOC_STRINGS = NO; 483 + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; 484 + SWIFT_VERSION = 5.0; 485 + TARGETED_DEVICE_FAMILY = "1,2"; 486 + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/frayed.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/frayed"; 487 + }; 488 + name = Debug; 489 + }; 490 + 6555AD1B2F80348800159B0B /* Release */ = { 491 + isa = XCBuildConfiguration; 492 + buildSettings = { 493 + BUNDLE_LOADER = "$(TEST_HOST)"; 494 + CODE_SIGN_STYLE = Automatic; 495 + CURRENT_PROJECT_VERSION = 1; 496 + DEVELOPMENT_TEAM = V4A23659NX; 497 + GENERATE_INFOPLIST_FILE = YES; 498 + IPHONEOS_DEPLOYMENT_TARGET = 26.4; 499 + MARKETING_VERSION = 1.0; 500 + PRODUCT_BUNDLE_IDENTIFIER = net.danieldaum.frayedTests; 501 + PRODUCT_NAME = "$(TARGET_NAME)"; 502 + STRING_CATALOG_GENERATE_SYMBOLS = NO; 503 + SWIFT_APPROACHABLE_CONCURRENCY = YES; 504 + SWIFT_EMIT_LOC_STRINGS = NO; 505 + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; 506 + SWIFT_VERSION = 5.0; 507 + TARGETED_DEVICE_FAMILY = "1,2"; 508 + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/frayed.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/frayed"; 509 + }; 510 + name = Release; 511 + }; 512 + 6555AD1D2F80348800159B0B /* Debug */ = { 513 + isa = XCBuildConfiguration; 514 + buildSettings = { 515 + CODE_SIGN_STYLE = Automatic; 516 + CURRENT_PROJECT_VERSION = 1; 517 + DEVELOPMENT_TEAM = V4A23659NX; 518 + GENERATE_INFOPLIST_FILE = YES; 519 + MARKETING_VERSION = 1.0; 520 + PRODUCT_BUNDLE_IDENTIFIER = net.danieldaum.frayedUITests; 521 + PRODUCT_NAME = "$(TARGET_NAME)"; 522 + STRING_CATALOG_GENERATE_SYMBOLS = NO; 523 + SWIFT_APPROACHABLE_CONCURRENCY = YES; 524 + SWIFT_EMIT_LOC_STRINGS = NO; 525 + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; 526 + SWIFT_VERSION = 5.0; 527 + TARGETED_DEVICE_FAMILY = "1,2"; 528 + TEST_TARGET_NAME = frayed; 529 + }; 530 + name = Debug; 531 + }; 532 + 6555AD1E2F80348800159B0B /* Release */ = { 533 + isa = XCBuildConfiguration; 534 + buildSettings = { 535 + CODE_SIGN_STYLE = Automatic; 536 + CURRENT_PROJECT_VERSION = 1; 537 + DEVELOPMENT_TEAM = V4A23659NX; 538 + GENERATE_INFOPLIST_FILE = YES; 539 + MARKETING_VERSION = 1.0; 540 + PRODUCT_BUNDLE_IDENTIFIER = net.danieldaum.frayedUITests; 541 + PRODUCT_NAME = "$(TARGET_NAME)"; 542 + STRING_CATALOG_GENERATE_SYMBOLS = NO; 543 + SWIFT_APPROACHABLE_CONCURRENCY = YES; 544 + SWIFT_EMIT_LOC_STRINGS = NO; 545 + SWIFT_UPCOMING_FEATURE_MEMBER_IMPORT_VISIBILITY = YES; 546 + SWIFT_VERSION = 5.0; 547 + TARGETED_DEVICE_FAMILY = "1,2"; 548 + TEST_TARGET_NAME = frayed; 549 + }; 550 + name = Release; 551 + }; 552 + /* End XCBuildConfiguration section */ 553 + 554 + /* Begin XCConfigurationList section */ 555 + 6555ACF02F80348700159B0B /* Build configuration list for PBXProject "frayed" */ = { 556 + isa = XCConfigurationList; 557 + buildConfigurations = ( 558 + 6555AD142F80348800159B0B /* Debug */, 559 + 6555AD152F80348800159B0B /* Release */, 560 + ); 561 + defaultConfigurationIsVisible = 0; 562 + defaultConfigurationName = Release; 563 + }; 564 + 6555AD162F80348800159B0B /* Build configuration list for PBXNativeTarget "frayed" */ = { 565 + isa = XCConfigurationList; 566 + buildConfigurations = ( 567 + 6555AD172F80348800159B0B /* Debug */, 568 + 6555AD182F80348800159B0B /* Release */, 569 + ); 570 + defaultConfigurationIsVisible = 0; 571 + defaultConfigurationName = Release; 572 + }; 573 + 6555AD192F80348800159B0B /* Build configuration list for PBXNativeTarget "frayedTests" */ = { 574 + isa = XCConfigurationList; 575 + buildConfigurations = ( 576 + 6555AD1A2F80348800159B0B /* Debug */, 577 + 6555AD1B2F80348800159B0B /* Release */, 578 + ); 579 + defaultConfigurationIsVisible = 0; 580 + defaultConfigurationName = Release; 581 + }; 582 + 6555AD1C2F80348800159B0B /* Build configuration list for PBXNativeTarget "frayedUITests" */ = { 583 + isa = XCConfigurationList; 584 + buildConfigurations = ( 585 + 6555AD1D2F80348800159B0B /* Debug */, 586 + 6555AD1E2F80348800159B0B /* Release */, 587 + ); 588 + defaultConfigurationIsVisible = 0; 589 + defaultConfigurationName = Release; 590 + }; 591 + /* End XCConfigurationList section */ 592 + }; 593 + rootObject = 6555ACED2F80348700159B0B /* Project object */; 594 + }
+7
frayed.xcodeproj/project.xcworkspace/contents.xcworkspacedata
··· 1 + <?xml version="1.0" encoding="UTF-8"?> 2 + <Workspace 3 + version = "1.0"> 4 + <FileRef 5 + location = "self:"> 6 + </FileRef> 7 + </Workspace>
frayed.xcodeproj/project.xcworkspace/xcuserdata/daniel.xcuserdatad/UserInterfaceState.xcuserstate

This is a binary file and will not be displayed.

+14
frayed.xcodeproj/xcuserdata/daniel.xcuserdatad/xcschemes/xcschememanagement.plist
··· 1 + <?xml version="1.0" encoding="UTF-8"?> 2 + <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 3 + <plist version="1.0"> 4 + <dict> 5 + <key>SchemeUserState</key> 6 + <dict> 7 + <key>frayed.xcscheme_^#shared#^_</key> 8 + <dict> 9 + <key>orderHint</key> 10 + <integer>0</integer> 11 + </dict> 12 + </dict> 13 + </dict> 14 + </plist>
+11
frayed/Assets.xcassets/AccentColor.colorset/Contents.json
··· 1 + { 2 + "colors" : [ 3 + { 4 + "idiom" : "universal" 5 + } 6 + ], 7 + "info" : { 8 + "author" : "xcode", 9 + "version" : 1 10 + } 11 + }
+35
frayed/Assets.xcassets/AppIcon.appiconset/Contents.json
··· 1 + { 2 + "images" : [ 3 + { 4 + "idiom" : "universal", 5 + "platform" : "ios", 6 + "size" : "1024x1024" 7 + }, 8 + { 9 + "appearances" : [ 10 + { 11 + "appearance" : "luminosity", 12 + "value" : "dark" 13 + } 14 + ], 15 + "idiom" : "universal", 16 + "platform" : "ios", 17 + "size" : "1024x1024" 18 + }, 19 + { 20 + "appearances" : [ 21 + { 22 + "appearance" : "luminosity", 23 + "value" : "tinted" 24 + } 25 + ], 26 + "idiom" : "universal", 27 + "platform" : "ios", 28 + "size" : "1024x1024" 29 + } 30 + ], 31 + "info" : { 32 + "author" : "xcode", 33 + "version" : 1 34 + } 35 + }
+6
frayed/Assets.xcassets/Contents.json
··· 1 + { 2 + "info" : { 3 + "author" : "xcode", 4 + "version" : 1 5 + } 6 + }
+24
frayed/ContentView.swift
··· 1 + // 2 + // ContentView.swift 3 + // frayed 4 + // 5 + // Created by daniel daum on 4/3/26. 6 + // 7 + 8 + import SwiftUI 9 + 10 + struct ContentView: View { 11 + var body: some View { 12 + VStack { 13 + Image(systemName: "globe") 14 + .imageScale(.large) 15 + .foregroundStyle(.tint) 16 + Text("Hello, world!") 17 + } 18 + .padding() 19 + } 20 + } 21 + 22 + #Preview { 23 + ContentView() 24 + }
+17
frayed/frayedApp.swift
··· 1 + // 2 + // frayedApp.swift 3 + // frayed 4 + // 5 + // Created by daniel daum on 4/3/26. 6 + // 7 + 8 + import SwiftUI 9 + 10 + @main 11 + struct frayedApp: App { 12 + var body: some Scene { 13 + WindowGroup { 14 + ContentView() 15 + } 16 + } 17 + }
+19
frayedTests/frayedTests.swift
··· 1 + // 2 + // frayedTests.swift 3 + // frayedTests 4 + // 5 + // Created by daniel daum on 4/3/26. 6 + // 7 + 8 + import Testing 9 + @testable import frayed 10 + 11 + struct frayedTests { 12 + 13 + @Test func example() async throws { 14 + // Write your test here and use APIs like `#expect(...)` to check expected conditions. 15 + // Swift Testing Documentation 16 + // https://developer.apple.com/documentation/testing 17 + } 18 + 19 + }
+43
frayedUITests/frayedUITests.swift
··· 1 + // 2 + // frayedUITests.swift 3 + // frayedUITests 4 + // 5 + // Created by daniel daum on 4/3/26. 6 + // 7 + 8 + import XCTest 9 + 10 + final class frayedUITests: XCTestCase { 11 + 12 + override func setUpWithError() throws { 13 + // Put setup code here. This method is called before the invocation of each test method in the class. 14 + 15 + // In UI tests it is usually best to stop immediately when a failure occurs. 16 + continueAfterFailure = false 17 + 18 + // In UI tests it’s important to set the initial state - such as interface orientation - required for your tests before they run. The setUp method is a good place to do this. 19 + } 20 + 21 + override func tearDownWithError() throws { 22 + // Put teardown code here. This method is called after the invocation of each test method in the class. 23 + } 24 + 25 + @MainActor 26 + func testExample() throws { 27 + // UI tests must launch the application that they test. 28 + let app = XCUIApplication() 29 + app.launch() 30 + 31 + // Use XCTAssert and related functions to verify your tests produce the correct results. 32 + // XCUIAutomation Documentation 33 + // https://developer.apple.com/documentation/xcuiautomation 34 + } 35 + 36 + @MainActor 37 + func testLaunchPerformance() throws { 38 + // This measures how long it takes to launch your application. 39 + measure(metrics: [XCTApplicationLaunchMetric()]) { 40 + XCUIApplication().launch() 41 + } 42 + } 43 + }
+35
frayedUITests/frayedUITestsLaunchTests.swift
··· 1 + // 2 + // frayedUITestsLaunchTests.swift 3 + // frayedUITests 4 + // 5 + // Created by daniel daum on 4/3/26. 6 + // 7 + 8 + import XCTest 9 + 10 + final class frayedUITestsLaunchTests: XCTestCase { 11 + 12 + override class var runsForEachTargetApplicationUIConfiguration: Bool { 13 + true 14 + } 15 + 16 + override func setUpWithError() throws { 17 + continueAfterFailure = false 18 + } 19 + 20 + @MainActor 21 + func testLaunch() throws { 22 + let app = XCUIApplication() 23 + app.launch() 24 + 25 + // Insert steps here to perform after app launch but before taking a screenshot, 26 + // such as logging into a test account or navigating somewhere in the app 27 + // XCUIAutomation Documentation 28 + // https://developer.apple.com/documentation/xcuiautomation 29 + 30 + let attachment = XCTAttachment(screenshot: app.screenshot()) 31 + attachment.name = "Launch Screen" 32 + attachment.lifetime = .keepAlways 33 + add(attachment) 34 + } 35 + }