├── MyWKWebView
├── Assets.xcassets
│ ├── Contents.json
│ ├── Buttons
│ │ ├── Contents.json
│ │ ├── back_btn.imageset
│ │ │ ├── back_btn.pdf
│ │ │ └── Contents.json
│ │ └── forward_btn.imageset
│ │ │ ├── forward_btn.pdf
│ │ │ └── Contents.json
│ └── AppIcon.appiconset
│ │ └── Contents.json
├── AppDelegate.swift
├── Base.lproj
│ ├── LaunchScreen.storyboard
│ └── Main.storyboard
├── Info.plist
└── ViewController.swift
├── .gitignore
├── README.md
└── MyWKWebView.xcodeproj
└── project.pbxproj
/MyWKWebView/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/MyWKWebView/Assets.xcassets/Buttons/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/MyWKWebView/Assets.xcassets/Buttons/back_btn.imageset/back_btn.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mouredev/MyWKWebView/HEAD/MyWKWebView/Assets.xcassets/Buttons/back_btn.imageset/back_btn.pdf
--------------------------------------------------------------------------------
/MyWKWebView/Assets.xcassets/Buttons/forward_btn.imageset/forward_btn.pdf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mouredev/MyWKWebView/HEAD/MyWKWebView/Assets.xcassets/Buttons/forward_btn.imageset/forward_btn.pdf
--------------------------------------------------------------------------------
/MyWKWebView/Assets.xcassets/Buttons/back_btn.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "back_btn.pdf",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/MyWKWebView/Assets.xcassets/Buttons/forward_btn.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "forward_btn.pdf",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "version" : 1,
19 | "author" : "xcode"
20 | }
21 | }
--------------------------------------------------------------------------------
/MyWKWebView/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // MyWKWebView
4 | //
5 | // Created by Brais Moure on 12/8/18.
6 | // Copyright © 2018 Brais Moure. All rights reserved.
7 | //
8 |
9 | import UIKit
10 |
11 | @UIApplicationMain
12 | class AppDelegate: UIResponder, UIApplicationDelegate {
13 |
14 | var window: UIWindow?
15 |
16 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
17 | return true
18 | }
19 |
20 | }
21 |
22 |
--------------------------------------------------------------------------------
/MyWKWebView/Base.lproj/LaunchScreen.storyboard:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/MyWKWebView/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | APPL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 | LSRequiresIPhoneOS
22 |
23 | UILaunchStoryboardName
24 | LaunchScreen
25 | UIMainStoryboardFile
26 | Main
27 | UIRequiredDeviceCapabilities
28 |
29 | armv7
30 |
31 | UISupportedInterfaceOrientations
32 |
33 | UIInterfaceOrientationPortrait
34 | UIInterfaceOrientationLandscapeLeft
35 | UIInterfaceOrientationLandscapeRight
36 |
37 | UISupportedInterfaceOrientations~ipad
38 |
39 | UIInterfaceOrientationPortrait
40 | UIInterfaceOrientationPortraitUpsideDown
41 | UIInterfaceOrientationLandscapeLeft
42 | UIInterfaceOrientationLandscapeRight
43 |
44 | NSAppTransportSecurity
45 |
46 | NSAllowsArbitraryLoads
47 |
48 |
49 |
50 |
51 |
--------------------------------------------------------------------------------
/MyWKWebView/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "iphone",
5 | "size" : "20x20",
6 | "scale" : "2x"
7 | },
8 | {
9 | "idiom" : "iphone",
10 | "size" : "20x20",
11 | "scale" : "3x"
12 | },
13 | {
14 | "idiom" : "iphone",
15 | "size" : "29x29",
16 | "scale" : "2x"
17 | },
18 | {
19 | "idiom" : "iphone",
20 | "size" : "29x29",
21 | "scale" : "3x"
22 | },
23 | {
24 | "idiom" : "iphone",
25 | "size" : "40x40",
26 | "scale" : "2x"
27 | },
28 | {
29 | "idiom" : "iphone",
30 | "size" : "40x40",
31 | "scale" : "3x"
32 | },
33 | {
34 | "idiom" : "iphone",
35 | "size" : "60x60",
36 | "scale" : "2x"
37 | },
38 | {
39 | "idiom" : "iphone",
40 | "size" : "60x60",
41 | "scale" : "3x"
42 | },
43 | {
44 | "idiom" : "ipad",
45 | "size" : "20x20",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "ipad",
50 | "size" : "20x20",
51 | "scale" : "2x"
52 | },
53 | {
54 | "idiom" : "ipad",
55 | "size" : "29x29",
56 | "scale" : "1x"
57 | },
58 | {
59 | "idiom" : "ipad",
60 | "size" : "29x29",
61 | "scale" : "2x"
62 | },
63 | {
64 | "idiom" : "ipad",
65 | "size" : "40x40",
66 | "scale" : "1x"
67 | },
68 | {
69 | "idiom" : "ipad",
70 | "size" : "40x40",
71 | "scale" : "2x"
72 | },
73 | {
74 | "idiom" : "ipad",
75 | "size" : "76x76",
76 | "scale" : "1x"
77 | },
78 | {
79 | "idiom" : "ipad",
80 | "size" : "76x76",
81 | "scale" : "2x"
82 | },
83 | {
84 | "idiom" : "ipad",
85 | "size" : "83.5x83.5",
86 | "scale" : "2x"
87 | },
88 | {
89 | "idiom" : "ios-marketing",
90 | "size" : "1024x1024",
91 | "scale" : "1x"
92 | }
93 | ],
94 | "info" : {
95 | "version" : 1,
96 | "author" : "xcode"
97 | }
98 | }
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Created by https://www.gitignore.io/api/xcode,swift
3 |
4 | ### Swift ###
5 | # Xcode
6 | #
7 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
8 |
9 | ## Build generated
10 | build/
11 | DerivedData/
12 |
13 | ## Various settings
14 | *.pbxuser
15 | !default.pbxuser
16 | *.mode1v3
17 | !default.mode1v3
18 | *.mode2v3
19 | !default.mode2v3
20 | *.perspectivev3
21 | !default.perspectivev3
22 | xcuserdata/
23 |
24 | ## Other
25 | *.moved-aside
26 | *.xccheckout
27 | *.xcscmblueprint
28 |
29 | ## Obj-C/Swift specific
30 | *.hmap
31 | *.ipa
32 | *.dSYM.zip
33 | *.dSYM
34 |
35 | ## Playgrounds
36 | timeline.xctimeline
37 | playground.xcworkspace
38 |
39 | # Swift Package Manager
40 | #
41 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
42 | # Packages/
43 | # Package.pins
44 | # Package.resolved
45 | .build/
46 |
47 | # CocoaPods
48 | #
49 | # We recommend against adding the Pods directory to your .gitignore. However
50 | # you should judge for yourself, the pros and cons are mentioned at:
51 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
52 | #
53 | # Pods/
54 | #
55 | # Add this line if you want to avoid checking in source code from the Xcode workspace
56 | # *.xcworkspace
57 |
58 | # Carthage
59 | #
60 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
61 | # Carthage/Checkouts
62 |
63 | Carthage/Build
64 |
65 | # fastlane
66 | #
67 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
68 | # screenshots whenever they are needed.
69 | # For more information about the recommended setup visit:
70 | # https://docs.fastlane.tools/best-practices/source-control/#source-control
71 |
72 | fastlane/report.xml
73 | fastlane/Preview.html
74 | fastlane/screenshots/**/*.png
75 | fastlane/test_output
76 |
77 | ### Xcode ###
78 | # Xcode
79 | #
80 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
81 |
82 | ## User settings
83 |
84 | ## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
85 |
86 | ## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
87 |
88 | ### Xcode Patch ###
89 | *.xcodeproj/*
90 | !*.xcodeproj/project.pbxproj
91 | !*.xcodeproj/xcshareddata/
92 | !*.xcworkspace/contents.xcworkspacedata
93 | /*.gcno
94 |
95 |
96 | # End of https://www.gitignore.io/api/xcode,swift
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Tutorial Swift 4: Creando un WebView (WKWebView) en iOS | Español | MoureDev by Brais Moure YouTube channel
2 | []()
3 | []()
4 | []()
5 |
6 | **`¡HOLA HACKERMEN! 👋🏼`**
7 |
8 | Bienvenidos al canal de [YouTube](https://www.youtube.com/channel/UCxPD7bsocoAMq8Dj18kmGyQ) ***MoureDev by Brais Moure***.
9 |
10 | Soy Brais Moure, desarrollador de software freelance. Comparto tutoriales sobre desarrollo de aplicaciones **iOS** y **Android**.
11 |
12 | Si te interesa el desarrollo de apps **`SUSCRÍBETE Y ACTIVA LA CAMPANA 👆🏼`** [Puedes hacerlo aquí 👈🏼](https://www.youtube.com/channel/UCxPD7bsocoAMq8Dj18kmGyQ?sub_confirmation=1)
13 |
14 | ## Descripción
15 | Tutorial para crear con Swift en Xcode e iOS un WebView, es decir, un navegador web como puede ser Safari o Chrome.
16 | Utilizaremos el componente WKWebView, el nuevo estándar de iOS 11 al ser deprecado UIWebView.
17 |
18 | ## Videotutorial
19 | [](https://www.youtube.com/watch?v=yxr_dMqYTxQ)
20 | [](https://www.youtube.com/watch?v=o7cGGSpuN-8)
21 |
22 | ## Requisitos
23 | * [Xcode](https://developer.apple.com/xcode/) 9.4
24 | * Swift 4
25 | * iOS 11.x o superior (Compatible con iPhone y iPad)
26 |
27 | ## Recursos
28 | * [Cómo crear un proyecto iOS en Xcode](https://youtu.be/mdrSGhNeOwQ)
29 | * [Assets](https://drive.google.com/drive/folders/1cRKYMb4_SX_v40-fa6jRZ7MOFpiPxjoQ?usp=sharing)
30 |
31 | ## ¿Te gusta el contenido?
32 |
33 | Déjame en comentarios tu opinión o cuéntame qué te gustaría ver en el canal.
34 | Si te gusta el contenido, **comparte**, **suscríbete** y **muéstrame tu dedo de darle al espacio con un like al vídeo** 👍🏼
35 |
36 | **¡GRACIAS!**
37 |
38 | ## Encuéntrame en:
39 |
40 | [](https://mouredev.com/)
41 | [](https://www.youtube.com/channel/UCxPD7bsocoAMq8Dj18kmGyQ)
42 | [](https://twitter.com/MoureDev)
43 | [](https://facebook.com/mouredev)
44 | [](https://instagram.com/mouredev)
45 | [](https://www.linkedin.com/in/braismoure/)
46 |
47 | ### Autor
48 | *Brais Moure. © 2018*
49 |
--------------------------------------------------------------------------------
/MyWKWebView/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // MyWKWebView
4 | //
5 | // Created by Brais Moure on 12/8/18.
6 | // Copyright © 2018 Brais Moure. All rights reserved.
7 | //
8 |
9 | import UIKit
10 | import WebKit
11 |
12 | final class ViewController: UIViewController {
13 |
14 | // MARK: - Outlets
15 | @IBOutlet weak var backButton: UIBarButtonItem!
16 | @IBOutlet weak var forwardButton: UIBarButtonItem!
17 |
18 | // MARK: - Private
19 | private let searchBar = UISearchBar()
20 | private var webView: WKWebView!
21 | private let refreshControl = UIRefreshControl()
22 | private let baseUrl = "http://www.google.com"
23 | private let searchPath = "/search?q="
24 |
25 | override func viewDidLoad() {
26 | super.viewDidLoad()
27 |
28 | // Navigation buttons
29 | backButton.isEnabled = false
30 | forwardButton.isEnabled = false
31 |
32 | // Search bar
33 | self.navigationItem.titleView = searchBar
34 | searchBar.delegate = self
35 |
36 | // Web view
37 | let webViewPrefs = WKPreferences()
38 | webViewPrefs.javaScriptEnabled = true
39 | webViewPrefs.javaScriptCanOpenWindowsAutomatically = true
40 | let webViewConf = WKWebViewConfiguration()
41 | webViewConf.preferences = webViewPrefs
42 | webView = WKWebView(frame: view.frame, configuration: webViewConf)
43 | webView.autoresizingMask = [.flexibleWidth, .flexibleHeight]
44 | webView.scrollView.keyboardDismissMode = .onDrag
45 | view.addSubview(webView)
46 | webView.navigationDelegate = self
47 |
48 | // Refresh control
49 | refreshControl.addTarget(self, action: #selector(reload), for: .valueChanged)
50 | webView.scrollView.addSubview(refreshControl)
51 | view.bringSubview(toFront: refreshControl)
52 |
53 | // Load url
54 | load(url: baseUrl)
55 | }
56 |
57 | @IBAction func backButtonAction(_ sender: Any) {
58 | webView.goBack()
59 | }
60 |
61 | @IBAction func forwardButtonAction(_ sender: Any) {
62 | webView.goForward()
63 | }
64 |
65 | // MARK: - Private methods
66 |
67 | private func load(url: String) {
68 |
69 | var urlToLoad: URL!
70 | if let url = URL(string: url), UIApplication.shared.canOpenURL(url) {
71 | urlToLoad = url
72 | } else {
73 | urlToLoad = URL(string: "\(baseUrl)\(searchPath)\(url)")!
74 | }
75 | webView.load(URLRequest(url: urlToLoad))
76 | }
77 |
78 | @objc private func reload() {
79 | webView.reload()
80 | }
81 |
82 | }
83 |
84 | // MARK: - UISearchBarDelegate
85 |
86 | extension ViewController: UISearchBarDelegate {
87 |
88 | func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
89 |
90 | searchBar.endEditing(true)
91 | load(url: searchBar.text ?? "")
92 | }
93 |
94 | }
95 |
96 | // MARK: - WKNavigationDelegate
97 |
98 | extension ViewController: WKNavigationDelegate {
99 |
100 | // Finish
101 | func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
102 |
103 | refreshControl.endRefreshing()
104 | backButton.isEnabled = webView.canGoBack
105 | forwardButton.isEnabled = webView.canGoForward
106 | view.bringSubview(toFront: refreshControl)
107 | }
108 |
109 | // Start
110 | func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
111 |
112 | refreshControl.beginRefreshing()
113 | searchBar.text = webView.url?.absoluteString
114 | }
115 |
116 | // Error
117 | func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
118 |
119 | refreshControl.beginRefreshing()
120 | view.bringSubview(toFront: refreshControl)
121 | }
122 |
123 | }
124 |
125 |
--------------------------------------------------------------------------------
/MyWKWebView/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
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 |
--------------------------------------------------------------------------------
/MyWKWebView.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 50;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | AC2D77D621203E2C00A33222 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC2D77D521203E2C00A33222 /* AppDelegate.swift */; };
11 | AC2D77D821203E2C00A33222 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AC2D77D721203E2C00A33222 /* ViewController.swift */; };
12 | AC2D77DB21203E2C00A33222 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AC2D77D921203E2C00A33222 /* Main.storyboard */; };
13 | AC2D77DD21203E2D00A33222 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = AC2D77DC21203E2D00A33222 /* Assets.xcassets */; };
14 | AC2D77E021203E2D00A33222 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AC2D77DE21203E2D00A33222 /* LaunchScreen.storyboard */; };
15 | /* End PBXBuildFile section */
16 |
17 | /* Begin PBXFileReference section */
18 | AC2D77D221203E2C00A33222 /* MyWKWebView.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MyWKWebView.app; sourceTree = BUILT_PRODUCTS_DIR; };
19 | AC2D77D521203E2C00A33222 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
20 | AC2D77D721203E2C00A33222 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
21 | AC2D77DA21203E2C00A33222 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
22 | AC2D77DC21203E2D00A33222 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
23 | AC2D77DF21203E2D00A33222 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
24 | AC2D77E121203E2D00A33222 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
25 | /* End PBXFileReference section */
26 |
27 | /* Begin PBXFrameworksBuildPhase section */
28 | AC2D77CF21203E2C00A33222 /* Frameworks */ = {
29 | isa = PBXFrameworksBuildPhase;
30 | buildActionMask = 2147483647;
31 | files = (
32 | );
33 | runOnlyForDeploymentPostprocessing = 0;
34 | };
35 | /* End PBXFrameworksBuildPhase section */
36 |
37 | /* Begin PBXGroup section */
38 | AC2D77C921203E2C00A33222 = {
39 | isa = PBXGroup;
40 | children = (
41 | AC2D77D421203E2C00A33222 /* MyWKWebView */,
42 | AC2D77D321203E2C00A33222 /* Products */,
43 | );
44 | sourceTree = "";
45 | };
46 | AC2D77D321203E2C00A33222 /* Products */ = {
47 | isa = PBXGroup;
48 | children = (
49 | AC2D77D221203E2C00A33222 /* MyWKWebView.app */,
50 | );
51 | name = Products;
52 | sourceTree = "";
53 | };
54 | AC2D77D421203E2C00A33222 /* MyWKWebView */ = {
55 | isa = PBXGroup;
56 | children = (
57 | AC2D77D521203E2C00A33222 /* AppDelegate.swift */,
58 | AC2D77D721203E2C00A33222 /* ViewController.swift */,
59 | AC2D77D921203E2C00A33222 /* Main.storyboard */,
60 | AC2D77DC21203E2D00A33222 /* Assets.xcassets */,
61 | AC2D77DE21203E2D00A33222 /* LaunchScreen.storyboard */,
62 | AC2D77E121203E2D00A33222 /* Info.plist */,
63 | );
64 | path = MyWKWebView;
65 | sourceTree = "";
66 | };
67 | /* End PBXGroup section */
68 |
69 | /* Begin PBXNativeTarget section */
70 | AC2D77D121203E2C00A33222 /* MyWKWebView */ = {
71 | isa = PBXNativeTarget;
72 | buildConfigurationList = AC2D77E421203E2D00A33222 /* Build configuration list for PBXNativeTarget "MyWKWebView" */;
73 | buildPhases = (
74 | AC2D77CE21203E2C00A33222 /* Sources */,
75 | AC2D77CF21203E2C00A33222 /* Frameworks */,
76 | AC2D77D021203E2C00A33222 /* Resources */,
77 | );
78 | buildRules = (
79 | );
80 | dependencies = (
81 | );
82 | name = MyWKWebView;
83 | productName = MyWKWebView;
84 | productReference = AC2D77D221203E2C00A33222 /* MyWKWebView.app */;
85 | productType = "com.apple.product-type.application";
86 | };
87 | /* End PBXNativeTarget section */
88 |
89 | /* Begin PBXProject section */
90 | AC2D77CA21203E2C00A33222 /* Project object */ = {
91 | isa = PBXProject;
92 | attributes = {
93 | LastSwiftUpdateCheck = 0940;
94 | LastUpgradeCheck = 0940;
95 | ORGANIZATIONNAME = "Brais Moure";
96 | TargetAttributes = {
97 | AC2D77D121203E2C00A33222 = {
98 | CreatedOnToolsVersion = 9.4.1;
99 | };
100 | };
101 | };
102 | buildConfigurationList = AC2D77CD21203E2C00A33222 /* Build configuration list for PBXProject "MyWKWebView" */;
103 | compatibilityVersion = "Xcode 9.3";
104 | developmentRegion = en;
105 | hasScannedForEncodings = 0;
106 | knownRegions = (
107 | en,
108 | Base,
109 | );
110 | mainGroup = AC2D77C921203E2C00A33222;
111 | productRefGroup = AC2D77D321203E2C00A33222 /* Products */;
112 | projectDirPath = "";
113 | projectRoot = "";
114 | targets = (
115 | AC2D77D121203E2C00A33222 /* MyWKWebView */,
116 | );
117 | };
118 | /* End PBXProject section */
119 |
120 | /* Begin PBXResourcesBuildPhase section */
121 | AC2D77D021203E2C00A33222 /* Resources */ = {
122 | isa = PBXResourcesBuildPhase;
123 | buildActionMask = 2147483647;
124 | files = (
125 | AC2D77E021203E2D00A33222 /* LaunchScreen.storyboard in Resources */,
126 | AC2D77DD21203E2D00A33222 /* Assets.xcassets in Resources */,
127 | AC2D77DB21203E2C00A33222 /* Main.storyboard in Resources */,
128 | );
129 | runOnlyForDeploymentPostprocessing = 0;
130 | };
131 | /* End PBXResourcesBuildPhase section */
132 |
133 | /* Begin PBXSourcesBuildPhase section */
134 | AC2D77CE21203E2C00A33222 /* Sources */ = {
135 | isa = PBXSourcesBuildPhase;
136 | buildActionMask = 2147483647;
137 | files = (
138 | AC2D77D821203E2C00A33222 /* ViewController.swift in Sources */,
139 | AC2D77D621203E2C00A33222 /* AppDelegate.swift in Sources */,
140 | );
141 | runOnlyForDeploymentPostprocessing = 0;
142 | };
143 | /* End PBXSourcesBuildPhase section */
144 |
145 | /* Begin PBXVariantGroup section */
146 | AC2D77D921203E2C00A33222 /* Main.storyboard */ = {
147 | isa = PBXVariantGroup;
148 | children = (
149 | AC2D77DA21203E2C00A33222 /* Base */,
150 | );
151 | name = Main.storyboard;
152 | sourceTree = "";
153 | };
154 | AC2D77DE21203E2D00A33222 /* LaunchScreen.storyboard */ = {
155 | isa = PBXVariantGroup;
156 | children = (
157 | AC2D77DF21203E2D00A33222 /* Base */,
158 | );
159 | name = LaunchScreen.storyboard;
160 | sourceTree = "";
161 | };
162 | /* End PBXVariantGroup section */
163 |
164 | /* Begin XCBuildConfiguration section */
165 | AC2D77E221203E2D00A33222 /* Debug */ = {
166 | isa = XCBuildConfiguration;
167 | buildSettings = {
168 | ALWAYS_SEARCH_USER_PATHS = NO;
169 | CLANG_ANALYZER_NONNULL = YES;
170 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
171 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
172 | CLANG_CXX_LIBRARY = "libc++";
173 | CLANG_ENABLE_MODULES = YES;
174 | CLANG_ENABLE_OBJC_ARC = YES;
175 | CLANG_ENABLE_OBJC_WEAK = YES;
176 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
177 | CLANG_WARN_BOOL_CONVERSION = YES;
178 | CLANG_WARN_COMMA = YES;
179 | CLANG_WARN_CONSTANT_CONVERSION = YES;
180 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
181 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
182 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
183 | CLANG_WARN_EMPTY_BODY = YES;
184 | CLANG_WARN_ENUM_CONVERSION = YES;
185 | CLANG_WARN_INFINITE_RECURSION = YES;
186 | CLANG_WARN_INT_CONVERSION = YES;
187 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
188 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
189 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
190 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
191 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
192 | CLANG_WARN_STRICT_PROTOTYPES = YES;
193 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
194 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
195 | CLANG_WARN_UNREACHABLE_CODE = YES;
196 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
197 | CODE_SIGN_IDENTITY = "iPhone Developer";
198 | COPY_PHASE_STRIP = NO;
199 | DEBUG_INFORMATION_FORMAT = dwarf;
200 | ENABLE_STRICT_OBJC_MSGSEND = YES;
201 | ENABLE_TESTABILITY = YES;
202 | GCC_C_LANGUAGE_STANDARD = gnu11;
203 | GCC_DYNAMIC_NO_PIC = NO;
204 | GCC_NO_COMMON_BLOCKS = YES;
205 | GCC_OPTIMIZATION_LEVEL = 0;
206 | GCC_PREPROCESSOR_DEFINITIONS = (
207 | "DEBUG=1",
208 | "$(inherited)",
209 | );
210 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
211 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
212 | GCC_WARN_UNDECLARED_SELECTOR = YES;
213 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
214 | GCC_WARN_UNUSED_FUNCTION = YES;
215 | GCC_WARN_UNUSED_VARIABLE = YES;
216 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
217 | MTL_ENABLE_DEBUG_INFO = YES;
218 | ONLY_ACTIVE_ARCH = YES;
219 | SDKROOT = iphoneos;
220 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
221 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
222 | };
223 | name = Debug;
224 | };
225 | AC2D77E321203E2D00A33222 /* Release */ = {
226 | isa = XCBuildConfiguration;
227 | buildSettings = {
228 | ALWAYS_SEARCH_USER_PATHS = NO;
229 | CLANG_ANALYZER_NONNULL = YES;
230 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
231 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
232 | CLANG_CXX_LIBRARY = "libc++";
233 | CLANG_ENABLE_MODULES = YES;
234 | CLANG_ENABLE_OBJC_ARC = YES;
235 | CLANG_ENABLE_OBJC_WEAK = YES;
236 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
237 | CLANG_WARN_BOOL_CONVERSION = YES;
238 | CLANG_WARN_COMMA = YES;
239 | CLANG_WARN_CONSTANT_CONVERSION = YES;
240 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
241 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
242 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
243 | CLANG_WARN_EMPTY_BODY = YES;
244 | CLANG_WARN_ENUM_CONVERSION = YES;
245 | CLANG_WARN_INFINITE_RECURSION = YES;
246 | CLANG_WARN_INT_CONVERSION = YES;
247 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
248 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
249 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
250 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
251 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
252 | CLANG_WARN_STRICT_PROTOTYPES = YES;
253 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
254 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
255 | CLANG_WARN_UNREACHABLE_CODE = YES;
256 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
257 | CODE_SIGN_IDENTITY = "iPhone Developer";
258 | COPY_PHASE_STRIP = NO;
259 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
260 | ENABLE_NS_ASSERTIONS = NO;
261 | ENABLE_STRICT_OBJC_MSGSEND = YES;
262 | GCC_C_LANGUAGE_STANDARD = gnu11;
263 | GCC_NO_COMMON_BLOCKS = YES;
264 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
265 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
266 | GCC_WARN_UNDECLARED_SELECTOR = YES;
267 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
268 | GCC_WARN_UNUSED_FUNCTION = YES;
269 | GCC_WARN_UNUSED_VARIABLE = YES;
270 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
271 | MTL_ENABLE_DEBUG_INFO = NO;
272 | SDKROOT = iphoneos;
273 | SWIFT_COMPILATION_MODE = wholemodule;
274 | SWIFT_OPTIMIZATION_LEVEL = "-O";
275 | VALIDATE_PRODUCT = YES;
276 | };
277 | name = Release;
278 | };
279 | AC2D77E521203E2D00A33222 /* Debug */ = {
280 | isa = XCBuildConfiguration;
281 | buildSettings = {
282 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
283 | CODE_SIGN_STYLE = Automatic;
284 | DEVELOPMENT_TEAM = SJGR47U9J5;
285 | INFOPLIST_FILE = MyWKWebView/Info.plist;
286 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
287 | LD_RUNPATH_SEARCH_PATHS = (
288 | "$(inherited)",
289 | "@executable_path/Frameworks",
290 | );
291 | PRODUCT_BUNDLE_IDENTIFIER = com.mouredev.MyWKWebView;
292 | PRODUCT_NAME = "$(TARGET_NAME)";
293 | SWIFT_VERSION = 4.0;
294 | TARGETED_DEVICE_FAMILY = "1,2";
295 | };
296 | name = Debug;
297 | };
298 | AC2D77E621203E2D00A33222 /* Release */ = {
299 | isa = XCBuildConfiguration;
300 | buildSettings = {
301 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
302 | CODE_SIGN_STYLE = Automatic;
303 | DEVELOPMENT_TEAM = SJGR47U9J5;
304 | INFOPLIST_FILE = MyWKWebView/Info.plist;
305 | IPHONEOS_DEPLOYMENT_TARGET = 9.0;
306 | LD_RUNPATH_SEARCH_PATHS = (
307 | "$(inherited)",
308 | "@executable_path/Frameworks",
309 | );
310 | PRODUCT_BUNDLE_IDENTIFIER = com.mouredev.MyWKWebView;
311 | PRODUCT_NAME = "$(TARGET_NAME)";
312 | SWIFT_VERSION = 4.0;
313 | TARGETED_DEVICE_FAMILY = "1,2";
314 | };
315 | name = Release;
316 | };
317 | /* End XCBuildConfiguration section */
318 |
319 | /* Begin XCConfigurationList section */
320 | AC2D77CD21203E2C00A33222 /* Build configuration list for PBXProject "MyWKWebView" */ = {
321 | isa = XCConfigurationList;
322 | buildConfigurations = (
323 | AC2D77E221203E2D00A33222 /* Debug */,
324 | AC2D77E321203E2D00A33222 /* Release */,
325 | );
326 | defaultConfigurationIsVisible = 0;
327 | defaultConfigurationName = Release;
328 | };
329 | AC2D77E421203E2D00A33222 /* Build configuration list for PBXNativeTarget "MyWKWebView" */ = {
330 | isa = XCConfigurationList;
331 | buildConfigurations = (
332 | AC2D77E521203E2D00A33222 /* Debug */,
333 | AC2D77E621203E2D00A33222 /* Release */,
334 | );
335 | defaultConfigurationIsVisible = 0;
336 | defaultConfigurationName = Release;
337 | };
338 | /* End XCConfigurationList section */
339 | };
340 | rootObject = AC2D77CA21203E2C00A33222 /* Project object */;
341 | }
342 |
--------------------------------------------------------------------------------