libimobiledev libs almost build

This commit is contained in:
Joe Mattiello
2023-03-01 13:15:22 -05:00
parent d22d12c234
commit 686d1ab42a
36 changed files with 844 additions and 218 deletions

View File

@@ -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"
}
}
],

View File

@@ -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

View File

@@ -1114,7 +1114,7 @@
B3CD312529AF8B6D00374AF8 /* libusbmuxd */,
);
name = libimobiledevice;
path = Sources/libmobiledevice;
path = Sources/libimobiledevice;
sourceTree = "<group>";
};
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;

View File

@@ -2,6 +2,6 @@
<Workspace
version = "1.0">
<FileRef
location = "self:/Users/jmattiello/Workspace/Provenance/SideStoreRepos/SideStore/SideStore.xcodeproj">
location = "self:">
</FileRef>
</Workspace>

View File

@@ -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

View File

@@ -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<String>?
public var bundleIdentifier: String?
public init(activeProfiles: Set<String>?, 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<ALTProvisioningProfile>
// If activeProfiles is non-nil, then AltServer should remove all profiles except active ones.
public var activeProfiles: Set<String>?
private enum CodingKeys: String, CodingKey
{
case identifier
case version
case udid
case provisioningProfiles
case activeProfiles
}
public init(udid: String, provisioningProfiles: Set<ALTProvisioningProfile>, activeProfiles: Set<String>?)
{
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<String>.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<String>
public init(udid: String, bundleIdentifiers: Set<String>)
{
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()
{
}
}

View File

@@ -7,6 +7,8 @@
//
import Foundation
import Shared
import SideKit
typealias DaemonConnectionManager = ConnectionManager<DaemonRequestHandler>

View File

@@ -6,7 +6,6 @@
// Copyright © 2020 Riley Testut. All rights reserved.
//
import SideStoreCore
import Intents
@available(iOS 14, *)

View File

@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21225" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="21507" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina6_1" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21207"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="21505"/>
<capability name="Named colors" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
@@ -53,13 +53,13 @@
<stackView opaque="NO" contentMode="scaleToFill" axis="vertical" spacing="2" translatesAutoresizingMaskIntoConstraints="NO" id="TFB-qo-cbh">
<rect key="frame" x="195" y="0.0" width="83" height="55"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" translatesAutoresizingMaskIntoConstraints="NO" id="Zpb-k3-y7l">
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" minimumScaleFactor="0.5" translatesAutoresizingMaskIntoConstraints="NO" id="Zpb-k3-y7l">
<rect key="frame" x="0.0" y="0.0" width="83" height="50"/>
<fontDescription key="fontDescription" type="boldSystem" pointSize="18"/>
<color key="textColor" white="1" alpha="1" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
<nil key="highlightedColor"/>
</label>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" ambiguous="YES" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VOu-b8-uEL">
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" text="" textAlignment="right" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="VOu-b8-uEL">
<rect key="frame" x="0.0" y="52" width="83" height="3"/>
<fontDescription key="fontDescription" type="system" pointSize="14"/>
<color key="textColor" white="1" alpha="0.65000000000000002" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
@@ -126,7 +126,7 @@ If you would subscribe to the patreon that would support us and make sure we can
<resources>
<image name="SideStore" width="180" height="180"/>
<namedColor name="SettingsHighlighted">
<color red="0.23529411764705882" green="0.0" blue="0.40392156862745099" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
<color red="0.38823529411764707" green="0.011764705882352941" blue="0.58823529411764708" alpha="1" colorSpace="custom" customColorSpace="sRGB"/>
</namedColor>
</resources>
</document>

View File

@@ -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
}

View File

@@ -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

View File

@@ -1 +0,0 @@
../dependencies/libimobiledevice-glue/include

View File

@@ -0,0 +1 @@
../../dependencies/libimobiledevice-glue/src/common.h

View File

@@ -1 +0,0 @@
../dependencies/libplist/include

View File

@@ -0,0 +1 @@
../src/base64.h

View File

@@ -0,0 +1 @@
../src/bytearray.h

View File

@@ -0,0 +1 @@
../src/hashtable.h

View File

@@ -0,0 +1 @@
../src/plist.h

View File

@@ -0,0 +1 @@
../src/ptrarray.h

View File

@@ -0,0 +1 @@
../src/strbuf.h

View File

@@ -0,0 +1 @@
../src/time64.h

View File

@@ -0,0 +1 @@
../src/time64_limits.h

View File

@@ -0,0 +1 @@
../../dependencies/libplist/libcnary/node.c

View File

@@ -0,0 +1 @@
../../dependencies/libplist/libcnary/node_list.c

View File

@@ -1 +0,0 @@
../dependencies/libusbmuxd/include