diff --git a/Package.resolved b/Package.resolved index 2a6c92f0..ec7ba94c 100644 --- a/Package.resolved +++ b/Package.resolved @@ -3,10 +3,10 @@ { "identity" : "altsign", "kind" : "remoteSourceControl", - "location" : "https://github.com/SideStore/AltSign.git", + "location" : "https://github.com/SideStore/AltSign", "state" : { "branch" : "master", - "revision" : "7e0e7edcf8fbc44ac1e35da3e9030a297aa18b84" + "revision" : "b94d53372c62c2ecb1949b98bae1604d68162474" } }, { @@ -21,7 +21,7 @@ { "identity" : "down", "kind" : "remoteSourceControl", - "location" : "https://github.com/johnxnguyen/Down.git", + "location" : "https://github.com/johnxnguyen/Down", "state" : { "branch" : "master", "revision" : "e754ab1c80920dd51a8e08290c912ac1c2ac8b58" @@ -36,15 +36,6 @@ "version" : "4.2.2" } }, - { - "identity" : "launchatlogin", - "kind" : "remoteSourceControl", - "location" : "https://github.com/sindresorhus/LaunchAtLogin", - "state" : { - "revision" : "e8171b3e38a2816f579f58f3dac1522aa39efe41", - "version" : "4.2.0" - } - }, { "identity" : "nuke", "kind" : "remoteSourceControl", @@ -93,10 +84,10 @@ { "identity" : "sidekit", "kind" : "remoteSourceControl", - "location" : "https://github.com/SideStore/SideKit.git", + "location" : "https://github.com/SideStore/SideKit", "state" : { - "branch" : "main", - "revision" : "7ea34a09b52c104077dea8e0b90f8dc55d43b36b" + "revision" : "7ea34a09b52c104077dea8e0b90f8dc55d43b36b", + "version" : "0.1.0" } } ], diff --git a/Package.swift b/Package.swift index 6897dd7d..393eddac 100644 --- a/Package.swift +++ b/Package.swift @@ -71,16 +71,19 @@ let STATIC_LIBRARY = envBool("STATIC_LIBRARY") // ] let dependencies: [Package.Dependency] = [ - .package(url: "https://github.com/JoeMatt/Roxas", from: "1.2.2"), - .package(url: "https://github.com/johnxnguyen/Down", branch: "master"), - .package(url: "https://github.com/kean/Nuke", from: "7.0.0"), - .package(url: "https://github.com/kishikawakatsumi/KeychainAccess", from: "4.2.0"), -// .package(url: "https://github.com/krzyzanowskim/OpenSSL", from: "1.1.180"), - .package(url: "https://github.com/microsoft/appcenter-sdk-apple", from: "4.2.0"), - .package(url: "https://github.com/SideStore/AltSign", branch: "master"), - .package(url: "https://github.com/SideStore/SideKit", branch: "main"), - .package(url: "https://github.com/sindresorhus/LaunchAtLogin", from: "4.1.0"), - .package(url: "https://github.com/SwiftPackageIndex/SemanticVersion", from: "0.3.5"), + .package(url: "https://github.com/JoeMatt/Roxas", from: "1.2.2"), + .package(url: "https://github.com/johnxnguyen/Down", branch: "master"), + .package(url: "https://github.com/kean/Nuke", from: "7.0.0"), + .package(url: "https://github.com/kishikawakatsumi/KeychainAccess", from: "4.2.0"), + .package(url: "https://github.com/microsoft/appcenter-sdk-apple", from: "4.2.0"), + .package(url: "https://github.com/SideStore/AltSign", branch: "master"), + // .package(path: "../AltSign"), + + .package(url: "https://github.com/SideStore/SideKit", from: "0.1.0"), + // .package(path: "../SideKit"), + + // .package(url: "https://github.com/sindresorhus/LaunchAtLogin", from: "4.1.0"), + .package(url: "https://github.com/SwiftPackageIndex/SemanticVersion", from: "0.3.5"), ] // + dependencies_cargo let package = Package( @@ -90,73 +93,84 @@ let package = Package( .iOS(.v13), .tvOS(.v13), .macCatalyst(.v13), + .macOS(.v11), ], products: [ - .executable( - name: "SideStore", - targets: ["SideStore"]), - - .executable( - name: "SideWidget", - targets: ["SideWidget"]), + .executable( + name: "SideStore", + targets: ["SideStore"] + ), .executable( - name: "SideDaemon", - targets: ["SideDaemon"]), + name: "SideWidget", + targets: ["SideWidget"] + ), + + // .executable( + // name: "SideDaemon", + // targets: ["SideDaemon"]), .library(name: "EmotionalDamage", targets: ["EmotionalDamage"]), .library(name: "MiniMuxerSwift", targets: ["MiniMuxerSwift"]), - .library(name: "SideStoreCore", targets: ["SideStoreCore"]), + .library(name: "SideStoreCore", targets: ["SideStoreCore"]), + + .library(name: "libplist", type: .dynamic, targets: ["libplist"]), + .library(name: "libusbmuxd", type: .dynamic, targets: ["libusbmuxd"]), + .library(name: "libimobiledevice", type: .dynamic, targets: ["libimobiledevice"]), + .library(name: "libimobiledevice-glue", type: .dynamic, targets: ["libimobiledevice-glue"]), + ], dependencies: dependencies, targets: [ + // MARK: - SideStore - // MARK: - SideStore - .executableTarget( - name: "SideStore", - dependencies: [ - "SidePatcher", - "EmotionalDamage", - "MiniMuxerSwift", - "SideStoreCore", - "Shared", - .product(name: "Down", package: "Down"), - .product(name: "AltSign", package: "AltSign"), - .product(name: "Nuke", package: "Nuke"), - .product(name: "Roxas", package: "Roxas"), - .product(name: "RoxasUI", package: "Roxas"), - .product(name: "AppCenterAnalytics", package: "appcenter-sdk-apple"), - .product(name: "AppCenterCrashes", package: "appcenter-sdk-apple") - ], - linkerSettings: [ - .linkedFramework("UIKit"), - .linkedFramework("Avfoundation"), - .linkedFramework("Combine"), - .linkedFramework("AppleArchive"), - .linkedFramework("Network"), - .linkedFramework("CoreData"), - .linkedFramework("UniformTypeIdentifiers"), - .linkedFramework("QuickLook", .when(platforms: [.iOS, .macCatalyst])), - .linkedFramework("AuthenticationServices", .when(platforms: [.iOS, .macCatalyst])), - .linkedFramework("SafariServices", .when(platforms: [.iOS, .macCatalyst])), - .linkedFramework("Intents", .when(platforms: [.iOS, .macCatalyst])), - .linkedFramework("IntentsUI", .when(platforms: [.iOS, .macCatalyst])), - .linkedFramework("MessageUI", .when(platforms: [.iOS, .macCatalyst])), - .linkedFramework("ARKit", .when(platforms: [.iOS, .macCatalyst])), - .linkedFramework("CoreHaptics", .when(platforms: [.iOS, .macCatalyst])), - .linkedFramework("AudioToolbox", .when(platforms: [.iOS, .macCatalyst])), - .linkedFramework("WidgetKit", .when(platforms: [.iOS, .macCatalyst])), - .linkedFramework("UserNotifications", .when(platforms: [.iOS, .macCatalyst])), - .linkedFramework("MobileCoreServices", .when(platforms: [.iOS, .macCatalyst])), - ] - ), + .executableTarget( + name: "SideStore", + dependencies: [ + "SidePatcher", + "EmotionalDamage", + "MiniMuxerSwift", + "SideStoreCore", + "Shared", + "Nuke", + "Down", + "AltSign", + "SideKit", + .product(name: "Roxas", package: "Roxas"), + .product(name: "RoxasUI", package: "Roxas"), + .product(name: "AppCenterAnalytics", package: "appcenter-sdk-apple"), + .product(name: "AppCenterCrashes", package: "appcenter-sdk-apple"), + ], + linkerSettings: [ + .linkedFramework("UIKit"), + .linkedFramework("Avfoundation"), + .linkedFramework("Combine"), + .linkedFramework("AppleArchive"), + .linkedFramework("Network"), + .linkedFramework("CoreData"), + .linkedFramework("UniformTypeIdentifiers"), + .linkedFramework("QuickLook", .when(platforms: [.iOS, .macCatalyst])), + .linkedFramework("AuthenticationServices", .when(platforms: [.iOS, .macCatalyst])), + .linkedFramework("SafariServices", .when(platforms: [.iOS, .macCatalyst])), + .linkedFramework("Intents", .when(platforms: [.iOS, .macCatalyst])), + .linkedFramework("IntentsUI", .when(platforms: [.iOS, .macCatalyst])), + .linkedFramework("MessageUI", .when(platforms: [.iOS, .macCatalyst])), + .linkedFramework("ARKit", .when(platforms: [.iOS, .macCatalyst])), + .linkedFramework("CoreHaptics", .when(platforms: [.iOS, .macCatalyst])), + .linkedFramework("AudioToolbox", .when(platforms: [.iOS, .macCatalyst])), + .linkedFramework("WidgetKit", .when(platforms: [.iOS, .macCatalyst])), + .linkedFramework("UserNotifications", .when(platforms: [.iOS, .macCatalyst])), + .linkedFramework("MobileCoreServices", .when(platforms: [.iOS, .macCatalyst])), + ] + ), - // MARK: - SideWidget - .executableTarget( - name: "SideWidget" - ), + // MARK: - SideWidget + + .executableTarget( + name: "SideWidget" + ), // MARK: - EmotionalDamage @@ -175,28 +189,31 @@ let package = Package( dependencies: ["EmotionalDamage"] ), - // MARK: - SidePatcher + // MARK: - SidePatcher - .target( - name: "SidePatcher", - dependencies: [ - .product(name: "Roxas", package: "Roxas"), - .product(name: "RoxasUI", package: "Roxas"), - ] - ), + .target( + name: "SidePatcher", + dependencies: [ + .product(name: "Roxas", package: "Roxas"), + .product(name: "RoxasUI", package: "Roxas"), + ] + ), - .testTarget( - name: "SidePatcherTests", - dependencies: ["SidePatcher"] - ), + .testTarget( + name: "SidePatcherTests", + dependencies: ["SidePatcher"] + ), // MARK: - MiniMuxer .target( name: "MiniMuxerSwift", - dependencies: ["minimuxer"], + dependencies: [ + "minimuxer", + "libimobiledevice", + ], cSettings: [ -// .headerSearchPath("Dependencies/minimuxer/include"), + // .headerSearchPath("Dependencies/minimuxer/include"), ], cxxSettings: [ ], @@ -220,12 +237,19 @@ let package = Package( .target( name: "Shared", - dependencies: ["SideKit"] + dependencies: [ + "SideKit", + "AltSign", + ] ), .testTarget( name: "SharedTests", - dependencies: ["Shared"] + dependencies: [ + "Shared", + "SideKit", + "AltSign", + ] ), // MARK: - SideBackup @@ -237,112 +261,251 @@ let package = Package( // MARK: - SideDaemon - .executableTarget( - name: "SideDaemon", - dependencies: [ - "Shared", - .product(name: "AltSign", package: "AltSign"), - .product(name: "LaunchAtLogin", package: "LaunchAtLogin"), - ] - ), - - .testTarget( - name: "SideDaemonTests", - dependencies: ["SideDaemon"] - ), + // .executableTarget( + // name: "SideDaemon", + // dependencies: [ + // "Shared", + // .product(name: "SideKit", package: "SideKit"), + // .product(name: "AltSign", package: "AltSign"), + // .product(name: "CoreCrypto", package: "AltSign"), + // .product(name: "CCoreCrypto", package: "AltSign"), + // .product(name: "LaunchAtLogin", package: "LaunchAtLogin"), + // ] + // ), + // + // .testTarget( + // name: "SideDaemonTests", + // dependencies: ["SideDaemon"] + // ), // MARK: - SideStoreCore .target( name: "SideStoreCore", dependencies: [ - "Shared", - .product(name: "Roxas", package: "Roxas"), - .product(name: "AltSign", package: "AltSign"), - .product(name: "KeychainAccess", package: "KeychainAccess"), - .product(name: "SemanticVersion", package: "SemanticVersion"), - ], - swiftSettings: [ - .unsafeFlags([ -// "--xcconfig-overrides", "AltStoreCore.xconfig" - ]) - ] + "Shared", + "KeychainAccess", + "AltSign", + "SemanticVersion", + .product(name: "Roxas", package: "Roxas"), + ] + // swiftSettings: [ + // .unsafeFlags([ + //// "--xcconfig-overrides", "AltStoreCore.xconfig" + // ]) + // ] ), .testTarget( name: "SideStoreCoreTests", - dependencies: ["SideStoreCore"] + dependencies: [ + "SideStoreCore", + ] ), - // MARK: - libfragmentzip - .target( - name: "libfragmentzip", - dependencies: [], - sources: [ - "libfragmentzip-source/libfragmentzip/libfragmentzip.c" + // MARK: - libfragmentzip + + .target( + name: "libfragmentzip", + dependencies: [], + sources: [ + "libfragmentzip-source/libfragmentzip/libfragmentzip.c", + ], + cSettings: [ + .headerSearchPath("libfragmentzip-source/libfragmentzip/include"), + ] + ), + + .testTarget( + name: "libfragmentzipTests", + dependencies: ["libfragmentzip"] + ), + + // MARK: - libmobiledevice + + .target( + name: "libimobiledevice", + dependencies: [ + "libimobiledevice-glue", + "libplist", + "libusbmuxd", + ], + path: "Sources/libimobiledevice/libimobiledevice/", + exclude: [ + "include/asprintf.h", + "include/Makefile.am", + "include/endianness.h", + ], + publicHeadersPath: "include/libimobiledevice/" + ), + + // MARK: libmobiledevice-glue + .target( + name: "libimobiledevice-glue", + dependencies: [ + "libplist" + ], + path: "Sources/libimobiledevice/libimobiledevice-glue/", + exclude: [ + "src/libimobiledevice-glue-1.0.pc.in", + "src/common.h" ], + publicHeadersPath: "include", cSettings: [ - .headerSearchPath("libfragmentzip-source/libfragmentzip/include") + .headerSearchPath("include/"), + .headerSearchPath("../dependencies/libimobiledevice-glue/include"), + .headerSearchPath("../dependencies/libplist/include"), + .define("HAVE_OPENSSL"), + .define("HAVE_STPNCPY"), + .define("HAVE_STPCPY"), + .define("HAVE_VASPRINTF"), + .define("HAVE_ASPRINTF"), + .define("PACKAGE_STRING", to: "\"AltServer 1.0\""), + .define("HAVE_GETIFADDRS"), + .define("HAVE_STRNDUP"), + .unsafeFlags([ + "-w" + ]) + ], + cxxSettings: [ + .headerSearchPath("include/"), + .headerSearchPath("../dependencies/libimobiledevice-glue/include"), + .headerSearchPath("../dependencies/libplist/include"), + .define("HAVE_OPENSSL"), + .define("HAVE_STPNCPY"), + .define("HAVE_STPCPY"), + .define("HAVE_VASPRINTF"), + .define("HAVE_ASPRINTF"), + .define("PACKAGE_STRING", to: "\"AltServer 1.0\""), + .define("HAVE_GETIFADDRS"), + .define("HAVE_STRNDUP"), + .unsafeFlags([ + "-w", + "-Wno-module-import-in-extern-c" + ]) ] - ), + ), - .testTarget( - name: "libfragmentzipTests", - dependencies: ["libfragmentzip"] - ), + // MARK: libplist - // MARK: - libmobiledevice - .target( - name: "libimobiledevice", - dependencies: [ - "libimobiledevice-glue", + .target( + name: "libplist", + dependencies: [ + ], + path: "Sources/libimobiledevice/libplist/", + sources: [ + "src/base64.c", + "src/bplist.c", + "src/bytearray.c", + "src/hashtable.c", + "src/plist.c", + "src/ptrarray.c", + "src/time64.c", + "src/xplist.c", + "src/Array.cpp", + "src/Boolean.cpp", + "src/Data.cpp", + "src/Date.cpp", + "src/Dictionary.cpp", + "src/Integer.cpp", + "src/Key.cpp", + "src/Node.cpp", + "src/Real.cpp", + "src/String.cpp", + "src/Structure.cpp", + "src/Uid.cpp", + "libcnary/node.c", + "libcnary/node_list.c", + ], + publicHeadersPath: "include", + cSettings: [ + .headerSearchPath("include/"), + .headerSearchPath("../dependencies/libplist/include"), +// .headerSearchPath("../dependencies/libplist/libcnary/include"), + .define("HAVE_OPENSSL"), + .define("HAVE_STPNCPY"), + .define("HAVE_STPCPY"), + .define("HAVE_VASPRINTF"), + .define("HAVE_ASPRINTF"), + .define("PACKAGE_STRING", to: "\"AltServer 1.0\""), + .define("HAVE_GETIFADDRS"), + .define("HAVE_STRNDUP"), + .unsafeFlags([ + "-w" + ]) + ], + cxxSettings: [ + .headerSearchPath("include/"), + .headerSearchPath("../dependencies/libplist/include"), + .headerSearchPath("../dependencies/libplist/libcnary/include"), + .define("HAVE_OPENSSL"), + .define("HAVE_STPNCPY"), + .define("HAVE_STPCPY"), + .define("HAVE_VASPRINTF"), + .define("HAVE_ASPRINTF"), + .define("PACKAGE_STRING", to: "\"AltServer 1.0\""), + .define("HAVE_GETIFADDRS"), + .define("HAVE_STRNDUP"), + .unsafeFlags([ + "-w", + "-Wno-module-import-in-extern-c" + ]) + ] + ), + + // MARK: libusbmuxd + + .target( + name: "libusbmuxd", + dependencies: [ "libplist", - "libusbmuxd" - ], - path: "Sources/libimobiledevice/libimobiledevice/", - exclude: [ - "include/asprintf.h", - "include/Makefile.am", - "include/endianness.h" - ], - publicHeadersPath: "include/libimobiledevice/" - ), - .target( - name: "libimobiledevice-glue", - dependencies: [ - ], - path: "Sources/libimobiledevice/libimobiledevice-glue/", - exclude: [ - "include/Makefile.am", - "include/endianness.h" - ], - publicHeadersPath: "include/libimobiledevice-glue/" - ), - .target( - name: "libplist", - dependencies: [ - ], - path: "Sources/libimobiledevice/libplist/", - exclude: [ - "include/Makefile.am", - ], - publicHeadersPath: "include/plist" - ), - .target( - name: "libusbmuxd", - dependencies: [ - ], - path: "Sources/libimobiledevice/libusbmuxd/", - exclude: [ - "include/Makefile.am", - "include/usbmuxd-proto.h" - ], - publicHeadersPath: "include" - ), + "libimobiledevice-glue" + ], + path: "Sources/libimobiledevice/libusbmuxd/", + sources: [ + "src/libusbmuxd.c", + ], + publicHeadersPath: "include", + cSettings: [ + .headerSearchPath("../dependencies/libplist/include"), + .headerSearchPath("../dependencies/libplist/libcnary/include"), + .headerSearchPath("../dependencies/libusbmuxd/include"), + .headerSearchPath("../dependencies/libimobiledevice-glue/include/libimobiledevice-glue/"), + .define("HAVE_OPENSSL"), + .define("HAVE_STPNCPY"), + .define("HAVE_STPCPY"), + .define("HAVE_VASPRINTF"), + .define("HAVE_ASPRINTF"), + .define("PACKAGE_STRING", to: "\"AltServer 1.0\""), + .define("HAVE_GETIFADDRS"), + .define("HAVE_STRNDUP"), + .unsafeFlags([ + "-w" + ]) + ], + cxxSettings: [ + .headerSearchPath("../dependencies/libplist/include"), + .headerSearchPath("../dependencies/libplist/libcnary/include"), + .headerSearchPath("../dependencies/libusbmuxd/include"), + .headerSearchPath("../dependencies/libimobiledevice-glue/include/libimobiledevice-glue/"), + .define("HAVE_OPENSSL"), + .define("HAVE_STPNCPY"), + .define("HAVE_STPCPY"), + .define("HAVE_VASPRINTF"), + .define("HAVE_ASPRINTF"), + .define("PACKAGE_STRING", to: "\"AltServer 1.0\""), + .define("HAVE_GETIFADDRS"), + .define("HAVE_STRNDUP"), + .unsafeFlags([ + "-w", + "-Wno-module-import-in-extern-c" + ]) + ] + ), ], swiftLanguageVersions: [.v5], - cLanguageStandard: .c2x, - cxxLanguageStandard: .cxx20 + cLanguageStandard: .gnu11, + cxxLanguageStandard: .gnucxx14 ) // MARK: - Helpers diff --git a/SideStore.xcodeproj/project.pbxproj b/SideStore.xcodeproj/project.pbxproj index 9928b18d..02edb2d8 100644 --- a/SideStore.xcodeproj/project.pbxproj +++ b/SideStore.xcodeproj/project.pbxproj @@ -1114,7 +1114,7 @@ B3CD312529AF8B6D00374AF8 /* libusbmuxd */, ); name = libimobiledevice; - path = Sources/libmobiledevice; + path = Sources/libimobiledevice; sourceTree = ""; }; BF56D2AD23DF9E170006506D /* App IDs */ = { @@ -2498,16 +2498,12 @@ ); GCC_WARN_INHIBIT_ALL_WARNINGS = YES; HEADER_SEARCH_PATHS = ( - "\"$(SRCROOT)/Dependencies/libplist/include\"", - "\"$(SRCROOT)/Dependencies/libimobiledevice\"", - "\"$(SRCROOT)/Dependencies/libimobiledevice/include\"", - "\"$(SRCROOT)/Dependencies/AltSign/Dependencies/OpenSSL/macosx/include\"", - "\"$(SRCROOT)/Dependencies/libusbmuxd/include\"", - "\"$(SRCROOT)/Dependencies/AltSign/Dependencies/libzip/lib\"", - "\"$(SRCROOT)/Dependencies/libplist/libcnary/include\"", - "\"${SDKROOT}/usr/include/libxml2\"", - "\"$(SRCROOT)/Dependencies/AltSign/Dependencies/libzip/xcode\"", - "\"$(SRCROOT)/Dependencies/libimobiledevice-glue/include\"/**", + "\"$(SRCROOT)/Sources/libimobiledevice/dependencies/libplist/include\"", + "\"$(SRCROOT)/Sources/libimobiledevice/dependencies/libimobiledevice\"", + "\"$(SRCROOT)/Sources/libimobiledevice/dependencies/libimobiledevice/include\"", + "\"$(SRCROOT)/Sources/libimobiledevice/dependencies/libusbmuxd/include\"", + "\"$(SRCROOT)/Sources/libimobiledevice/dependencies/libplist/libcnary/include\"", + "\"$(SRCROOT)/Sources/libimobiledevice/dependencies/libimobiledevice-glue/include\"/**", ); MACOSX_DEPLOYMENT_TARGET = 10.14; PRODUCT_NAME = imobiledevice; @@ -2538,16 +2534,12 @@ ); GCC_WARN_INHIBIT_ALL_WARNINGS = YES; HEADER_SEARCH_PATHS = ( - "\"$(SRCROOT)/Dependencies/libplist/include\"", - "\"$(SRCROOT)/Dependencies/libimobiledevice\"", - "\"$(SRCROOT)/Dependencies/libimobiledevice/include\"", - "\"$(SRCROOT)/Dependencies/AltSign/Dependencies/OpenSSL/macosx/include\"", - "\"$(SRCROOT)/Dependencies/libusbmuxd/include\"", - "\"$(SRCROOT)/Dependencies/AltSign/Dependencies/libzip/lib\"", - "\"$(SRCROOT)/Dependencies/libplist/libcnary/include\"", - "\"${SDKROOT}/usr/include/libxml2\"", - "\"$(SRCROOT)/Dependencies/AltSign/Dependencies/libzip/xcode\"", - "\"$(SRCROOT)/Dependencies/libimobiledevice-glue/include\"/**", + "\"$(SRCROOT)/Sources/libimobiledevice/dependencies/libplist/include\"", + "\"$(SRCROOT)/Sources/libimobiledevice/dependencies/libimobiledevice\"", + "\"$(SRCROOT)/Sources/libimobiledevice/dependencies/libimobiledevice/include\"", + "\"$(SRCROOT)/Sources/libimobiledevice/dependencies/libusbmuxd/include\"", + "\"$(SRCROOT)/Sources/libimobiledevice/dependencies/libplist/libcnary/include\"", + "\"$(SRCROOT)/Sources/libimobiledevice/dependencies/libimobiledevice-glue/include\"/**", ); MACOSX_DEPLOYMENT_TARGET = 10.14; PRODUCT_NAME = imobiledevice; diff --git a/SideStore.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/SideStore.xcodeproj/project.xcworkspace/contents.xcworkspacedata index 738cd165..919434a6 100644 --- a/SideStore.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ b/SideStore.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -2,6 +2,6 @@ + location = "self:"> diff --git a/Sources/Shared/Connections/ConnectionManager.swift b/Sources/Shared/Connections/ConnectionManager.swift index 4aed73d1..f2ab04ac 100644 --- a/Sources/Shared/Connections/ConnectionManager.swift +++ b/Sources/Shared/Connections/ConnectionManager.swift @@ -5,7 +5,7 @@ // Created by Riley Testut on 5/23/19. // Copyright © 2019 Riley Testut. All rights reserved. // -#if false + import Foundation import Network import SideKit @@ -156,4 +156,3 @@ private extension ConnectionManager { } } } -#endif diff --git a/Sources/Shared/Connections/ServerProtocol.swift b/Sources/Shared/Connections/ServerProtocol.swift new file mode 100644 index 00000000..bf171131 --- /dev/null +++ b/Sources/Shared/Connections/ServerProtocol.swift @@ -0,0 +1,468 @@ +// +// ServerProtocol.swift +// AltServer +// +// Created by Riley Testut on 5/24/19. +// Copyright © 2019 Riley Testut. All rights reserved. +// + +import Foundation +import AltSign +import SideKit + +public let ALTServerServiceType = "_altserver._tcp" + +protocol ServerMessageProtocol: Codable +{ + var version: Int { get } + var identifier: String { get } +} + +public enum ServerRequest: Decodable +{ + case anisetteData(AnisetteDataRequest) + case prepareApp(PrepareAppRequest) + case beginInstallation(BeginInstallationRequest) + case installProvisioningProfiles(InstallProvisioningProfilesRequest) + case removeProvisioningProfiles(RemoveProvisioningProfilesRequest) + case removeApp(RemoveAppRequest) + case enableUnsignedCodeExecution(EnableUnsignedCodeExecutionRequest) + case unknown(identifier: String, version: Int) + + var identifier: String { + switch self + { + case .anisetteData(let request): return request.identifier + case .prepareApp(let request): return request.identifier + case .beginInstallation(let request): return request.identifier + case .installProvisioningProfiles(let request): return request.identifier + case .removeProvisioningProfiles(let request): return request.identifier + case .removeApp(let request): return request.identifier + case .enableUnsignedCodeExecution(let request): return request.identifier + case .unknown(let identifier, _): return identifier + } + } + + var version: Int { + switch self + { + case .anisetteData(let request): return request.version + case .prepareApp(let request): return request.version + case .beginInstallation(let request): return request.version + case .installProvisioningProfiles(let request): return request.version + case .removeProvisioningProfiles(let request): return request.version + case .removeApp(let request): return request.version + case .enableUnsignedCodeExecution(let request): return request.version + case .unknown(_, let version): return version + } + } + + private enum CodingKeys: String, CodingKey + { + case identifier + case version + } + + public init(from decoder: Decoder) throws + { + let container = try decoder.container(keyedBy: CodingKeys.self) + + let version = try container.decode(Int.self, forKey: .version) + + let identifier = try container.decode(String.self, forKey: .identifier) + switch identifier + { + case "AnisetteDataRequest": + let request = try AnisetteDataRequest(from: decoder) + self = .anisetteData(request) + + case "PrepareAppRequest": + let request = try PrepareAppRequest(from: decoder) + self = .prepareApp(request) + + case "BeginInstallationRequest": + let request = try BeginInstallationRequest(from: decoder) + self = .beginInstallation(request) + + case "InstallProvisioningProfilesRequest": + let request = try InstallProvisioningProfilesRequest(from: decoder) + self = .installProvisioningProfiles(request) + + case "RemoveProvisioningProfilesRequest": + let request = try RemoveProvisioningProfilesRequest(from: decoder) + self = .removeProvisioningProfiles(request) + + case "RemoveAppRequest": + let request = try RemoveAppRequest(from: decoder) + self = .removeApp(request) + + case "EnableUnsignedCodeExecutionRequest": + let request = try EnableUnsignedCodeExecutionRequest(from: decoder) + self = .enableUnsignedCodeExecution(request) + + default: + self = .unknown(identifier: identifier, version: version) + } + } +} + +public enum ServerResponse: Decodable +{ + case anisetteData(AnisetteDataResponse) + case installationProgress(InstallationProgressResponse) + case installProvisioningProfiles(InstallProvisioningProfilesResponse) + case removeProvisioningProfiles(RemoveProvisioningProfilesResponse) + case removeApp(RemoveAppResponse) + case enableUnsignedCodeExecution(EnableUnsignedCodeExecutionResponse) + case error(ErrorResponse) + case unknown(identifier: String, version: Int) + + var identifier: String { + switch self + { + case .anisetteData(let response): return response.identifier + case .installationProgress(let response): return response.identifier + case .installProvisioningProfiles(let response): return response.identifier + case .removeProvisioningProfiles(let response): return response.identifier + case .removeApp(let response): return response.identifier + case .enableUnsignedCodeExecution(let response): return response.identifier + case .error(let response): return response.identifier + case .unknown(let identifier, _): return identifier + } + } + + var version: Int { + switch self + { + case .anisetteData(let response): return response.version + case .installationProgress(let response): return response.version + case .installProvisioningProfiles(let response): return response.version + case .removeProvisioningProfiles(let response): return response.version + case .removeApp(let response): return response.version + case .enableUnsignedCodeExecution(let response): return response.version + case .error(let response): return response.version + case .unknown(_, let version): return version + } + } + + private enum CodingKeys: String, CodingKey + { + case identifier + case version + } + + public init(from decoder: Decoder) throws + { + let container = try decoder.container(keyedBy: CodingKeys.self) + + let version = try container.decode(Int.self, forKey: .version) + + let identifier = try container.decode(String.self, forKey: .identifier) + switch identifier + { + case "AnisetteDataResponse": + let response = try AnisetteDataResponse(from: decoder) + self = .anisetteData(response) + + case "InstallationProgressResponse": + let response = try InstallationProgressResponse(from: decoder) + self = .installationProgress(response) + + case "InstallProvisioningProfilesResponse": + let response = try InstallProvisioningProfilesResponse(from: decoder) + self = .installProvisioningProfiles(response) + + case "RemoveProvisioningProfilesResponse": + let response = try RemoveProvisioningProfilesResponse(from: decoder) + self = .removeProvisioningProfiles(response) + + case "RemoveAppResponse": + let response = try RemoveAppResponse(from: decoder) + self = .removeApp(response) + + case "EnableUnsignedCodeExecutionResponse": + let response = try EnableUnsignedCodeExecutionResponse(from: decoder) + self = .enableUnsignedCodeExecution(response) + + case "ErrorResponse": + let response = try ErrorResponse(from: decoder) + self = .error(response) + + default: + self = .unknown(identifier: identifier, version: version) + } + } +} + +// _Don't_ provide generic SuccessResponse, as that would prevent us +// from easily changing response format for a request in the future. +public struct ErrorResponse: ServerMessageProtocol +{ + public var version = 2 + public var identifier = "ErrorResponse" + + public var error: ALTServerError { + return (self.serverError?.underlyingError as? ALTServerError)! + } + private var serverError: ALTServerError? + + // Legacy (v1) + private var errorCode: ALTServerError.RawValue + + public init(error: ALTServerError) + { + self.serverError = ALTServerError(error) + self.errorCode = error.errorCode + } +} + +public struct AnisetteDataRequest: ServerMessageProtocol +{ + public var version = 1 + public var identifier = "AnisetteDataRequest" + + public init() + { + } +} + +public struct AnisetteDataResponse: ServerMessageProtocol +{ + public var version = 1 + public var identifier = "AnisetteDataResponse" + + public var anisetteData: ALTAnisetteData + + private enum CodingKeys: String, CodingKey + { + case identifier + case version + case anisetteData + } + + public init(anisetteData: ALTAnisetteData) + { + self.anisetteData = anisetteData + } + + public init(from decoder: Decoder) throws + { + let container = try decoder.container(keyedBy: CodingKeys.self) + self.version = try container.decode(Int.self, forKey: .version) + self.identifier = try container.decode(String.self, forKey: .identifier) + + let json = try container.decode([String: String].self, forKey: .anisetteData) + +// if let anisetteData = ALTAnisetteData() //(json: json) +// { +// self.anisetteData = anisetteData +// } +// else +// { + throw DecodingError.dataCorruptedError(forKey: CodingKeys.anisetteData, in: container, debugDescription: "Couuld not parse anisette data from JSON") +// } + } + + public func encode(to encoder: Encoder) throws + { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(self.version, forKey: .version) + try container.encode(self.identifier, forKey: .identifier) + +// let json = self.anisetteData.json() +// try container.encode(json, forKey: .anisetteData) + } +} + +public struct PrepareAppRequest: ServerMessageProtocol +{ + public var version = 1 + public var identifier = "PrepareAppRequest" + + public var udid: String + public var contentSize: Int + + public var fileURL: URL? + + public init(udid: String, contentSize: Int, fileURL: URL? = nil) + { + self.udid = udid + self.contentSize = contentSize + self.fileURL = fileURL + } +} + +public struct BeginInstallationRequest: ServerMessageProtocol +{ + public var version = 3 + public var identifier = "BeginInstallationRequest" + + // If activeProfiles is non-nil, then AltServer should remove all profiles except active ones. + public var activeProfiles: Set? + + public var bundleIdentifier: String? + + public init(activeProfiles: Set?, bundleIdentifier: String?) + { + self.activeProfiles = activeProfiles + self.bundleIdentifier = bundleIdentifier + } +} + +public struct InstallationProgressResponse: ServerMessageProtocol +{ + public var version = 1 + public var identifier = "InstallationProgressResponse" + + public var progress: Double + + public init(progress: Double) + { + self.progress = progress + } +} + +public struct InstallProvisioningProfilesRequest: ServerMessageProtocol +{ + public var version = 1 + public var identifier = "InstallProvisioningProfilesRequest" + + public var udid: String + public var provisioningProfiles: Set + + // If activeProfiles is non-nil, then AltServer should remove all profiles except active ones. + public var activeProfiles: Set? + + private enum CodingKeys: String, CodingKey + { + case identifier + case version + case udid + case provisioningProfiles + case activeProfiles + } + + public init(udid: String, provisioningProfiles: Set, activeProfiles: Set?) + { + self.udid = udid + self.provisioningProfiles = provisioningProfiles + self.activeProfiles = activeProfiles + } + + public init(from decoder: Decoder) throws + { + let container = try decoder.container(keyedBy: CodingKeys.self) + self.version = try container.decode(Int.self, forKey: .version) + self.identifier = try container.decode(String.self, forKey: .identifier) + self.udid = try container.decode(String.self, forKey: .udid) + + let rawProvisioningProfiles = try container.decode([Data].self, forKey: .provisioningProfiles) + let provisioningProfiles = try rawProvisioningProfiles.map { (data) -> ALTProvisioningProfile in + guard let profile = ALTProvisioningProfile(data: data) else { + throw DecodingError.dataCorruptedError(forKey: CodingKeys.provisioningProfiles, in: container, debugDescription: "Could not parse provisioning profile from data.") + } + return profile + } + + self.provisioningProfiles = Set(provisioningProfiles) + self.activeProfiles = try container.decodeIfPresent(Set.self, forKey: .activeProfiles) + } + + public func encode(to encoder: Encoder) throws + { + var container = encoder.container(keyedBy: CodingKeys.self) + try container.encode(self.version, forKey: .version) + try container.encode(self.identifier, forKey: .identifier) + try container.encode(self.udid, forKey: .udid) + + try container.encode(self.provisioningProfiles.map { $0.data }, forKey: .provisioningProfiles) + try container.encodeIfPresent(self.activeProfiles, forKey: .activeProfiles) + } +} + +public struct InstallProvisioningProfilesResponse: ServerMessageProtocol +{ + public var version = 1 + public var identifier = "InstallProvisioningProfilesResponse" + + public init() + { + } +} + +public struct RemoveProvisioningProfilesRequest: ServerMessageProtocol +{ + public var version = 1 + public var identifier = "RemoveProvisioningProfilesRequest" + + public var udid: String + public var bundleIdentifiers: Set + + public init(udid: String, bundleIdentifiers: Set) + { + self.udid = udid + self.bundleIdentifiers = bundleIdentifiers + } +} + +public struct RemoveProvisioningProfilesResponse: ServerMessageProtocol +{ + public var version = 1 + public var identifier = "RemoveProvisioningProfilesResponse" + + public init() + { + } +} + +public struct RemoveAppRequest: ServerMessageProtocol +{ + public var version = 1 + public var identifier = "RemoveAppRequest" + + public var udid: String + public var bundleIdentifier: String + + public init(udid: String, bundleIdentifier: String) + { + self.udid = udid + self.bundleIdentifier = bundleIdentifier + } +} + +public struct RemoveAppResponse: ServerMessageProtocol +{ + public var version = 1 + public var identifier = "RemoveAppResponse" + + public init() + { + } +} + +public struct EnableUnsignedCodeExecutionRequest: ServerMessageProtocol +{ + public var version = 1 + public var identifier = "EnableUnsignedCodeExecutionRequest" + + public var udid: String + public var processID: Int? + public var processName: String? + + public init(udid: String, processID: Int? = nil, processName: String? = nil) + { + self.udid = udid + self.processID = processID + self.processName = processName + } +} + +public struct EnableUnsignedCodeExecutionResponse: ServerMessageProtocol +{ + public var version = 1 + public var identifier = "EnableUnsignedCodeExecutionResponse" + + public init() + { + } +} diff --git a/Sources/SideDaemon/DaemonRequestHandler.swift b/Sources/SideDaemon/DaemonRequestHandler.swift index 45ffabdd..cb67accc 100644 --- a/Sources/SideDaemon/DaemonRequestHandler.swift +++ b/Sources/SideDaemon/DaemonRequestHandler.swift @@ -7,6 +7,8 @@ // import Foundation +import Shared +import SideKit typealias DaemonConnectionManager = ConnectionManager diff --git a/Sources/SideStoreCore/Intents/ViewAppIntentHandler.swift b/Sources/SideStore/Intents/ViewAppIntentHandler.swift similarity index 97% rename from Sources/SideStoreCore/Intents/ViewAppIntentHandler.swift rename to Sources/SideStore/Intents/ViewAppIntentHandler.swift index e8b2eb95..0afe910b 100644 --- a/Sources/SideStoreCore/Intents/ViewAppIntentHandler.swift +++ b/Sources/SideStore/Intents/ViewAppIntentHandler.swift @@ -6,7 +6,6 @@ // Copyright © 2020 Riley Testut. All rights reserved. // -import SideStoreCore import Intents @available(iOS 14, *) diff --git a/Sources/SideStore/Resources/Intents.intentdefinition b/Sources/SideStore/Resources/Intents/Intents.intentdefinition similarity index 100% rename from Sources/SideStore/Resources/Intents.intentdefinition rename to Sources/SideStore/Resources/Intents/Intents.intentdefinition diff --git a/Sources/SideStoreCore/Resources/Intents/ViewApp.intentdefinition b/Sources/SideStore/Resources/Intents/ViewApp.intentdefinition similarity index 100% rename from Sources/SideStoreCore/Resources/Intents/ViewApp.intentdefinition rename to Sources/SideStore/Resources/Intents/ViewApp.intentdefinition diff --git a/Sources/SideStore/Resources/Authentication.storyboard b/Sources/SideStore/Resources/Storyboards/Authentication.storyboard similarity index 100% rename from Sources/SideStore/Resources/Authentication.storyboard rename to Sources/SideStore/Resources/Storyboards/Authentication.storyboard diff --git a/Sources/SideStore/Resources/PatchApp.storyboard b/Sources/SideStore/Resources/Storyboards/PatchApp.storyboard similarity index 100% rename from Sources/SideStore/Resources/PatchApp.storyboard rename to Sources/SideStore/Resources/Storyboards/PatchApp.storyboard diff --git a/Sources/SideStore/Resources/Settings.storyboard b/Sources/SideStore/Resources/Storyboards/Settings.storyboard similarity index 100% rename from Sources/SideStore/Resources/Settings.storyboard rename to Sources/SideStore/Resources/Storyboards/Settings.storyboard diff --git a/Sources/SideStore/Resources/AboutPatreonHeaderView.xib b/Sources/SideStore/Resources/XIB/AboutPatreonHeaderView.xib similarity index 94% rename from Sources/SideStore/Resources/AboutPatreonHeaderView.xib rename to Sources/SideStore/Resources/XIB/AboutPatreonHeaderView.xib index ae57d9b7..9c137e56 100644 --- a/Sources/SideStore/Resources/AboutPatreonHeaderView.xib +++ b/Sources/SideStore/Resources/XIB/AboutPatreonHeaderView.xib @@ -1,9 +1,9 @@ - + - + @@ -53,13 +53,13 @@ - diff --git a/Sources/SideStore/Resources/AppBannerView.xib b/Sources/SideStore/Resources/XIB/AppBannerView.xib similarity index 100% rename from Sources/SideStore/Resources/AppBannerView.xib rename to Sources/SideStore/Resources/XIB/AppBannerView.xib diff --git a/Sources/SideStore/Resources/BrowseCollectionViewCell.xib b/Sources/SideStore/Resources/XIB/BrowseCollectionViewCell.xib similarity index 100% rename from Sources/SideStore/Resources/BrowseCollectionViewCell.xib rename to Sources/SideStore/Resources/XIB/BrowseCollectionViewCell.xib diff --git a/Sources/SideStore/Resources/InstalledAppsCollectionHeaderView.xib b/Sources/SideStore/Resources/XIB/InstalledAppsCollectionHeaderView.xib similarity index 100% rename from Sources/SideStore/Resources/InstalledAppsCollectionHeaderView.xib rename to Sources/SideStore/Resources/XIB/InstalledAppsCollectionHeaderView.xib diff --git a/Sources/SideStore/Resources/NewsCollectionViewCell.xib b/Sources/SideStore/Resources/XIB/NewsCollectionViewCell.xib similarity index 100% rename from Sources/SideStore/Resources/NewsCollectionViewCell.xib rename to Sources/SideStore/Resources/XIB/NewsCollectionViewCell.xib diff --git a/Sources/SideStore/Resources/SettingsHeaderFooterView.xib b/Sources/SideStore/Resources/XIB/SettingsHeaderFooterView.xib similarity index 100% rename from Sources/SideStore/Resources/SettingsHeaderFooterView.xib rename to Sources/SideStore/Resources/XIB/SettingsHeaderFooterView.xib diff --git a/Sources/SideStore/Resources/UpdateCollectionViewCell.xib b/Sources/SideStore/Resources/XIB/UpdateCollectionViewCell.xib similarity index 100% rename from Sources/SideStore/Resources/UpdateCollectionViewCell.xib rename to Sources/SideStore/Resources/XIB/UpdateCollectionViewCell.xib diff --git a/Sources/SideStoreCore/Extensions/FileManager+SharedDirectories.swift b/Sources/SideStoreCore/Extensions/FileManager+SharedDirectories.swift index 563586dc..34ee915a 100644 --- a/Sources/SideStoreCore/Extensions/FileManager+SharedDirectories.swift +++ b/Sources/SideStoreCore/Extensions/FileManager+SharedDirectories.swift @@ -7,11 +7,15 @@ // import Foundation +import Shared public extension FileManager { var altstoreSharedDirectory: URL? { - guard let appGroup = Bundle.main.appGroups.first else { return nil } - + #if SWIFT_PACKAGE + guard let appGroup = Bundle.main.appGroups.first else { return nil } + #else + guard let appGroup = Bundle.main.appGroups.first else { return nil } + #endif let sharedDirectoryURL = containerURL(forSecurityApplicationGroupIdentifier: appGroup) return sharedDirectoryURL } diff --git a/Sources/SideStoreCore/Model/StoreApp.swift b/Sources/SideStoreCore/Model/StoreApp.swift index a8846b4e..30e293e2 100644 --- a/Sources/SideStoreCore/Model/StoreApp.swift +++ b/Sources/SideStoreCore/Model/StoreApp.swift @@ -15,11 +15,11 @@ import Roxas public extension StoreApp { #if SWIFT_PACKAGE #if ALPHA - static let altstoreAppID = Bundle.main.Info.appbundleIdentifier + static let altstoreAppID = Bundle.Info.appbundleIdentifier #elseif BETA - static let altstoreAppID = Bundle.main.Info.appbundleIdentifier + static let altstoreAppID = Bundle.Info.appbundleIdentifier #else - static let altstoreAppID = Bundle.main.Info.appbundleIdentifier + static let altstoreAppID = Bundle.Info.appbundleIdentifier #endif #else #if ALPHA diff --git a/Sources/libimobiledevice/libimobiledevice-glue/include b/Sources/libimobiledevice/libimobiledevice-glue/include deleted file mode 120000 index 748c9881..00000000 --- a/Sources/libimobiledevice/libimobiledevice-glue/include +++ /dev/null @@ -1 +0,0 @@ -../dependencies/libimobiledevice-glue/include \ No newline at end of file diff --git a/Sources/libimobiledevice/libimobiledevice-glue/include/common.h b/Sources/libimobiledevice/libimobiledevice-glue/include/common.h new file mode 120000 index 00000000..79842450 --- /dev/null +++ b/Sources/libimobiledevice/libimobiledevice-glue/include/common.h @@ -0,0 +1 @@ +../../dependencies/libimobiledevice-glue/src/common.h \ No newline at end of file diff --git a/Sources/libimobiledevice/libplist/include b/Sources/libimobiledevice/libplist/include deleted file mode 120000 index a989f42b..00000000 --- a/Sources/libimobiledevice/libplist/include +++ /dev/null @@ -1 +0,0 @@ -../dependencies/libplist/include \ No newline at end of file diff --git a/Sources/libimobiledevice/libplist/include/base64.h b/Sources/libimobiledevice/libplist/include/base64.h new file mode 120000 index 00000000..52ac8e93 --- /dev/null +++ b/Sources/libimobiledevice/libplist/include/base64.h @@ -0,0 +1 @@ +../src/base64.h \ No newline at end of file diff --git a/Sources/libimobiledevice/libplist/include/bytearray.h b/Sources/libimobiledevice/libplist/include/bytearray.h new file mode 120000 index 00000000..1ea012b0 --- /dev/null +++ b/Sources/libimobiledevice/libplist/include/bytearray.h @@ -0,0 +1 @@ +../src/bytearray.h \ No newline at end of file diff --git a/Sources/libimobiledevice/libplist/include/hashtable.h b/Sources/libimobiledevice/libplist/include/hashtable.h new file mode 120000 index 00000000..b2bcb082 --- /dev/null +++ b/Sources/libimobiledevice/libplist/include/hashtable.h @@ -0,0 +1 @@ +../src/hashtable.h \ No newline at end of file diff --git a/Sources/libimobiledevice/libplist/include/plist.h b/Sources/libimobiledevice/libplist/include/plist.h new file mode 120000 index 00000000..6c7bf2e5 --- /dev/null +++ b/Sources/libimobiledevice/libplist/include/plist.h @@ -0,0 +1 @@ +../src/plist.h \ No newline at end of file diff --git a/Sources/libimobiledevice/libplist/include/ptrarray.h b/Sources/libimobiledevice/libplist/include/ptrarray.h new file mode 120000 index 00000000..17c349a6 --- /dev/null +++ b/Sources/libimobiledevice/libplist/include/ptrarray.h @@ -0,0 +1 @@ +../src/ptrarray.h \ No newline at end of file diff --git a/Sources/libimobiledevice/libplist/include/strbuf.h b/Sources/libimobiledevice/libplist/include/strbuf.h new file mode 120000 index 00000000..4813b6bb --- /dev/null +++ b/Sources/libimobiledevice/libplist/include/strbuf.h @@ -0,0 +1 @@ +../src/strbuf.h \ No newline at end of file diff --git a/Sources/libimobiledevice/libplist/include/time64.h b/Sources/libimobiledevice/libplist/include/time64.h new file mode 120000 index 00000000..dc2e00ab --- /dev/null +++ b/Sources/libimobiledevice/libplist/include/time64.h @@ -0,0 +1 @@ +../src/time64.h \ No newline at end of file diff --git a/Sources/libimobiledevice/libplist/include/time64_limits.h b/Sources/libimobiledevice/libplist/include/time64_limits.h new file mode 120000 index 00000000..bcd4e179 --- /dev/null +++ b/Sources/libimobiledevice/libplist/include/time64_limits.h @@ -0,0 +1 @@ +../src/time64_limits.h \ No newline at end of file diff --git a/Sources/libimobiledevice/libplist/libcnary/node.c b/Sources/libimobiledevice/libplist/libcnary/node.c new file mode 120000 index 00000000..1aba1754 --- /dev/null +++ b/Sources/libimobiledevice/libplist/libcnary/node.c @@ -0,0 +1 @@ +../../dependencies/libplist/libcnary/node.c \ No newline at end of file diff --git a/Sources/libimobiledevice/libplist/libcnary/node_list.c b/Sources/libimobiledevice/libplist/libcnary/node_list.c new file mode 120000 index 00000000..4d135b96 --- /dev/null +++ b/Sources/libimobiledevice/libplist/libcnary/node_list.c @@ -0,0 +1 @@ +../../dependencies/libplist/libcnary/node_list.c \ No newline at end of file diff --git a/Sources/libimobiledevice/libusbmuxd/include b/Sources/libimobiledevice/libusbmuxd/include deleted file mode 120000 index 923504eb..00000000 --- a/Sources/libimobiledevice/libusbmuxd/include +++ /dev/null @@ -1 +0,0 @@ -../dependencies/libusbmuxd/include \ No newline at end of file