@capacitor/ios 4.0.0-alpha.1 → 4.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -3,6 +3,93 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [4.0.0-beta.1](https://github.com/ionic-team/capacitor/compare/4.0.0-beta.0...4.0.0-beta.1) (2022-06-27)
7
+
8
+
9
+ ### Bug Fixes
10
+
11
+ * **ios:** Remove Cordova as an embedded framework ([#5709](https://github.com/ionic-team/capacitor/issues/5709)) ([bbf6d24](https://github.com/ionic-team/capacitor/commit/bbf6d248bf9217a5c5c6c15c7bcfeda209aba5b1))
12
+
13
+
14
+ ### Features
15
+
16
+ * **ios:** Allow to configure popover size ([#5717](https://github.com/ionic-team/capacitor/issues/5717)) ([ca1a125](https://github.com/ionic-team/capacitor/commit/ca1a125e5ab05d6066dd303bc75e99dfe21f210a))
17
+
18
+
19
+
20
+
21
+
22
+ # [4.0.0-beta.0](https://github.com/ionic-team/capacitor/compare/3.6.0...4.0.0-beta.0) (2022-06-17)
23
+
24
+
25
+ ### Bug Fixes
26
+
27
+ * **ios:** make removeAllListeners return a promise ([#5526](https://github.com/ionic-team/capacitor/issues/5526)) ([815f71b](https://github.com/ionic-team/capacitor/commit/815f71b6b62f6c4d5f66e6a36c190bb00a96fdcc))
28
+
29
+
30
+ ### Features
31
+
32
+ * **ios:** add getConfig to CAPPlugin ([#5495](https://github.com/ionic-team/capacitor/issues/5495)) ([224a9d0](https://github.com/ionic-team/capacitor/commit/224a9d075629d9c9da9ddc658eb282617fc46d09))
33
+ * **ios:** Add preferredContentMode configuration option ([#5583](https://github.com/ionic-team/capacitor/issues/5583)) ([5b6dfa3](https://github.com/ionic-team/capacitor/commit/5b6dfa3fe29c85632546b299f03cc04a77cf7475))
34
+ * **ios:** Support of range requests on WebViewAssetHandler ([#5659](https://github.com/ionic-team/capacitor/issues/5659)) ([348c08d](https://github.com/ionic-team/capacitor/commit/348c08d511e9d57a1b2ecedc3290c65fa9ba3924))
35
+
36
+
37
+
38
+
39
+
40
+ # [3.6.0](https://github.com/ionic-team/capacitor/compare/3.5.1...3.6.0) (2022-06-17)
41
+
42
+
43
+ ### Bug Fixes
44
+
45
+ * **ios:** Use `URL(fileURLWithPath:)` instead of `URL(string:)` ([#5603](https://github.com/ionic-team/capacitor/issues/5603)) ([5fac1b2](https://github.com/ionic-team/capacitor/commit/5fac1b2da5aa5882087716cb2aa862d89173f4a1))
46
+
47
+
48
+ ### Features
49
+
50
+ * **iOS, Android:** add AppUUID Lib for plugins ([#5690](https://github.com/ionic-team/capacitor/issues/5690)) ([05e76cf](https://github.com/ionic-team/capacitor/commit/05e76cf526a44e07fa75f9482fa2223a13918638))
51
+
52
+
53
+
54
+
55
+
56
+ # [4.0.0-alpha.2](https://github.com/ionic-team/capacitor/compare/3.4.1...4.0.0-alpha.2) (2022-05-12)
57
+
58
+
59
+ ### Bug Fixes
60
+
61
+ * **ios:** make removeAllListeners return a promise ([#5526](https://github.com/ionic-team/capacitor/issues/5526)) ([815f71b](https://github.com/ionic-team/capacitor/commit/815f71b6b62f6c4d5f66e6a36c190bb00a96fdcc))
62
+
63
+
64
+ ### Features
65
+
66
+ * **ios:** add getConfig to CAPPlugin ([#5495](https://github.com/ionic-team/capacitor/issues/5495)) ([224a9d0](https://github.com/ionic-team/capacitor/commit/224a9d075629d9c9da9ddc658eb282617fc46d09))
67
+ * **ios:** Add preferredContentMode configuration option ([#5583](https://github.com/ionic-team/capacitor/issues/5583)) ([5b6dfa3](https://github.com/ionic-team/capacitor/commit/5b6dfa3fe29c85632546b299f03cc04a77cf7475))
68
+
69
+
70
+
71
+
72
+
73
+
74
+ ## [3.5.1](https://github.com/ionic-team/capacitor/compare/3.5.0...3.5.1) (2022-05-04)
75
+
76
+ **Note:** Version bump only for package @capacitor/ios
77
+
78
+
79
+
80
+
81
+
82
+ # [3.5.0](https://github.com/ionic-team/capacitor/compare/3.4.3...3.5.0) (2022-04-22)
83
+
84
+
85
+ ### Features
86
+
87
+ * **ios:** Add overrideable routing for CAPBridgeViewController subclasses ([#5546](https://github.com/ionic-team/capacitor/issues/5546)) ([8875d5e](https://github.com/ionic-team/capacitor/commit/8875d5e2721e8a8ee763ce70cb672db383f36efa))
88
+
89
+
90
+
91
+
92
+
6
93
  # [4.0.0-alpha.1](https://github.com/ionic-team/capacitor/compare/3.4.1...4.0.0-alpha.1) (2022-03-25)
7
94
 
8
95
 
@@ -14,6 +101,21 @@ See [Conventional Commits](https://conventionalcommits.org) for commit guideline
14
101
 
15
102
 
16
103
 
104
+ ## [3.4.3](https://github.com/ionic-team/capacitor/compare/3.4.2...3.4.3) (2022-03-04)
105
+
106
+ **Note:** Version bump only for package @capacitor/ios
107
+
108
+
109
+
110
+
111
+
112
+ ## [3.4.2](https://github.com/ionic-team/capacitor/compare/3.4.1...3.4.2) (2022-03-03)
113
+
114
+ **Note:** Version bump only for package @capacitor/ios
115
+
116
+
117
+
118
+
17
119
  ## [3.4.1](https://github.com/ionic-team/capacitor/compare/3.4.0...3.4.1) (2022-02-09)
18
120
 
19
121
 
@@ -0,0 +1,53 @@
1
+ import CommonCrypto
2
+ import Foundation
3
+
4
+ private func hexString(_ iterator: Array<UInt8>.Iterator) -> String {
5
+ return iterator.map { String(format: "%02x", $0) }.joined()
6
+ }
7
+
8
+ extension Data {
9
+ public var sha256: String {
10
+ var digest = [UInt8](repeating: 0, count: Int(CC_SHA256_DIGEST_LENGTH))
11
+ self.withUnsafeBytes { bytes in
12
+ _ = CC_SHA256(bytes.baseAddress, CC_LONG(self.count), &digest)
13
+ }
14
+ return hexString(digest.makeIterator())
15
+ }
16
+ }
17
+
18
+ public class AppUUID {
19
+ private static let key: String = "CapacitorAppUUID"
20
+
21
+ public static func getAppUUID() -> String {
22
+ assertAppUUID()
23
+ return readUUID()
24
+ }
25
+
26
+ public static func regenerateAppUUID() {
27
+ let uuid = generateUUID()
28
+ writeUUID(uuid)
29
+ }
30
+
31
+ private static func assertAppUUID() {
32
+ let uuid = readUUID()
33
+ if uuid == "" {
34
+ regenerateAppUUID()
35
+ }
36
+ }
37
+
38
+ private static func generateUUID() -> String {
39
+ let uuid: String = UUID.init().uuidString
40
+ return uuid.data(using: .utf8)!.sha256
41
+ }
42
+
43
+ private static func readUUID() -> String {
44
+ let defaults = UserDefaults.standard
45
+ return defaults.string(forKey: key) ?? ""
46
+ }
47
+
48
+ private static func writeUUID(_ uuid: String) {
49
+ let defaults = UserDefaults.standard
50
+ defaults.set(uuid, forKey: key)
51
+ }
52
+
53
+ }
@@ -42,7 +42,7 @@ import Cordova
42
42
  setScreenOrientationDefaults()
43
43
 
44
44
  // get the web view
45
- let assetHandler = WebViewAssetHandler()
45
+ let assetHandler = WebViewAssetHandler(router: router())
46
46
  assetHandler.setAssetPath(configuration.appLocation.path)
47
47
  let delegationHandler = WebViewDelegationHandler()
48
48
  prepareWebView(with: configuration, assetHandler: assetHandler, delegationHandler: delegationHandler)
@@ -90,6 +90,10 @@ import Cordova
90
90
  return descriptor
91
91
  }
92
92
 
93
+ open func router() -> Router {
94
+ return _Router()
95
+ }
96
+
93
97
  /**
94
98
  The WKWebViewConfiguration to use for the webview.
95
99
 
@@ -115,6 +119,15 @@ import Cordova
115
119
  webViewConfiguration.applicationNameForUserAgent = appendUserAgent
116
120
  }
117
121
  }
122
+ if let preferredContentMode = instanceConfiguration.preferredContentMode {
123
+ var mode = WKWebpagePreferences.ContentMode.recommended
124
+ if preferredContentMode == "mobile" {
125
+ mode = WKWebpagePreferences.ContentMode.mobile
126
+ } else if preferredContentMode == "desktop" {
127
+ mode = WKWebpagePreferences.ContentMode.desktop
128
+ }
129
+ webViewConfiguration.defaultWebpagePreferences.preferredContentMode = mode
130
+ }
118
131
  return webViewConfiguration
119
132
  }
120
133
 
@@ -23,6 +23,7 @@ NS_SWIFT_NAME(InstanceConfiguration)
23
23
  @property (nonatomic, readonly, nonnull) NSURL *appLocation;
24
24
  @property (nonatomic, readonly, nullable) NSString *appStartPath;
25
25
  @property (nonatomic, readonly) BOOL limitsNavigationsToAppBoundDomains;
26
+ @property (nonatomic, readonly, nullable) NSString *preferredContentMode;
26
27
 
27
28
  @property (nonatomic, readonly, nonnull) NSDictionary *legacyConfig DEPRECATED_MSG_ATTRIBUTE("Use direct properties instead");
28
29
 
@@ -35,6 +35,7 @@
35
35
  _appLocation = descriptor.appLocation;
36
36
  _appStartPath = descriptor.appStartPath;
37
37
  _limitsNavigationsToAppBoundDomains = descriptor.limitsNavigationsToAppBoundDomains;
38
+ _preferredContentMode = descriptor.preferredContentMode;
38
39
  _pluginConfigurations = descriptor.pluginConfigurations;
39
40
  _legacyConfig = descriptor.legacyConfig;
40
41
  // construct the necessary URLs
@@ -108,6 +108,11 @@ NS_SWIFT_NAME(InstanceDescriptor)
108
108
  @discussion Defaults to @c false. Set by @c ios.limitsNavigationsToAppBoundDomains in the configuration file. Required to be @c true for plugins to work if the app includes @c WKAppBoundDomains in the Info.plist.
109
109
  */
110
110
  @property (nonatomic, assign) BOOL limitsNavigationsToAppBoundDomains;
111
+ /**
112
+ @brief The content mode for the web view to use when it loads and renders web content.
113
+ @discussion Defaults to @c recommended. Set by @c ios.preferredContentMode in the configuration file.
114
+ */
115
+ @property (nonatomic, copy, nullable) NSString *preferredContentMode;
111
116
  /**
112
117
  @brief The parser used to load the cofiguration for Cordova plugins.
113
118
  */
@@ -125,6 +125,9 @@ internal extension InstanceDescriptor {
125
125
  if let limitsNavigations = config[keyPath: "ios.limitsNavigationsToAppBoundDomains"] as? Bool {
126
126
  limitsNavigationsToAppBoundDomains = limitsNavigations
127
127
  }
128
+ if let preferredMode = (config[keyPath: "ios.preferredContentMode"] as? String) {
129
+ preferredContentMode = preferredMode
130
+ }
128
131
  }
129
132
  }
130
133
  // swiftlint:enable cyclomatic_complexity
@@ -4,7 +4,7 @@ public class CAPLog {
4
4
  public static func print(_ items: Any..., separator: String = " ", terminator: String = "\n") {
5
5
  if enableLogging {
6
6
  for (itemIndex, item) in items.enumerated() {
7
- Swift.print(item, terminator: itemIndex == items.count - 1 ? terminator : separator)
7
+ Swift.print("\(item)".prefix(4068), terminator: itemIndex == items.count - 1 ? terminator : separator)
8
8
  }
9
9
  }
10
10
  }
@@ -48,7 +48,8 @@
48
48
  -(NSString* _Nullable)getString:(CAPPluginCall* _Nonnull)call field:(NSString* _Nonnull)field defaultValue:(NSString* _Nonnull)defaultValue DEPRECATED_MSG_ATTRIBUTE("Use accessors on CAPPluginCall instead. See CAPBridgedJSTypes.h for Obj-C implementations.");
49
49
  -(id _Nullable)getConfigValue:(NSString* _Nonnull)key __deprecated_msg("use getConfig() and access config values using the methods available depending on the type.");
50
50
  -(PluginConfig* _Nonnull)getConfig;
51
- -(void)setCenteredPopover:(UIViewController* _Nonnull)vc;
52
- -(BOOL)supportsPopover;
51
+ -(void)setCenteredPopover:(UIViewController* _Nonnull) vc;
52
+ -(void)setCenteredPopover:(UIViewController* _Nonnull) vc size:(CGSize) size;
53
+ -(BOOL)supportsPopover DEPRECATED_MSG_ATTRIBUTE("All iOS 13+ devices support popover");
53
54
 
54
55
  @end
@@ -109,6 +109,7 @@
109
109
 
110
110
  - (void)removeAllListeners:(CAPPluginCall *)call {
111
111
  [self.eventListeners removeAllObjects];
112
+ [call resolve];
112
113
  }
113
114
 
114
115
  - (NSArray<CAPPluginCall *>*)getListeners:(NSString *)eventName {
@@ -144,12 +145,17 @@
144
145
  }
145
146
  }
146
147
 
148
+ -(void)setCenteredPopover:(UIViewController* _Nonnull) vc size:(CGSize) size {
149
+ if (self.bridge.viewController != nil) {
150
+ vc.popoverPresentationController.sourceRect = CGRectMake(self.bridge.viewController.view.center.x, self.bridge.viewController.view.center.y, 0, 0);
151
+ vc.preferredContentSize = size;
152
+ vc.popoverPresentationController.sourceView = self.bridge.viewController.view;
153
+ vc.popoverPresentationController.permittedArrowDirections = 0;
154
+ }
155
+ }
156
+
147
157
  -(BOOL)supportsPopover {
148
- if (@available(iOS 13, *)) {
149
158
  return YES;
150
- } else {
151
- return UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad;
152
- }
153
159
  }
154
160
 
155
161
  - (NSNumber*)shouldOverrideLoad:(WKNavigationAction*)navigationAction {
@@ -97,7 +97,7 @@ internal class JSExport {
97
97
  let methods = [
98
98
  PluginHeaderMethod(name: "addListener", rtype: nil),
99
99
  PluginHeaderMethod(name: "removeListener", rtype: nil),
100
- PluginHeaderMethod(name: "removeAllListeners", rtype: nil),
100
+ PluginHeaderMethod(name: "removeAllListeners", rtype: "promise"),
101
101
  PluginHeaderMethod(name: "checkPermissions", rtype: "promise"),
102
102
  PluginHeaderMethod(name: "requestPermissions", rtype: "promise")
103
103
  ]
@@ -9,39 +9,39 @@ import Foundation
9
9
  self.config = config
10
10
  }
11
11
 
12
- public func getString(configKey: String, defaultValue: String? = nil) -> String? {
12
+ @objc public func getString(_ configKey: String, _ defaultValue: String? = nil) -> String? {
13
13
  if let val = (self.config)[keyPath: KeyPath(configKey)] as? String {
14
14
  return val
15
15
  }
16
16
  return defaultValue
17
17
  }
18
18
 
19
- public func getBoolean(configKey: String, defaultValue: Bool) -> Bool {
19
+ @objc public func getBoolean(_ configKey: String, _ defaultValue: Bool) -> Bool {
20
20
  if let val = (self.config)[keyPath: KeyPath(configKey)] as? Bool {
21
21
  return val
22
22
  }
23
23
  return defaultValue
24
24
  }
25
25
 
26
- public func getInt(configKey: String, defaultValue: Int) -> Int {
26
+ @objc public func getInt(_ configKey: String, _ defaultValue: Int) -> Int {
27
27
  if let val = (self.config)[keyPath: KeyPath(configKey)] as? Int {
28
28
  return val
29
29
  }
30
30
  return defaultValue
31
31
  }
32
32
 
33
- public func getArray(configKey: String, defaultValue: JSArray? = nil) -> JSArray? {
33
+ public func getArray(_ configKey: String, _ defaultValue: JSArray? = nil) -> JSArray? {
34
34
  if let val = (self.config)[keyPath: KeyPath(configKey)] as? JSArray {
35
35
  return val
36
36
  }
37
37
  return defaultValue
38
38
  }
39
39
 
40
- public func getObject(configKey: String) -> JSObject? {
40
+ public func getObject(_ configKey: String) -> JSObject? {
41
41
  return (self.config)[keyPath: KeyPath(configKey)] as? JSObject
42
42
  }
43
43
 
44
- public func isEmpty() -> Bool {
44
+ @objc public func isEmpty() -> Bool {
45
45
  return self.config.isEmpty
46
46
  }
47
47
 
@@ -0,0 +1,29 @@
1
+ //
2
+ // Router.swift
3
+ // Capacitor
4
+ //
5
+ // Created by Steven Sherry on 3/29/22.
6
+ // Copyright © 2022 Drifty Co. All rights reserved.
7
+ //
8
+
9
+ import Foundation
10
+
11
+ public protocol Router {
12
+ func route(for path: String) -> String
13
+ var basePath: String { get set }
14
+ }
15
+
16
+ // swiftlint:disable:next type_name
17
+ internal struct _Router: Router {
18
+ var basePath: String = ""
19
+ func route(for path: String) -> String {
20
+ let pathUrl = URL(fileURLWithPath: path)
21
+
22
+ // If there's no path extension it also means the path is empty or a SPA route
23
+ if pathUrl.pathExtension.isEmpty {
24
+ return basePath + "/index.html"
25
+ }
26
+
27
+ return basePath + path
28
+ }
29
+ }
@@ -26,14 +26,14 @@ public extension CapacitorExtensionTypeWrapper where T: UIColor {
26
26
  with: ""
27
27
  )
28
28
 
29
- var argb: UInt32 = 0
29
+ var argb: UInt64 = 0
30
30
 
31
31
  var red: CGFloat = 0.0
32
32
  var green: CGFloat = 0.0
33
33
  var blue: CGFloat = 0.0
34
34
  var alpha: CGFloat = 1.0
35
35
 
36
- guard Scanner(string: hexString).scanHexInt32(&argb) else { return nil }
36
+ guard Scanner(string: hexString).scanHexInt64(&argb) else { return nil }
37
37
 
38
38
  if hexString.count == 6 {
39
39
  red = CGFloat((argb & 0xFF0000) >> 16) / 255.0
@@ -3,49 +3,73 @@ import MobileCoreServices
3
3
 
4
4
  @objc(CAPWebViewAssetHandler)
5
5
  internal class WebViewAssetHandler: NSObject, WKURLSchemeHandler {
6
+ private var router: Router
6
7
 
7
- private var basePath: String = ""
8
+ init(router: Router) {
9
+ self.router = router
10
+ super.init()
11
+ }
8
12
 
9
13
  func setAssetPath(_ assetPath: String) {
10
- self.basePath = assetPath
14
+ router.basePath = assetPath
11
15
  }
12
16
 
13
17
  func webView(_ webView: WKWebView, start urlSchemeTask: WKURLSchemeTask) {
14
- var startPath = self.basePath
18
+ let startPath: String
15
19
  let url = urlSchemeTask.request.url!
16
20
  let stringToLoad = url.path
17
21
 
18
22
  if stringToLoad.starts(with: CapacitorBridge.fileStartIdentifier) {
19
23
  startPath = stringToLoad.replacingOccurrences(of: CapacitorBridge.fileStartIdentifier, with: "")
20
- } else if stringToLoad.isEmpty || url.pathExtension.isEmpty {
21
- startPath.append("/index.html")
22
24
  } else {
23
- startPath.append(stringToLoad)
25
+ startPath = router.route(for: stringToLoad)
24
26
  }
27
+
25
28
  let localUrl = URL.init(string: url.absoluteString)!
26
29
  let fileUrl = URL.init(fileURLWithPath: startPath)
27
30
 
28
31
  do {
29
32
  var data = Data()
30
- if !stringToLoad.contains("cordova.js") {
31
- if isMediaExtension(pathExtension: url.pathExtension) {
32
- data = try Data(contentsOf: fileUrl, options: Data.ReadingOptions.mappedIfSafe)
33
- } else {
34
- data = try Data(contentsOf: fileUrl)
35
- }
36
- }
37
33
  let mimeType = mimeTypeForExtension(pathExtension: url.pathExtension)
38
- let expectedContentLength = data.count
39
- let headers = [
34
+ var headers = [
40
35
  "Content-Type": mimeType,
41
36
  "Cache-Control": "no-cache"
42
37
  ]
43
- let urlResponse = URLResponse(url: localUrl, mimeType: mimeType, expectedContentLength: expectedContentLength, textEncodingName: nil)
44
- let httpResponse = HTTPURLResponse(url: localUrl, statusCode: 200, httpVersion: nil, headerFields: headers)
45
- if isMediaExtension(pathExtension: url.pathExtension) {
46
- urlSchemeTask.didReceive(urlResponse)
38
+ if let rangeString = urlSchemeTask.request.value(forHTTPHeaderField: "Range"),
39
+ let totalSize = try fileUrl.resourceValues(forKeys: [.fileSizeKey]).fileSize,
40
+ isMediaExtension(pathExtension: url.pathExtension) {
41
+ let fileHandle = try FileHandle(forReadingFrom: fileUrl)
42
+ let parts = rangeString.components(separatedBy: "=")
43
+ let streamParts = parts[1].components(separatedBy: "-")
44
+ let fromRange = Int(streamParts[0]) ?? 0
45
+ var toRange = totalSize - 1
46
+ if streamParts.count > 1 {
47
+ toRange = Int(streamParts[1]) ?? toRange
48
+ }
49
+ let rangeLength = toRange - fromRange + 1
50
+ try fileHandle.seek(toOffset: UInt64(fromRange))
51
+ data = fileHandle.readData(ofLength: rangeLength)
52
+ headers["Accept-Ranges"] = "bytes"
53
+ headers["Content-Range"] = "bytes \(fromRange)-\(toRange)/\(totalSize)"
54
+ headers["Content-Length"] = String(data.count)
55
+ let response = HTTPURLResponse(url: localUrl, statusCode: 206, httpVersion: nil, headerFields: headers)
56
+ urlSchemeTask.didReceive(response!)
57
+ try fileHandle.close()
47
58
  } else {
48
- urlSchemeTask.didReceive(httpResponse!)
59
+ if !stringToLoad.contains("cordova.js") {
60
+ if isMediaExtension(pathExtension: url.pathExtension) {
61
+ data = try Data(contentsOf: fileUrl, options: Data.ReadingOptions.mappedIfSafe)
62
+ } else {
63
+ data = try Data(contentsOf: fileUrl)
64
+ }
65
+ }
66
+ let urlResponse = URLResponse(url: localUrl, mimeType: mimeType, expectedContentLength: data.count, textEncodingName: nil)
67
+ let httpResponse = HTTPURLResponse(url: localUrl, statusCode: 200, httpVersion: nil, headerFields: headers)
68
+ if isMediaExtension(pathExtension: url.pathExtension) {
69
+ urlSchemeTask.didReceive(urlResponse)
70
+ } else {
71
+ urlSchemeTask.didReceive(httpResponse!)
72
+ }
49
73
  }
50
74
  urlSchemeTask.didReceive(data)
51
75
  } catch let error as NSError {
@@ -46,9 +46,7 @@ internal class WebViewDelegationHandler: NSObject, WKNavigationDelegate, WKUIDel
46
46
  // Reset the bridge on each navigation
47
47
  bridge?.reset()
48
48
  }
49
-
50
- // TODO: remove once Xcode 12 support is dropped
51
- #if compiler(>=5.5)
49
+
52
50
  @available(iOS 15, *)
53
51
  func webView(
54
52
  _ webView: WKWebView,
@@ -62,12 +60,11 @@ internal class WebViewDelegationHandler: NSObject, WKNavigationDelegate, WKUIDel
62
60
 
63
61
  @available(iOS 15, *)
64
62
  func webView(_ webView: WKWebView,
65
- requestDeviceOrientationAndMotionPermissionFor origin: WKSecurityOrigin,
66
- initiatedByFrame frame: WKFrameInfo,
67
- decisionHandler: @escaping (WKPermissionDecision) -> Void) {
63
+ requestDeviceOrientationAndMotionPermissionFor origin: WKSecurityOrigin,
64
+ initiatedByFrame frame: WKFrameInfo,
65
+ decisionHandler: @escaping (WKPermissionDecision) -> Void) {
68
66
  decisionHandler(.grant)
69
67
  }
70
- #endif
71
68
 
72
69
  public func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
73
70
  // post a notification for any listeners
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@capacitor/ios",
3
- "version": "4.0.0-alpha.1",
3
+ "version": "4.0.0-beta.1",
4
4
  "description": "Capacitor: Cross-platform apps with JavaScript and the web",
5
5
  "homepage": "https://capacitorjs.com",
6
6
  "author": "Ionic Team <hi@ionic.io> (https://ionic.io)",
@@ -24,10 +24,10 @@
24
24
  "xc:build:CapacitorCordova": "cd CapacitorCordova && xcodebuild && cd .."
25
25
  },
26
26
  "peerDependencies": {
27
- "@capacitor/core": "^3.4.0"
27
+ "@capacitor/core": "next"
28
28
  },
29
29
  "publishConfig": {
30
30
  "access": "public"
31
31
  },
32
- "gitHead": "7faec09fd724a0af7436f3d30c83856b7bb5ce51"
32
+ "gitHead": "8520516c0883cb11df3b0097ac793290235c27de"
33
33
  }