This allows us to remove a good deal of legacy cruft.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
let package = Package(
name: "WireGuardKit",
platforms: [
- .macOS(.v10_14),
- .iOS(.v12)
+ .macOS(.v12),
+ .iOS(.v15)
],
products: [
.library(name: "WireGuardKit", targets: ["WireGuardKit"])
return true
}
#elseif os(iOS)
- if #available(iOS 15, *) {
- /* Update the stored reference from the old iOS 14 one to the canonical iOS 15 one.
- * The iOS 14 ones are 96 bits, while the iOS 15 ones are 160 bits. We do this so
- * that we can have fast set exclusion in deleteReferences safely. */
- if passwordReference != nil && passwordReference!.count == 12 {
- var result: CFTypeRef?
- let ret = SecItemCopyMatching([kSecValuePersistentRef: passwordReference!,
- kSecReturnPersistentRef: true] as CFDictionary,
- &result)
- if ret != errSecSuccess || result == nil {
- return false
- }
- guard let newReference = result as? Data else { return false }
- if !newReference.elementsEqual(passwordReference!) {
- wg_log(.info, message: "Migrating iOS 14-style keychain reference to iOS 15-style keychain reference for '\(name)'")
- passwordReference = newReference
- return true
- }
+ /* Update the stored reference from the old iOS 14 one to the canonical iOS 15 one.
+ * The iOS 14 ones are 96 bits, while the iOS 15 ones are 160 bits. We do this so
+ * that we can have fast set exclusion in deleteReferences safely. */
+ if passwordReference != nil && passwordReference!.count == 12 {
+ var result: CFTypeRef?
+ let ret = SecItemCopyMatching([kSecValuePersistentRef: passwordReference!,
+ kSecReturnPersistentRef: true] as CFDictionary,
+ &result)
+ if ret != errSecSuccess || result == nil {
+ return false
+ }
+ guard let newReference = result as? Data else { return false }
+ if !newReference.elementsEqual(passwordReference!) {
+ wg_log(.info, message: "Migrating iOS 14-style keychain reference to iOS 15-style keychain reference for '\(name)'")
+ passwordReference = newReference
+ return true
}
}
#endif
let keyLabel = UILabel()
keyLabel.font = UIFont.preferredFont(forTextStyle: .body)
keyLabel.adjustsFontForContentSizeCategory = true
- if #available(iOS 13.0, *) {
- keyLabel.textColor = .label
- } else {
- keyLabel.textColor = .black
- }
+ keyLabel.textColor = .label
keyLabel.textAlignment = .left
return keyLabel
}()
valueTextField.autocapitalizationType = .none
valueTextField.autocorrectionType = .no
valueTextField.spellCheckingType = .no
- if #available(iOS 13.0, *) {
- valueTextField.textColor = .secondaryLabel
- } else {
- valueTextField.textColor = .gray
- }
+ valueTextField.textColor = .secondaryLabel
return valueTextField
}()
var isValueValid = true {
didSet {
- if #available(iOS 13.0, *) {
- if isValueValid {
- keyLabel.textColor = .label
- } else {
- keyLabel.textColor = .systemRed
- }
+ if isValueValid {
+ keyLabel.textColor = .label
} else {
- if isValueValid {
- keyLabel.textColor = .black
- } else {
- keyLabel.textColor = .red
- }
+ keyLabel.textColor = .systemRed
}
}
}
get { return switchView.isEnabled }
set(value) {
switchView.isEnabled = value
- if #available(iOS 13.0, *) {
- textLabel?.textColor = value ? .label : .secondaryLabel
- } else {
- textLabel?.textColor = value ? .black : .gray
- }
+ textLabel?.textColor = value ? .label : .secondaryLabel
}
}
override func prepareForReuse() {
super.prepareForReuse()
message = ""
- if #available(iOS 13.0, *) {
- setTextColor(.label)
- } else {
- setTextColor(.black)
- }
+ setTextColor(.label)
setTextAlignment(.left)
}
}
super.init(style: style, reuseIdentifier: reuseIdentifier)
copyableGesture = false
- if #available(iOS 13.0, *) {
- valueTextField.textColor = .label
- } else {
- valueTextField.textColor = .black
- }
+ valueTextField.textColor = .label
valueTextField.isEnabled = true
valueLabelScrollView.isScrollEnabled = false
valueTextField.widthAnchor.constraint(equalTo: valueLabelScrollView.widthAnchor).isActive = true
label.font = UIFont.preferredFont(forTextStyle: .caption2)
label.adjustsFontForContentSizeCategory = true
label.numberOfLines = 1
- if #available(iOS 13.0, *) {
- label.textColor = .secondaryLabel
- } else {
- label.textColor = .gray
- }
+ label.textColor = .secondaryLabel
return label
}()
let busyIndicator: UIActivityIndicatorView = {
let busyIndicator: UIActivityIndicatorView
- if #available(iOS 13.0, *) {
- busyIndicator = UIActivityIndicatorView(style: .medium)
- } else {
- busyIndicator = UIActivityIndicatorView(style: .gray)
- }
+ busyIndicator = UIActivityIndicatorView(style: .medium)
busyIndicator.hidesWhenStopped = true
return busyIndicator
}()
}()
let busyIndicator: UIActivityIndicatorView = {
- if #available(iOS 13.0, *) {
- let busyIndicator = UIActivityIndicatorView(style: .medium)
- busyIndicator.hidesWhenStopped = true
- return busyIndicator
- } else {
- let busyIndicator = UIActivityIndicatorView(style: .gray)
- busyIndicator.hidesWhenStopped = true
- return busyIndicator
- }
+ let busyIndicator = UIActivityIndicatorView(style: .medium)
+ busyIndicator.hidesWhenStopped = true
+ return busyIndicator
}()
let paragraphStyle: NSParagraphStyle = {
override func loadView() {
view = UIView()
- if #available(iOS 13.0, *) {
- view.backgroundColor = .systemBackground
- } else {
- view.backgroundColor = .white
- }
-
+ view.backgroundColor = .systemBackground
view.addSubview(textView)
textView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
let bodyFont = UIFont.preferredFont(forTextStyle: UIFont.TextStyle.body)
let captionFont = UIFont.preferredFont(forTextStyle: UIFont.TextStyle.caption1)
for logEntry in fetchedLogEntries {
- var bgColor: UIColor
- var fgColor: UIColor
- if #available(iOS 13.0, *) {
- bgColor = self.isNextLineHighlighted ? .systemGray3 : .systemBackground
- fgColor = .label
- } else {
- bgColor = self.isNextLineHighlighted ? UIColor(white: 0.88, alpha: 1.0) : UIColor.white
- fgColor = .black
- }
+ let bgColor: UIColor = self.isNextLineHighlighted ? .systemGray3 : .systemBackground
+ let fgColor: UIColor = .label
let timestampText = NSAttributedString(string: logEntry.timestamp + "\n", attributes: [.font: captionFont, .backgroundColor: bgColor, .foregroundColor: fgColor, .paragraphStyle: self.paragraphStyle])
let messageText = NSAttributedString(string: logEntry.message + "\n", attributes: [.font: bodyFont, .backgroundColor: bgColor, .foregroundColor: fgColor, .paragraphStyle: self.paragraphStyle])
richText.append(timestampText)
init() {
let detailVC = UIViewController()
- if #available(iOS 13.0, *) {
- detailVC.view.backgroundColor = .systemBackground
- } else {
- detailVC.view.backgroundColor = .white
- }
+ detailVC.view.backgroundColor = .systemBackground
let detailNC = UINavigationController(rootViewController: detailVC)
let masterVC = TunnelsListTableViewController()
private func noSSIDsCell(for tableView: UITableView, at indexPath: IndexPath) -> UITableViewCell {
let cell: TextCell = tableView.dequeueReusableCell(for: indexPath)
cell.message = tr("tunnelOnDemandNoSSIDs")
- if #available(iOS 13.0, *) {
- cell.setTextColor(.secondaryLabel)
- } else {
- cell.setTextColor(.gray)
- }
+ cell.setTextColor(.secondaryLabel)
cell.setTextAlignment(.center)
return cell
}
#if targetEnvironment(simulator)
completionHandler("Simulator Wi-Fi")
#else
- if #available(iOS 14, *) {
- NEHotspotNetwork.fetchCurrent { hotspotNetwork in
- completionHandler(hotspotNetwork?.ssid)
- }
- } else {
- if let supportedInterfaces = CNCopySupportedInterfaces() as? [CFString] {
- for interface in supportedInterfaces {
- if let networkInfo = CNCopyCurrentNetworkInfo(interface) {
- if let ssid = (networkInfo as NSDictionary)[kCNNetworkInfoKeySSID as String] as? String {
- completionHandler(!ssid.isEmpty ? ssid : nil)
- return
- }
- }
- }
- }
-
- completionHandler(nil)
+ NEHotspotNetwork.fetchCurrent { hotspotNetwork in
+ completionHandler(hotspotNetwork?.ssid)
}
#endif
}
let busyIndicator: UIActivityIndicatorView = {
let busyIndicator: UIActivityIndicatorView
- if #available(iOS 13.0, *) {
- busyIndicator = UIActivityIndicatorView(style: .medium)
- } else {
- busyIndicator = UIActivityIndicatorView(style: .gray)
- }
+ busyIndicator = UIActivityIndicatorView(style: .medium)
busyIndicator.hidesWhenStopped = true
return busyIndicator
}()
override func loadView() {
view = UIView()
- if #available(iOS 13.0, *) {
- view.backgroundColor = .systemBackground
- } else {
- view.backgroundColor = .white
- }
+ view.backgroundColor = .systemBackground
tableView.dataSource = self
tableView.delegate = self
(splitViewController.viewControllers[0] as? UINavigationController)?.popToRootViewController(animated: false)
} else {
let detailVC = UIViewController()
- if #available(iOS 13.0, *) {
- detailVC.view.backgroundColor = .systemBackground
- } else {
- detailVC.view.backgroundColor = .white
- }
+ detailVC.view.backgroundColor = .systemBackground
let detailNC = UINavigationController(rootViewController: detailVC)
splitViewController.showDetailViewController(detailNC, sender: self)
}
return 2;
uint64_t now = clock_gettime_nsec_np(CLOCK_UPTIME_RAW);
if (![[NSData dataWithBytes:&now length:sizeof(now)] writeToURL:[containerUrl URLByAppendingPathComponent:@"login-helper-timestamp.bin"] atomically:YES])
- return 3;
- if (@available(macOS 10.15, *)) {
- NSCondition *condition = [[NSCondition alloc] init];
- NSURL *appURL = [NSWorkspace.sharedWorkspace URLForApplicationWithBundleIdentifier:appId];
- if (!appURL)
- return 4;
- NSWorkspaceOpenConfiguration *openConfiguration = [NSWorkspaceOpenConfiguration configuration];
- openConfiguration.activates = NO;
- openConfiguration.addsToRecentItems = NO;
- openConfiguration.hides = YES;
- [NSWorkspace.sharedWorkspace openApplicationAtURL:appURL configuration:openConfiguration completionHandler:^(NSRunningApplication * _Nullable app, NSError * _Nullable error) {
- [condition signal];
- }];
- [condition wait];
- } else {
- [NSWorkspace.sharedWorkspace launchAppWithBundleIdentifier:appId options:NSWorkspaceLaunchWithoutActivation
- additionalEventParamDescriptor:NULL launchIdentifier:NULL];
- }
+ return 3;
+
+ NSCondition *condition = [[NSCondition alloc] init];
+ NSURL *appURL = [NSWorkspace.sharedWorkspace URLForApplicationWithBundleIdentifier:appId];
+ if (!appURL)
+ return 4;
+ NSWorkspaceOpenConfiguration *openConfiguration = [NSWorkspaceOpenConfiguration configuration];
+ openConfiguration.activates = NO;
+ openConfiguration.addsToRecentItems = NO;
+ openConfiguration.hides = YES;
+ [NSWorkspace.sharedWorkspace openApplicationAtURL:appURL configuration:openConfiguration completionHandler:^(NSRunningApplication * _Nullable app, NSError * _Nullable error) {
+ [condition signal];
+ }];
+ [condition wait];
return 0;
}
6FB1BD6721D2607E00A991BF /* WireGuard.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = WireGuard.entitlements; sourceTree = "<group>"; };
6FB1BD9121D4BFE600A991BF /* WireGuardNetworkExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = WireGuardNetworkExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; };
6FB1BD9621D4BFE700A991BF /* WireGuardNetworkExtension_macOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = WireGuardNetworkExtension_macOS.entitlements; sourceTree = "<group>"; };
- 6FB1BDB621D4F8B800A991BF /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk/System/Library/Frameworks/NetworkExtension.framework; sourceTree = DEVELOPER_DIR; };
+ 6FB1BDB621D4F8B800A991BF /* NetworkExtension.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = NetworkExtension.framework; path = Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/NetworkExtension.framework; sourceTree = DEVELOPER_DIR; };
6FBA101321D613F30051C35F /* Application.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Application.swift; sourceTree = "<group>"; };
6FBA101621D655340051C35F /* StatusMenu.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusMenu.swift; sourceTree = "<group>"; };
6FBA103A21D6B4280051C35F /* ErrorPresenterProtocol.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ErrorPresenterProtocol.swift; sourceTree = "<group>"; };
"$(inherited)",
"@executable_path/../Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = 12.0;
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_ID_MACOS)";
PRODUCT_NAME = WireGuard;
SDKROOT = macosx;
"$(inherited)",
"@executable_path/../Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = 12.0;
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_ID_MACOS)";
PRODUCT_NAME = WireGuard;
SDKROOT = macosx;
"@executable_path/../Frameworks",
"@executable_path/../../../../Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = 12.0;
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_ID_MACOS).network-extension";
PRODUCT_NAME = WireGuardNetworkExtension;
SDKROOT = macosx;
"@executable_path/../Frameworks",
"@executable_path/../../../../Frameworks",
);
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ MACOSX_DEPLOYMENT_TARGET = 12.0;
PRODUCT_BUNDLE_IDENTIFIER = "$(APP_ID_MACOS).network-extension";
PRODUCT_NAME = WireGuardNetworkExtension;
SDKROOT = macosx;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_LABEL = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ IPHONEOS_DEPLOYMENT_TARGET = 15.0;
+ MACOSX_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = YES;
MTL_FAST_MATH = YES;
ONLY_ACTIVE_ARCH = YES;
GCC_WARN_UNUSED_FUNCTION = YES;
GCC_WARN_UNUSED_LABEL = YES;
GCC_WARN_UNUSED_VARIABLE = YES;
- IPHONEOS_DEPLOYMENT_TARGET = 12.0;
- MACOSX_DEPLOYMENT_TARGET = 10.14;
+ IPHONEOS_DEPLOYMENT_TARGET = 15.0;
+ MACOSX_DEPLOYMENT_TARGET = 12.0;
MTL_ENABLE_DEBUG_INFO = NO;
MTL_FAST_MATH = YES;
SDKROOT = iphoneos;