experiments in a post-browser web
10
fork

Configure Feed

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

fix(ios): silence build warnings and update Xcode project settings

- Add IPHONEOS_DEPLOYMENT_TARGET=16.0 to build-release.sh to eliminate
'built for newer iOS version' linker warnings on ring/sqlite/AppGroupBridge
- Replace deprecated contentEdgeInsets with UIButton.Configuration API
in ShareViewController (iOS 15+ deprecation)
- Apply Xcode recommended settings (remove deprecated Swift embedding
settings, auto-select architectures, inherit dev team from project)
- Document new troubleshooting entries: linker version warnings,
stale DerivedData workspace mismatch, Xcode recommended settings

+85 -45
+3
backend/tauri-mobile/build-release.sh
··· 57 57 fi 58 58 59 59 echo "Building Rust for iOS device (release)..." 60 + # Match the Xcode project's deployment target so cc-compiled objects 61 + # don't emit "built for newer iOS" linker warnings 62 + export IPHONEOS_DEPLOYMENT_TARGET=16.0 60 63 # Build only the lib target - the bin target would fail to link because 61 64 # Swift FFI symbols (webview_plugin_*) are provided by Xcode at final link time 62 65 # Use custom-protocol feature for bundled assets (not dev server)
+12 -6
backend/tauri-mobile/src-tauri/gen/apple/Peek/ShareViewController.swift
··· 1352 1352 newTagTextField.addTarget(self, action: #selector(tagTextFieldChanged), for: .editingChanged) 1353 1353 inputContainerView.addSubview(newTagTextField) 1354 1354 1355 - addTagButton.setTitle("Add", for: .normal) 1356 - addTagButton.titleLabel?.font = .boldSystemFont(ofSize: 15) 1357 - addTagButton.backgroundColor = .systemGreen 1358 - addTagButton.setTitleColor(.white, for: .normal) 1359 - addTagButton.layer.cornerRadius = 8 1360 - addTagButton.contentEdgeInsets = UIEdgeInsets(top: 8, left: 16, bottom: 8, right: 16) 1355 + var btnConfig = UIButton.Configuration.filled() 1356 + btnConfig.contentInsets = NSDirectionalEdgeInsets(top: 8, leading: 16, bottom: 8, trailing: 16) 1357 + btnConfig.baseBackgroundColor = .systemGreen 1358 + btnConfig.baseForegroundColor = .white 1359 + btnConfig.cornerStyle = .medium 1360 + btnConfig.title = "Add" 1361 + btnConfig.titleTextAttributesTransformer = UIConfigurationTextAttributesTransformer { incoming in 1362 + var outgoing = incoming 1363 + outgoing.font = .boldSystemFont(ofSize: 15) 1364 + return outgoing 1365 + } 1366 + addTagButton.configuration = btnConfig 1361 1367 addTagButton.addTarget(self, action: #selector(addTagPressed), for: .touchUpInside) 1362 1368 addTagButton.translatesAutoresizingMaskIntoConstraints = false 1363 1369 inputContainerView.addSubview(addTagButton)
+45 -37
backend/tauri-mobile/src-tauri/gen/apple/peek-save.xcodeproj/project.pbxproj
··· 3 3 archiveVersion = 1; 4 4 classes = { 5 5 }; 6 - objectVersion = 77; 6 + objectVersion = 63; 7 7 objects = { 8 8 9 9 /* Begin PBXBuildFile section */ ··· 54 54 /* Begin PBXFileReference section */ 55 55 0158B5ABEB2554BCA0EF2E02 /* Security.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Security.framework; path = System/Library/Frameworks/Security.framework; sourceTree = SDKROOT; }; 56 56 02F9BD59F09D9496A417E052 /* libapp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libapp.a; sourceTree = "<group>"; }; 57 - 0969BC8ADA46ECFD8A561627 /* peek-save_iOS.app */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = wrapper.application; path = "peek-save_iOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 58 - 1CF30F6DE821F39D640DB4EA /* main.rs */ = {isa = PBXFileReference; path = main.rs; sourceTree = "<group>"; }; 57 + 0969BC8ADA46ECFD8A561627 /* Peek Save.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Peek Save.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 58 + 1CF30F6DE821F39D640DB4EA /* main.rs */ = {isa = PBXFileReference; lastKnownFileType = text; path = main.rs; sourceTree = "<group>"; }; 59 59 1D98489BDC660658292105ED /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; }; 60 60 216524E73E2E0FF29E304350 /* LaunchScreen.storyboard */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; path = LaunchScreen.storyboard; sourceTree = "<group>"; }; 61 61 33E9F754E77A1BE0BCBF7393 /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = System/Library/Frameworks/UIKit.framework; sourceTree = SDKROOT; }; ··· 64 64 4224417CC98ED40BDB03C9EE /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = System/Library/Frameworks/MetalKit.framework; sourceTree = SDKROOT; }; 65 65 55966F3B7FE19416202A5B9C /* QuartzCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = QuartzCore.framework; path = System/Library/Frameworks/QuartzCore.framework; sourceTree = SDKROOT; }; 66 66 5D5AA1EECCE22141AB98284C /* WebviewPlugin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WebviewPlugin.swift; sourceTree = "<group>"; }; 67 - 5F5D388ED963AA86ABD14C07 /* lib.rs */ = {isa = PBXFileReference; path = lib.rs; sourceTree = "<group>"; }; 67 + 5F5D388ED963AA86ABD14C07 /* lib.rs */ = {isa = PBXFileReference; lastKnownFileType = text; path = lib.rs; sourceTree = "<group>"; }; 68 68 6FB40D9550C8B6FDEFE1195D /* main.mm */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.objcpp; path = main.mm; sourceTree = "<group>"; }; 69 69 6FEA80EAA17D73FBCE7E540F /* libapp.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libapp.a; sourceTree = "<group>"; }; 70 70 72A04B3BD135B904E4090AF6 /* peek-save_iOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = "peek-save_iOS.entitlements"; sourceTree = "<group>"; }; 71 71 7CFF6D9B32049E34565EFB07 /* CoreGraphics.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreGraphics.framework; path = System/Library/Frameworks/CoreGraphics.framework; sourceTree = SDKROOT; }; 72 - 87362C2B9728A9D63E803091 /* Peek.appex */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "wrapper.app-extension"; path = Peek.appex; sourceTree = BUILT_PRODUCTS_DIR; }; 72 + 87362C2B9728A9D63E803091 /* Peek.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = Peek.appex; sourceTree = BUILT_PRODUCTS_DIR; }; 73 73 8A87760D121F5C9EBC861634 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; }; 74 74 B69D60ACE84A8348F57C4366 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = "<group>"; }; 75 75 C1C83CAF4D649A878469BF1B /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; ··· 183 183 BA119BD7AD4FA32ACC10888A /* Products */ = { 184 184 isa = PBXGroup; 185 185 children = ( 186 - 0969BC8ADA46ECFD8A561627 /* peek-save_iOS.app */, 186 + 0969BC8ADA46ECFD8A561627 /* Peek Save.app */, 187 187 87362C2B9728A9D63E803091 /* Peek.appex */, 188 188 ); 189 189 name = Products; ··· 226 226 path = "peek-save"; 227 227 sourceTree = "<group>"; 228 228 }; 229 - "TEMP_F2E1060B-BAA8-4428-94AC-9B1A9D32D9D7" /* x86_64 */ = { 230 - isa = PBXGroup; 231 - children = ( 232 - ); 233 - path = x86_64; 234 - sourceTree = "<group>"; 235 - }; 236 229 /* End PBXGroup section */ 237 230 238 231 /* Begin PBXNativeTarget section */ ··· 255 248 packageProductDependencies = ( 256 249 ); 257 250 productName = "peek-save_iOS"; 258 - productReference = 0969BC8ADA46ECFD8A561627 /* peek-save_iOS.app */; 251 + productReference = 0969BC8ADA46ECFD8A561627 /* Peek Save.app */; 259 252 productType = "com.apple.product-type.application"; 260 253 }; 261 254 473A3294D8D49E11B15E1C40 /* Peek */ = { ··· 285 278 isa = PBXProject; 286 279 attributes = { 287 280 BuildIndependentTargetsInParallel = YES; 288 - LastUpgradeCheck = 1430; 281 + LastUpgradeCheck = 2620; 289 282 TargetAttributes = { 290 283 438ED0E82A70D81230D1F2AE = { 291 284 DevelopmentTeam = TXZTDLL5LC; ··· 306 299 mainGroup = 34B4BE5FDC5EED410CCF1FAE; 307 300 minimizedProjectReferenceProxies = 1; 308 301 packageReferences = ( 309 - B9873F7997774401F7926928 /* XCRemoteSwiftPackageReference "GRDB.swift" */, 302 + B9873F7997774401F7926928 /* XCRemoteSwiftPackageReference "GRDB" */, 310 303 ); 311 - preferredProjectObjectVersion = 77; 312 304 projectDirPath = ""; 313 305 projectRoot = ""; 314 306 targets = ( ··· 394 386 403D8A2C72D5E5E2F711B63E /* release */ = { 395 387 isa = XCBuildConfiguration; 396 388 buildSettings = { 397 - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 398 - ARCHS = ( 399 - arm64, 400 - ); 401 389 ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 402 390 CODE_SIGN_ENTITLEMENTS = "peek-save_iOS/peek-save_iOS.entitlements"; 403 391 CODE_SIGN_IDENTITY = "iPhone Developer"; 404 - DEVELOPMENT_TEAM = "TXZTDLL5LC"; 405 392 ENABLE_BITCODE = NO; 406 393 "EXCLUDED_ARCHS[sdk=iphoneos*]" = x86_64; 407 394 FRAMEWORK_SEARCH_PATHS = ( ··· 413 400 "$(inherited)", 414 401 "@executable_path/Frameworks", 415 402 ); 416 - "LIBRARY_SEARCH_PATHS[arch=arm64]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"; 417 - "LIBRARY_SEARCH_PATHS[arch=x86_64]" = "$(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"; 418 - PRODUCT_BUNDLE_IDENTIFIER = com.dietrich.peek-mobile; 403 + "LIBRARY_SEARCH_PATHS[arch=arm64]" = ( 404 + "$(inherited)", 405 + "$(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION)", 406 + "$(SDKROOT)/usr/lib/swift", 407 + "$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)", 408 + "$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)", 409 + ); 410 + "LIBRARY_SEARCH_PATHS[arch=x86_64]" = ( 411 + "$(inherited)", 412 + "$(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION)", 413 + "$(SDKROOT)/usr/lib/swift", 414 + "$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)", 415 + "$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)", 416 + ); 417 + PRODUCT_BUNDLE_IDENTIFIER = "com.dietrich.peek-mobile"; 419 418 PRODUCT_NAME = "Peek Save"; 420 419 SDKROOT = iphoneos; 421 420 TARGETED_DEVICE_FAMILY = "1,2"; ··· 458 457 CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 459 458 COPY_PHASE_STRIP = NO; 460 459 DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 460 + DEVELOPMENT_TEAM = TXZTDLL5LC; 461 461 ENABLE_NS_ASSERTIONS = NO; 462 462 ENABLE_STRICT_OBJC_MSGSEND = YES; 463 463 GCC_C_LANGUAGE_STANDARD = gnu11; ··· 473 473 MTL_FAST_MATH = YES; 474 474 PRODUCT_NAME = "$(TARGET_NAME)"; 475 475 SDKROOT = iphoneos; 476 + STRING_CATALOG_GENERATE_SYMBOLS = YES; 476 477 SWIFT_COMPILATION_MODE = wholemodule; 477 478 SWIFT_OPTIMIZATION_LEVEL = "-O"; 478 479 SWIFT_VERSION = 5.0; ··· 483 484 isa = XCBuildConfiguration; 484 485 buildSettings = { 485 486 CODE_SIGN_ENTITLEMENTS = Peek/Peek.entitlements; 486 - DEVELOPMENT_TEAM = TXZTDLL5LC; 487 487 INFOPLIST_FILE = Peek/Info.plist; 488 488 IPHONEOS_DEPLOYMENT_TARGET = 16.0; 489 489 LD_RUNPATH_SEARCH_PATHS = ( ··· 500 500 80CB50039B2959639444A6DB /* debug */ = { 501 501 isa = XCBuildConfiguration; 502 502 buildSettings = { 503 - ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 504 - ARCHS = ( 505 - arm64, 506 - ); 507 503 ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 508 504 CODE_SIGN_ENTITLEMENTS = "peek-save_iOS/peek-save_iOS.entitlements"; 509 505 CODE_SIGN_IDENTITY = "iPhone Developer"; 510 - DEVELOPMENT_TEAM = "TXZTDLL5LC"; 511 506 ENABLE_BITCODE = NO; 512 507 "EXCLUDED_ARCHS[sdk=iphoneos*]" = x86_64; 513 508 FRAMEWORK_SEARCH_PATHS = ( ··· 519 514 "$(inherited)", 520 515 "@executable_path/Frameworks", 521 516 ); 522 - "LIBRARY_SEARCH_PATHS[arch=arm64]" = "$(inherited) $(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"; 523 - "LIBRARY_SEARCH_PATHS[arch=x86_64]" = "$(inherited) $(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION) $(SDKROOT)/usr/lib/swift $(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME) $(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)"; 524 - PRODUCT_BUNDLE_IDENTIFIER = com.dietrich.peek-mobile; 517 + "LIBRARY_SEARCH_PATHS[arch=arm64]" = ( 518 + "$(inherited)", 519 + "$(PROJECT_DIR)/Externals/arm64/$(CONFIGURATION)", 520 + "$(SDKROOT)/usr/lib/swift", 521 + "$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)", 522 + "$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)", 523 + ); 524 + "LIBRARY_SEARCH_PATHS[arch=x86_64]" = ( 525 + "$(inherited)", 526 + "$(PROJECT_DIR)/Externals/x86_64/$(CONFIGURATION)", 527 + "$(SDKROOT)/usr/lib/swift", 528 + "$(TOOLCHAIN_DIR)/usr/lib/swift/$(PLATFORM_NAME)", 529 + "$(TOOLCHAIN_DIR)/usr/lib/swift-5.0/$(PLATFORM_NAME)", 530 + ); 531 + PRODUCT_BUNDLE_IDENTIFIER = "com.dietrich.peek-mobile"; 525 532 PRODUCT_NAME = "Peek Save"; 526 533 SDKROOT = iphoneos; 527 534 TARGETED_DEVICE_FAMILY = "1,2"; ··· 564 571 CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 565 572 COPY_PHASE_STRIP = NO; 566 573 DEBUG_INFORMATION_FORMAT = dwarf; 574 + DEVELOPMENT_TEAM = TXZTDLL5LC; 567 575 ENABLE_STRICT_OBJC_MSGSEND = YES; 568 576 ENABLE_TESTABILITY = YES; 569 577 GCC_C_LANGUAGE_STANDARD = gnu11; ··· 586 594 ONLY_ACTIVE_ARCH = YES; 587 595 PRODUCT_NAME = "$(TARGET_NAME)"; 588 596 SDKROOT = iphoneos; 597 + STRING_CATALOG_GENERATE_SYMBOLS = YES; 589 598 SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 590 599 SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 591 600 SWIFT_VERSION = 5.0; ··· 596 605 isa = XCBuildConfiguration; 597 606 buildSettings = { 598 607 CODE_SIGN_ENTITLEMENTS = Peek/Peek.entitlements; 599 - DEVELOPMENT_TEAM = TXZTDLL5LC; 600 608 INFOPLIST_FILE = Peek/Info.plist; 601 609 IPHONEOS_DEPLOYMENT_TARGET = 16.0; 602 610 LD_RUNPATH_SEARCH_PATHS = ( ··· 643 651 /* End XCConfigurationList section */ 644 652 645 653 /* Begin XCRemoteSwiftPackageReference section */ 646 - B9873F7997774401F7926928 /* XCRemoteSwiftPackageReference "GRDB.swift" */ = { 654 + B9873F7997774401F7926928 /* XCRemoteSwiftPackageReference "GRDB" */ = { 647 655 isa = XCRemoteSwiftPackageReference; 648 656 repositoryURL = "https://github.com/groue/GRDB.swift"; 649 657 requirement = { ··· 656 664 /* Begin XCSwiftPackageProductDependency section */ 657 665 52541E203B05C5EB7530AE1F /* GRDB */ = { 658 666 isa = XCSwiftPackageProductDependency; 659 - package = B9873F7997774401F7926928 /* XCRemoteSwiftPackageReference "GRDB.swift" */; 667 + package = B9873F7997774401F7926928 /* XCRemoteSwiftPackageReference "GRDB" */; 660 668 productName = GRDB; 661 669 }; 662 670 /* End XCSwiftPackageProductDependency section */
+2 -2
backend/tauri-mobile/src-tauri/gen/apple/peek-save.xcodeproj/xcshareddata/xcschemes/peek-save_iOS.xcscheme
··· 1 1 <?xml version="1.0" encoding="UTF-8"?> 2 2 <Scheme 3 - LastUpgradeVersion = "1430" 3 + LastUpgradeVersion = "2620" 4 4 version = "1.3"> 5 5 <BuildAction 6 6 parallelizeBuildables = "YES" ··· 52 52 </Testables> 53 53 </TestAction> 54 54 <LaunchAction 55 - buildConfiguration = "debug" 55 + buildConfiguration = "release" 56 56 selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" 57 57 selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" 58 58 launchStyle = "0"
+23
docs/mobile.md
··· 741 741 3. Database is being created in the App Group container, not the app sandbox 742 742 4. Check database contents: `sqlite3 <path_to_peek.db> "SELECT * FROM urls;"` 743 743 744 + ### "Built for newer iOS version" Linker Warnings 745 + 746 + **Symptom:** Dozens of linker warnings like `Object file (libapp.a[...]) was built for newer 'iOS' version (26.2) than being linked (16.0)`. 747 + 748 + **Cause:** The Rust build compiled C objects (ring crypto, sqlite, AppGroupBridge) using the system SDK's default deployment target instead of the project's iOS 16.0 target. 749 + 750 + **Fix:** Both build scripts (`build-ios.sh` and `build-release.sh`) must set `export IPHONEOS_DEPLOYMENT_TARGET=16.0` before `cargo build`. This is already done — if warnings reappear, check that the env var is still present. 751 + 752 + ### Xcode Points at Wrong Workspace 753 + 754 + **Symptom:** Build fails with `search path '.../ios-fixes-XXXX/...' not found` or similar, pointing at an old/different jj workspace. 755 + 756 + **Cause:** Xcode's DerivedData caches `$(PROJECT_DIR)` from whichever workspace the project was first opened from. 757 + 758 + **Fix:** 759 + 1. Quit Xcode completely 760 + 2. Delete stale DerivedData: `rm -rf ~/Library/Developer/Xcode/DerivedData/peek-save-*` 761 + 3. Reopen from the correct workspace: `open backend/tauri-mobile/src-tauri/gen/apple/peek-save.xcodeproj` 762 + 763 + ### Xcode "Update to Recommended Settings" 764 + 765 + When Xcode prompts to update settings, accept all **except "Enable User Script Sandboxing"** — that would break the "Build Rust Code" run script phase which needs filesystem access outside the sandbox. 766 + 744 767 ## License 745 768 746 769 See LICENSE file.