-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Expand file tree
/
Copy pathNSBundle.swift
More file actions
86 lines (68 loc) · 2.53 KB
/
Copy pathNSBundle.swift
File metadata and controls
86 lines (68 loc) · 2.53 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
//
// NSBundle.swift
// Loop
//
// Created by Nate Racklyeft on 7/28/16.
// Copyright © 2016 Nathan Racklyeft. All rights reserved.
//
import Foundation
extension Bundle {
var fullVersionString: String {
return "\(shortVersionString) (\(version))"
}
var shortVersionString: String {
return object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
}
var version: String {
return object(forInfoDictionaryKey: "CFBundleVersion") as! String
}
var bundleDisplayName: String {
return object(forInfoDictionaryKey: "CFBundleDisplayName") as! String
}
var localizedNameAndVersion: String {
return String(format: NSLocalizedString("%1$@ v%2$@", comment: "The format string for the app name and version number. (1: bundle name)(2: bundle version)"), bundleDisplayName, fullVersionString)
}
private var mainAppBundleIdentifier: String? {
return object(forInfoDictionaryKey: "MainAppBundleIdentifier") as? String
}
var appGroupSuiteName: String {
return object(forInfoDictionaryKey: "AppGroupIdentifier") as! String
}
var appStoreURL: String? {
return object(forInfoDictionaryKey: "AppStoreURL") as? String
}
var isAppExtension: Bool {
return bundleURL.pathExtension == "appex"
}
var mainAppUrl: URL? {
if let mainAppBundleIdentifier = mainAppBundleIdentifier {
return URL(string: "\(mainAppBundleIdentifier)://")
} else {
return nil
}
}
var localCacheDuration: TimeInterval {
guard let localCacheDurationDaysString = object(forInfoDictionaryKey: "LoopLocalCacheDurationDays") as? String,
let localCacheDurationDays = Double(localCacheDurationDaysString) else {
return .days(1)
}
return .days(localCacheDurationDays)
}
var hostIdentifier: String {
var identifier = bundleIdentifier ?? "com.loopkit.Loop"
let components = identifier.components(separatedBy: ".")
// DIY Loop has bundle identifiers like com.UY653SP37Q.loopkit.Loop
if components[2] == "loopkit" && components[3] == "Loop" {
identifier = "com.loopkit.Loop"
}
return identifier
}
var hostVersion: String {
var semanticVersion = shortVersionString
while semanticVersion.split(separator: ".").count < 3 {
semanticVersion += ".0"
}
semanticVersion += "+\(Bundle.main.version)"
return semanticVersion
}
}