Use atproto actions with ease in iOS shortcuts

readme and move to github links for forks instead of local

Changed files
+90 -29
at_toolbox.xcodeproj
project.xcworkspace
xcshareddata
+7 -1
README.md
··· 1 - # at_toolbox_opensource
··· 1 + # AT Toolbox 2 + 3 + ![An iOS icon of a toolbox with an @ in the middle](./shortcut/Assets.xcassets/AppIcon.appiconset/512.png) 4 + 5 + This is the source code for the [iOS app AT Toolbox](https://apps.apple.com/us/app/at-toolbox/id6747999688) as of release 1.0.4. The code is a bit rough in places and will not find much in the way of documentation. It is my first iOS app and I never expected to open source it. I am sharing this source code with the hope that it can help other atproto developers build iOS apps with swift. Things like maybe an app to backup your account to your phone? If you have any questions on it please feel free to reach out to me [@baileytownsend](https://bsky.app/profile/baileytownsend.dev). I'm not sure how often this repo will see updates, but I do plan on pushing things here and there if I think it can benefit the community as a whole. 6 + 7 + This repo does depend on two forks. Which is [fatfingers23/ATProtoKit](https://github.com/fatfingers23/ATProtoKit/tree/feature/UserSessionRegistryProtocol) and [fatfingers23/ATIdentityTools](https://github.com/fatfingers23/ATIdentityTools). The plan is to eventually merge these changes back up stream, but it has not happen yet.
+50 -13
at_toolbox.xcodeproj/project.pbxproj
··· 10 4B9388BE2E20B74C0067CD4B /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B9388BD2E20B74C0067CD4B /* StoreKit.framework */; }; 11 4B9E72CB2E255D7600DC1E77 /* AT Toolbox.storekit in Resources */ = {isa = PBXBuildFile; fileRef = 4B9E72CA2E255D7600DC1E77 /* AT Toolbox.storekit */; }; 12 4B9E72D82E25FAC300DC1E77 /* ZIPFoundation in Frameworks */ = {isa = PBXBuildFile; productRef = 4B9E72D72E25FAC300DC1E77 /* ZIPFoundation */; }; 13 4BC6D6712E0C810F00967DB4 /* ATMacro in Frameworks */ = {isa = PBXBuildFile; productRef = 4BC6D6702E0C810F00967DB4 /* ATMacro */; }; 14 4BC6D6732E0C810F00967DB4 /* ATProtoKit in Frameworks */ = {isa = PBXBuildFile; productRef = 4BC6D6722E0C810F00967DB4 /* ATProtoKit */; }; 15 4BCBC0A12E0E0EC1003753C8 /* ATIdentityTools in Frameworks */ = {isa = PBXBuildFile; productRef = 4BCBC0A02E0E0EC1003753C8 /* ATIdentityTools */; }; ··· 81 4BC6D6712E0C810F00967DB4 /* ATMacro in Frameworks */, 82 4BCBC0A32E0E0EC1003753C8 /* DIDCore in Frameworks */, 83 4BCBC0A12E0E0EC1003753C8 /* ATIdentityTools in Frameworks */, 84 4B9388BE2E20B74C0067CD4B /* StoreKit.framework in Frameworks */, 85 4BC6D6732E0C810F00967DB4 /* ATProtoKit in Frameworks */, 86 4BDB7D1C2E16225900439106 /* Cache in Frameworks */, 87 4B9E72D82E25FAC300DC1E77 /* ZIPFoundation in Frameworks */, 88 ); 89 runOnlyForDeploymentPostprocessing = 0; 90 }; ··· 161 4BCBC0A22E0E0EC1003753C8 /* DIDCore */, 162 4BDB7D1B2E16225900439106 /* Cache */, 163 4B9E72D72E25FAC300DC1E77 /* ZIPFoundation */, 164 ); 165 productName = shortcut; 166 productReference = 4BBE4EE82E09F976009F9D3E /* shortcut.app */; ··· 245 mainGroup = 4BBE4EDF2E09F975009F9D3E; 246 minimizedProjectReferenceProxies = 1; 247 packageReferences = ( 248 - 4BC6D66F2E0C810F00967DB4 /* XCLocalSwiftPackageReference "../ATProtoKit" */, 249 - 4BCBC09F2E0E0EC1003753C8 /* XCLocalSwiftPackageReference "../ATIdentityTools" */, 250 4BDB7D1A2E16225900439106 /* XCRemoteSwiftPackageReference "Cache" */, 251 4B9E72D62E25FAC300DC1E77 /* XCRemoteSwiftPackageReference "ZIPFoundation" */, 252 ); 253 preferredProjectObjectVersion = 77; 254 productRefGroup = 4BBE4EE92E09F976009F9D3E /* Products */; ··· 623 }; 624 /* End XCConfigurationList section */ 625 626 - /* Begin XCLocalSwiftPackageReference section */ 627 - 4BC6D66F2E0C810F00967DB4 /* XCLocalSwiftPackageReference "../ATProtoKit" */ = { 628 - isa = XCLocalSwiftPackageReference; 629 - relativePath = ../ATProtoKit; 630 - }; 631 - 4BCBC09F2E0E0EC1003753C8 /* XCLocalSwiftPackageReference "../ATIdentityTools" */ = { 632 - isa = XCLocalSwiftPackageReference; 633 - relativePath = ../ATIdentityTools; 634 - }; 635 - /* End XCLocalSwiftPackageReference section */ 636 - 637 /* Begin XCRemoteSwiftPackageReference section */ 638 4B9E72D62E25FAC300DC1E77 /* XCRemoteSwiftPackageReference "ZIPFoundation" */ = { 639 isa = XCRemoteSwiftPackageReference; ··· 643 minimumVersion = 0.9.19; 644 }; 645 }; 646 4BDB7D1A2E16225900439106 /* XCRemoteSwiftPackageReference "Cache" */ = { 647 isa = XCRemoteSwiftPackageReference; 648 repositoryURL = "https://github.com/hyperoslo/Cache.git"; ··· 658 isa = XCSwiftPackageProductDependency; 659 package = 4B9E72D62E25FAC300DC1E77 /* XCRemoteSwiftPackageReference "ZIPFoundation" */; 660 productName = ZIPFoundation; 661 }; 662 4BC6D6702E0C810F00967DB4 /* ATMacro */ = { 663 isa = XCSwiftPackageProductDependency;
··· 10 4B9388BE2E20B74C0067CD4B /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4B9388BD2E20B74C0067CD4B /* StoreKit.framework */; }; 11 4B9E72CB2E255D7600DC1E77 /* AT Toolbox.storekit in Resources */ = {isa = PBXBuildFile; fileRef = 4B9E72CA2E255D7600DC1E77 /* AT Toolbox.storekit */; }; 12 4B9E72D82E25FAC300DC1E77 /* ZIPFoundation in Frameworks */ = {isa = PBXBuildFile; productRef = 4B9E72D72E25FAC300DC1E77 /* ZIPFoundation */; }; 13 + 4BC2E75C2E5D0E2F00003BF2 /* ATIdentityTools in Frameworks */ = {isa = PBXBuildFile; productRef = 4BC2E75B2E5D0E2F00003BF2 /* ATIdentityTools */; }; 14 + 4BC2E75E2E5D0E2F00003BF2 /* DIDCore in Frameworks */ = {isa = PBXBuildFile; productRef = 4BC2E75D2E5D0E2F00003BF2 /* DIDCore */; }; 15 + 4BC2E7612E5D0E9100003BF2 /* ATMacro in Frameworks */ = {isa = PBXBuildFile; productRef = 4BC2E7602E5D0E9100003BF2 /* ATMacro */; }; 16 + 4BC2E7632E5D0E9100003BF2 /* ATProtoKit in Frameworks */ = {isa = PBXBuildFile; productRef = 4BC2E7622E5D0E9100003BF2 /* ATProtoKit */; }; 17 4BC6D6712E0C810F00967DB4 /* ATMacro in Frameworks */ = {isa = PBXBuildFile; productRef = 4BC6D6702E0C810F00967DB4 /* ATMacro */; }; 18 4BC6D6732E0C810F00967DB4 /* ATProtoKit in Frameworks */ = {isa = PBXBuildFile; productRef = 4BC6D6722E0C810F00967DB4 /* ATProtoKit */; }; 19 4BCBC0A12E0E0EC1003753C8 /* ATIdentityTools in Frameworks */ = {isa = PBXBuildFile; productRef = 4BCBC0A02E0E0EC1003753C8 /* ATIdentityTools */; }; ··· 85 4BC6D6712E0C810F00967DB4 /* ATMacro in Frameworks */, 86 4BCBC0A32E0E0EC1003753C8 /* DIDCore in Frameworks */, 87 4BCBC0A12E0E0EC1003753C8 /* ATIdentityTools in Frameworks */, 88 + 4BC2E75E2E5D0E2F00003BF2 /* DIDCore in Frameworks */, 89 + 4BC2E7612E5D0E9100003BF2 /* ATMacro in Frameworks */, 90 4B9388BE2E20B74C0067CD4B /* StoreKit.framework in Frameworks */, 91 4BC6D6732E0C810F00967DB4 /* ATProtoKit in Frameworks */, 92 4BDB7D1C2E16225900439106 /* Cache in Frameworks */, 93 4B9E72D82E25FAC300DC1E77 /* ZIPFoundation in Frameworks */, 94 + 4BC2E75C2E5D0E2F00003BF2 /* ATIdentityTools in Frameworks */, 95 + 4BC2E7632E5D0E9100003BF2 /* ATProtoKit in Frameworks */, 96 ); 97 runOnlyForDeploymentPostprocessing = 0; 98 }; ··· 169 4BCBC0A22E0E0EC1003753C8 /* DIDCore */, 170 4BDB7D1B2E16225900439106 /* Cache */, 171 4B9E72D72E25FAC300DC1E77 /* ZIPFoundation */, 172 + 4BC2E75B2E5D0E2F00003BF2 /* ATIdentityTools */, 173 + 4BC2E75D2E5D0E2F00003BF2 /* DIDCore */, 174 + 4BC2E7602E5D0E9100003BF2 /* ATMacro */, 175 + 4BC2E7622E5D0E9100003BF2 /* ATProtoKit */, 176 ); 177 productName = shortcut; 178 productReference = 4BBE4EE82E09F976009F9D3E /* shortcut.app */; ··· 257 mainGroup = 4BBE4EDF2E09F975009F9D3E; 258 minimizedProjectReferenceProxies = 1; 259 packageReferences = ( 260 4BDB7D1A2E16225900439106 /* XCRemoteSwiftPackageReference "Cache" */, 261 4B9E72D62E25FAC300DC1E77 /* XCRemoteSwiftPackageReference "ZIPFoundation" */, 262 + 4BC2E75A2E5D0E2F00003BF2 /* XCRemoteSwiftPackageReference "ATIdentityTools" */, 263 + 4BC2E75F2E5D0E9100003BF2 /* XCRemoteSwiftPackageReference "ATProtoKit" */, 264 ); 265 preferredProjectObjectVersion = 77; 266 productRefGroup = 4BBE4EE92E09F976009F9D3E /* Products */; ··· 635 }; 636 /* End XCConfigurationList section */ 637 638 /* Begin XCRemoteSwiftPackageReference section */ 639 4B9E72D62E25FAC300DC1E77 /* XCRemoteSwiftPackageReference "ZIPFoundation" */ = { 640 isa = XCRemoteSwiftPackageReference; ··· 644 minimumVersion = 0.9.19; 645 }; 646 }; 647 + 4BC2E75A2E5D0E2F00003BF2 /* XCRemoteSwiftPackageReference "ATIdentityTools" */ = { 648 + isa = XCRemoteSwiftPackageReference; 649 + repositoryURL = "https://github.com/fatfingers23/ATIdentityTools.git"; 650 + requirement = { 651 + branch = main; 652 + kind = branch; 653 + }; 654 + }; 655 + 4BC2E75F2E5D0E9100003BF2 /* XCRemoteSwiftPackageReference "ATProtoKit" */ = { 656 + isa = XCRemoteSwiftPackageReference; 657 + repositoryURL = "https://github.com/fatfingers23/ATProtoKit.git"; 658 + requirement = { 659 + branch = feature/UserSessionRegistryProtocol; 660 + kind = branch; 661 + }; 662 + }; 663 4BDB7D1A2E16225900439106 /* XCRemoteSwiftPackageReference "Cache" */ = { 664 isa = XCRemoteSwiftPackageReference; 665 repositoryURL = "https://github.com/hyperoslo/Cache.git"; ··· 675 isa = XCSwiftPackageProductDependency; 676 package = 4B9E72D62E25FAC300DC1E77 /* XCRemoteSwiftPackageReference "ZIPFoundation" */; 677 productName = ZIPFoundation; 678 + }; 679 + 4BC2E75B2E5D0E2F00003BF2 /* ATIdentityTools */ = { 680 + isa = XCSwiftPackageProductDependency; 681 + package = 4BC2E75A2E5D0E2F00003BF2 /* XCRemoteSwiftPackageReference "ATIdentityTools" */; 682 + productName = ATIdentityTools; 683 + }; 684 + 4BC2E75D2E5D0E2F00003BF2 /* DIDCore */ = { 685 + isa = XCSwiftPackageProductDependency; 686 + package = 4BC2E75A2E5D0E2F00003BF2 /* XCRemoteSwiftPackageReference "ATIdentityTools" */; 687 + productName = DIDCore; 688 + }; 689 + 4BC2E7602E5D0E9100003BF2 /* ATMacro */ = { 690 + isa = XCSwiftPackageProductDependency; 691 + package = 4BC2E75F2E5D0E9100003BF2 /* XCRemoteSwiftPackageReference "ATProtoKit" */; 692 + productName = ATMacro; 693 + }; 694 + 4BC2E7622E5D0E9100003BF2 /* ATProtoKit */ = { 695 + isa = XCSwiftPackageProductDependency; 696 + package = 4BC2E75F2E5D0E9100003BF2 /* XCRemoteSwiftPackageReference "ATProtoKit" */; 697 + productName = ATProtoKit; 698 }; 699 4BC6D6702E0C810F00967DB4 /* ATMacro */ = { 700 isa = XCSwiftPackageProductDependency;
+33 -15
at_toolbox.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved
··· 1 { 2 - "originHash" : "a5fef376f4b110244116021a9a3613b013c5987eb3b56400cfd863e10bdd3095", 3 "pins" : [ 4 { 5 "identity" : "atcommontools", 6 "kind" : "remoteSourceControl", 7 "location" : "https://github.com/ATProtoKit/ATCommonTools.git", 8 "state" : { 9 - "revision" : "ca5eee7f09202699707cb249d411bbb2c7597986", 10 - "version" : "0.0.13" 11 } 12 }, 13 { ··· 15 "kind" : "remoteSourceControl", 16 "location" : "https://github.com/ATProtoKit/ATCryptography.git", 17 "state" : { 18 - "revision" : "51137acf84f6da1c3ff41b208733e7e3d4208a0d", 19 - "version" : "0.1.10" 20 } 21 }, 22 { ··· 24 "kind" : "remoteSourceControl", 25 "location" : "https://github.com/attaswift/BigInt.git", 26 "state" : { 27 - "revision" : "99c4b9fb0f52dc9182aee106b07c3d205583b98c", 28 - "version" : "5.6.0" 29 } 30 }, 31 { ··· 51 "kind" : "remoteSourceControl", 52 "location" : "https://github.com/apple/swift-asn1.git", 53 "state" : { 54 - "revision" : "a54383ada6cecde007d374f58f864e29370ba5c3", 55 - "version" : "1.3.2" 56 } 57 }, 58 { ··· 69 "kind" : "remoteSourceControl", 70 "location" : "https://github.com/MasterJ93/swift-cbor.git", 71 "state" : { 72 - "revision" : "640a30c0651d734f21b800b221c60feee6382e69", 73 - "version" : "0.0.5" 74 } 75 }, 76 { ··· 78 "kind" : "remoteSourceControl", 79 "location" : "https://github.com/apple/swift-crypto.git", 80 "state" : { 81 - "revision" : "e8d6eba1fef23ae5b359c46b03f7d94be2f41fed", 82 - "version" : "3.12.3" 83 } 84 }, 85 { ··· 87 "kind" : "remoteSourceControl", 88 "location" : "https://github.com/apple/swift-log.git", 89 "state" : { 90 - "revision" : "3d8596ed08bd13520157f0355e35caed215ffbfa", 91 - "version" : "1.6.3" 92 } 93 }, 94 {
··· 1 { 2 + "originHash" : "12743c0bb07048259462b8a3dfd3a0cc5aac174d35597fef9c1a0c89aa8fd81c", 3 "pins" : [ 4 { 5 "identity" : "atcommontools", 6 "kind" : "remoteSourceControl", 7 "location" : "https://github.com/ATProtoKit/ATCommonTools.git", 8 "state" : { 9 + "revision" : "b79cc284178dd4a8271e39b6610f96394cd7958c", 10 + "version" : "0.0.14" 11 } 12 }, 13 { ··· 15 "kind" : "remoteSourceControl", 16 "location" : "https://github.com/ATProtoKit/ATCryptography.git", 17 "state" : { 18 + "revision" : "b1b69232a4d980d55e4566acb5455f37397c2f60", 19 + "version" : "0.2.0" 20 + } 21 + }, 22 + { 23 + "identity" : "atidentitytools", 24 + "kind" : "remoteSourceControl", 25 + "location" : "https://github.com/fatfingers23/ATIdentityTools.git", 26 + "state" : { 27 + "branch" : "main", 28 + "revision" : "e97578f42982d417ad2fe2b5137c0d2cdf36aad8" 29 + } 30 + }, 31 + { 32 + "identity" : "atprotokit", 33 + "kind" : "remoteSourceControl", 34 + "location" : "https://github.com/fatfingers23/ATProtoKit.git", 35 + "state" : { 36 + "branch" : "feature/UserSessionRegistryProtocol", 37 + "revision" : "02f2ce39833d32a5007d3062055e6ab7aaa7725a" 38 } 39 }, 40 { ··· 42 "kind" : "remoteSourceControl", 43 "location" : "https://github.com/attaswift/BigInt.git", 44 "state" : { 45 + "revision" : "e07e00fa1fd435143a2dcf8b7eec9a7710b2fdfe", 46 + "version" : "5.7.0" 47 } 48 }, 49 { ··· 69 "kind" : "remoteSourceControl", 70 "location" : "https://github.com/apple/swift-asn1.git", 71 "state" : { 72 + "revision" : "f70225981241859eb4aa1a18a75531d26637c8cc", 73 + "version" : "1.4.0" 74 } 75 }, 76 { ··· 87 "kind" : "remoteSourceControl", 88 "location" : "https://github.com/MasterJ93/swift-cbor.git", 89 "state" : { 90 + "revision" : "7452e1d1dbfb99fa0baca7732cf199be1bfc7e7c", 91 + "version" : "0.0.8" 92 } 93 }, 94 { ··· 96 "kind" : "remoteSourceControl", 97 "location" : "https://github.com/apple/swift-crypto.git", 98 "state" : { 99 + "revision" : "334e682869394ee239a57dbe9262bff3cd9495bd", 100 + "version" : "3.14.0" 101 } 102 }, 103 { ··· 105 "kind" : "remoteSourceControl", 106 "location" : "https://github.com/apple/swift-log.git", 107 "state" : { 108 + "revision" : "ce592ae52f982c847a4efc0dd881cc9eb32d29f2", 109 + "version" : "1.6.4" 110 } 111 }, 112 {