├── .gitignore ├── Assets ├── WKWebViewController.png └── WKWebViewController.psd ├── LICENSE.md ├── README.adoc ├── Sample ├── Podfile ├── Podfile.lock ├── Pods │ ├── Local Podspecs │ │ ├── WKWebViewController.podspec.json │ │ └── WebViewController.podspec.json │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ ├── project.pbxproj │ │ └── xcuserdata │ │ │ ├── Meniny.xcuserdatad │ │ │ └── xcschemes │ │ │ │ ├── Pods-Sample.xcscheme │ │ │ │ ├── WKWebViewController.xcscheme │ │ │ │ └── xcschememanagement.plist │ │ │ └── elias.xcuserdatad │ │ │ └── xcschemes │ │ │ ├── JustLayout.xcscheme │ │ │ ├── Pods-Sample.xcscheme │ │ │ ├── WKWebViewController.xcscheme │ │ │ └── xcschememanagement.plist │ └── Target Support Files │ │ ├── JustLayout │ │ ├── Info.plist │ │ ├── JustLayout-dummy.m │ │ ├── JustLayout-prefix.pch │ │ ├── JustLayout-umbrella.h │ │ ├── JustLayout.modulemap │ │ └── JustLayout.xcconfig │ │ ├── Pods-Sample │ │ ├── Info.plist │ │ ├── Pods-Sample-acknowledgements.markdown │ │ ├── Pods-Sample-acknowledgements.plist │ │ ├── Pods-Sample-dummy.m │ │ ├── Pods-Sample-frameworks.sh │ │ ├── Pods-Sample-resources.sh │ │ ├── Pods-Sample-umbrella.h │ │ ├── Pods-Sample.debug.xcconfig │ │ ├── Pods-Sample.modulemap │ │ └── Pods-Sample.release.xcconfig │ │ └── WKWebViewController │ │ ├── Info.plist │ │ ├── WKWebViewController-dummy.m │ │ ├── WKWebViewController-prefix.pch │ │ ├── WKWebViewController-umbrella.h │ │ ├── WKWebViewController.modulemap │ │ └── WKWebViewController.xcconfig ├── Sample.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcuserdata │ │ ├── Meniny.xcuserdatad │ │ └── xcschemes │ │ │ └── xcschememanagement.plist │ │ └── elias.xcuserdatad │ │ └── xcschemes │ │ └── xcschememanagement.plist ├── Sample.xcworkspace │ ├── contents.xcworkspacedata │ ├── xcshareddata │ │ └── IDEWorkspaceChecks.plist │ └── xcuserdata │ │ ├── Meniny.xcuserdatad │ │ └── xcdebugger │ │ │ └── Breakpoints_v2.xcbkptlist │ │ └── elias.xcuserdatad │ │ └── UserInterfaceState.xcuserstate └── Sample │ ├── AppDelegate.swift │ ├── Assets.xcassets │ └── AppIcon.appiconset │ │ └── Contents.json │ ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard │ ├── Info.plist │ └── ViewController.swift ├── WKWebViewController.podspec └── WKWebViewController ├── Assets.xcassets ├── Back.imageset │ ├── Back.png │ ├── Back@2x.png │ ├── Back@3x.png │ └── Contents.json ├── Contents.json └── Forward.imageset │ ├── Contents.json │ ├── Forward.png │ ├── Forward@2x.png │ └── Forward@3x.png ├── Enums.swift └── WKWebViewController.swift /.gitignore: -------------------------------------------------------------------------------- 1 | 2 | .DS_Store 3 | Pods 4 | *.xcuserstate 5 | *.xcuserstate 6 | -------------------------------------------------------------------------------- /Assets/WKWebViewController.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Meniny/WKWebViewController/5a826c2917d3cc4840188efe2ec641ba5e225450/Assets/WKWebViewController.png -------------------------------------------------------------------------------- /Assets/WKWebViewController.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Meniny/WKWebViewController/5a826c2917d3cc4840188efe2ec641ba5e225450/Assets/WKWebViewController.psd -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Meniny 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /README.adoc: -------------------------------------------------------------------------------- 1 | :name: WKWebViewController 2 | :author: Elias Abel 3 | :author_esc: Elias%20Abel 4 | :mail: admin@meniny.cn 5 | :desc: an UIViewController with WKWebView inside 6 | :icon: {name}.png 7 | :version: 1.3.0 8 | :na: N/A 9 | :ios: 9.0 10 | :macos: {na} 11 | :watchos: {na} 12 | :tvos: {na} 13 | :linux: {na} 14 | :xcode: 9.3 15 | :swift: 5 16 | :license: MIT 17 | :sep: %20%7C%20 18 | :platform: iOS 19 | = Meet `{name}` 20 | {author} <{mail}> 21 | v{version}, 2019-04-16 22 | 23 | [subs="attributes"] 24 | ++++ 25 |

26 | {name} 27 |

28 | Author 29 | EMail 30 | MIT 31 |
32 | Version 33 | Platforms 34 | Swift 35 |
36 | Build Passing 37 | Cocoapods 38 | Carthage 39 | SPM 40 |

41 | ++++ 42 | 43 | :toc: 44 | 45 | == 🏵 Introduction 46 | 47 | **{name}** is {desc}. 48 | 49 | == 📋 Requirements 50 | 51 | [%header] 52 | |=== 53 | 2+^m|Type 1+^m|Requirement 54 | 55 | 1.5+^.^|Platform ^|iOS ^|{ios}+ 56 | ^|macOS ^|{macos} 57 | ^|tvOS ^|{tvos} 58 | ^|watchOS ^|{watchos} 59 | ^|Linux ^|{linux} 60 | 61 | ^|IDE ^|Xcode ^| {xcode}+ 62 | ^|Language ^|Swift ^| {swift}+ 63 | |=== 64 | 65 | == 📲 Installation 66 | 67 | === CocoaPods 68 | 69 | `{name}` is available on link:https://cocoapods.org[CocoaPods]. 70 | 71 | [source, ruby, subs="verbatim,attributes"] 72 | ---- 73 | use_frameworks! 74 | pod '{name}' 75 | ---- 76 | 77 | === Manually 78 | 79 | Copy all files in the `{name}` directory into your project. 80 | 81 | == 🛌 Dependency 82 | 83 | * link:https://github.com/Meniny/JustLayout[JustLayout] 84 | 85 | == ❤️ Contribution 86 | 87 | You are welcome to fork and submit pull requests. 88 | 89 | === Thanks 90 | 91 | Thanks to all the contributors 🎉: 92 | 93 | * link:https://github.com/cathandnya/[@cathandnya] 94 | 95 | == 🔖 License 96 | 97 | `{name}` is open-sourced software, licensed under the link:./LICENSE.md[`{license}`] license. 98 | 99 | == 🔫 Usage 100 | 101 | [source, swift, subs="verbatim,attributes"] 102 | ---- 103 | import {name} 104 | ---- 105 | -------------------------------------------------------------------------------- /Sample/Podfile: -------------------------------------------------------------------------------- 1 | platform :ios, '9.0' 2 | 3 | target 'Sample' do 4 | use_frameworks! 5 | pod 'WKWebViewController', :path => '../' 6 | 7 | end 8 | -------------------------------------------------------------------------------- /Sample/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - JustLayout (1.6.1): 3 | - JustLayout/Core (= 1.6.1) 4 | - JustLayout/Core (1.6.1) 5 | - WKWebViewController (1.3.0): 6 | - JustLayout 7 | 8 | DEPENDENCIES: 9 | - WKWebViewController (from `../`) 10 | 11 | SPEC REPOS: 12 | https://github.com/cocoapods/specs.git: 13 | - JustLayout 14 | 15 | EXTERNAL SOURCES: 16 | WKWebViewController: 17 | :path: "../" 18 | 19 | SPEC CHECKSUMS: 20 | JustLayout: 93629690e8b1512c7dbfa6a37797eda9983327e2 21 | WKWebViewController: a66f917d83e4eba92eee8b877faa4fbc5fc6ccc9 22 | 23 | PODFILE CHECKSUM: 062c96d656d3cc60990854068817a19657ddbf24 24 | 25 | COCOAPODS: 1.7.0.beta.3 26 | -------------------------------------------------------------------------------- /Sample/Pods/Local Podspecs/WKWebViewController.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "WKWebViewController", 3 | "version": "1.3.0", 4 | "summary": "An UIViewController with WKWebView inside.", 5 | "homepage": "https://github.com/Meniny/WKWebViewController", 6 | "license": { 7 | "type": "MIT", 8 | "file": "LICENSE.md" 9 | }, 10 | "authors": "Elias Abel", 11 | "source": { 12 | "git": "https://github.com/Meniny/WKWebViewController.git", 13 | "tag": "1.3.0" 14 | }, 15 | "swift_versions": "5", 16 | "social_media_url": "https://meniny.cn/", 17 | "source_files": "WKWebViewController/**/*.swift", 18 | "resources": "WKWebViewController/Assets.xcassets", 19 | "requires_arc": true, 20 | "platforms": { 21 | "ios": "9.0" 22 | }, 23 | "dependencies": { 24 | "JustLayout": [ 25 | 26 | ] 27 | }, 28 | "description": "WKWebViewController is an UIViewController with WKWebView inside.", 29 | "module_name": "WKWebViewController" 30 | } 31 | -------------------------------------------------------------------------------- /Sample/Pods/Local Podspecs/WebViewController.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "WebViewController", 3 | "version": "1.0.0", 4 | "summary": "An UIViewController with WKWebView inside.", 5 | "homepage": "https://github.com/Meniny/WebViewController", 6 | "license": { 7 | "type": "MIT", 8 | "file": "LICENSE.md" 9 | }, 10 | "authors": "Elias Abel", 11 | "source": { 12 | "git": "https://github.com/Meniny/WebViewController.git", 13 | "tag": "1.0.0" 14 | }, 15 | "social_media_url": "https://meniny.cn/", 16 | "source_files": "WebViewController/**/*.swift", 17 | "resources": "WebViewController/Assets.xcassets", 18 | "requires_arc": true, 19 | "platforms": { 20 | "ios": "9.0" 21 | }, 22 | "description": "WebViewController is an UIViewController with WKWebView inside.", 23 | "module_name": "WebViewController" 24 | } 25 | -------------------------------------------------------------------------------- /Sample/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - JustLayout (1.6.1): 3 | - JustLayout/Core (= 1.6.1) 4 | - JustLayout/Core (1.6.1) 5 | - WKWebViewController (1.3.0): 6 | - JustLayout 7 | 8 | DEPENDENCIES: 9 | - WKWebViewController (from `../`) 10 | 11 | SPEC REPOS: 12 | https://github.com/cocoapods/specs.git: 13 | - JustLayout 14 | 15 | EXTERNAL SOURCES: 16 | WKWebViewController: 17 | :path: "../" 18 | 19 | SPEC CHECKSUMS: 20 | JustLayout: 93629690e8b1512c7dbfa6a37797eda9983327e2 21 | WKWebViewController: a66f917d83e4eba92eee8b877faa4fbc5fc6ccc9 22 | 23 | PODFILE CHECKSUM: 062c96d656d3cc60990854068817a19657ddbf24 24 | 25 | COCOAPODS: 1.7.0.beta.3 26 | -------------------------------------------------------------------------------- /Sample/Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 48; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 07653184EEB2AB3641C79FEAB76E3904 /* JustLayout+GetConstraint.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D3FB2105306BA5602C7545CAC514A53 /* JustLayout+GetConstraint.swift */; }; 11 | 15FCDF9E2A8A8B5F3B7148924E7063A9 /* JustLayout.swift in Sources */ = {isa = PBXBuildFile; fileRef = 10C870BEEF1BBBC6528D12CF3D859958 /* JustLayout.swift */; }; 12 | 1A95EBD7482053AA6E7A58275513DEE5 /* JustLayout+Fill.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BDFFA8C357893BC7FEA0492A8A143A5 /* JustLayout+Fill.swift */; }; 13 | 1F98CA5EDFD7A031F4EAE53EB23ED98E /* JustLayout+Operators.swift in Sources */ = {isa = PBXBuildFile; fileRef = FC92C844DA819CB38411CC0EC4F21058 /* JustLayout+Operators.swift */; }; 14 | 29C5AADEF23B4C6BD2CAAAFA089E34E2 /* JustLayout+Following.swift in Sources */ = {isa = PBXBuildFile; fileRef = 30D82F7693B3D8F2483E879990E26E4F /* JustLayout+Following.swift */; }; 15 | 2A4D46641C443E4634F9A10375F07172 /* JustLayout+Content.swift in Sources */ = {isa = PBXBuildFile; fileRef = C9B0F0E4961741479474B45B1C043E89 /* JustLayout+Content.swift */; }; 16 | 38136CE28DAECE8BD5AC06263BBDF3E9 /* JustLayout.h in Headers */ = {isa = PBXBuildFile; fileRef = E3671AD7550AC5ADA9CCDD07E96DD63B /* JustLayout.h */; settings = {ATTRIBUTES = (Public, ); }; }; 17 | 3DC40DADDA9480B39FBFA18E366792C5 /* JustLayout+FlexibleMargin.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1F51C99A8E5C5648DC036DBAABB345CC /* JustLayout+FlexibleMargin.swift */; }; 18 | 4056534DB44F321B453341BA9E2AE3DC /* JustLayout+Remake.swift in Sources */ = {isa = PBXBuildFile; fileRef = 786A66E6046DE72D7DE6D8B510793F6A /* JustLayout+Remake.swift */; }; 19 | 575215B6052CE7BC4E34F775101F21E1 /* JustLayout+Constraints.swift in Sources */ = {isa = PBXBuildFile; fileRef = 14C3448CFD0AEC16E37CB6150B95B27B /* JustLayout+Constraints.swift */; }; 20 | 66845F428C9C9B12DF224B92D0FF17FA /* JustLayout+Stacks.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17E90AEF24512FB0B1667E893BE894AB /* JustLayout+Stacks.swift */; }; 21 | 69CADD7EA2FDDF1ABDC1471110B5DAD8 /* JustLayout+HeightOperators.swift in Sources */ = {isa = PBXBuildFile; fileRef = 41D8A423349F047B62EAC8AF5F9503E8 /* JustLayout+HeightOperators.swift */; }; 22 | 6B66F8CED7EF61BA2BC1B4E648B68DDE /* JustLayout-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 1A8F46F92A831AC7D33180148E2F0C86 /* JustLayout-dummy.m */; }; 23 | 6DE7F3123E817A815C4736A419D3BE17 /* JustLayout+Tap.swift in Sources */ = {isa = PBXBuildFile; fileRef = 37B7ACBDDD6A1CABC0F00CE66B90F31E /* JustLayout+Tap.swift */; }; 24 | 6EE50C0385838FD7540C47C335ED8790 /* JustLayout.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 38DE9734CE3506D7C277CB9ED3F3DD67 /* JustLayout.framework */; }; 25 | 70BF53C5FF1D704FD014980217D6675A /* JustLayout+Percentage.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5BA353EBEC1AEA42CCE424A367613343 /* JustLayout+Percentage.swift */; }; 26 | 71FD00C6E48A2F6C510339429A07983B /* WKWebViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = BADF852D6F5106BE1D87C8A89F9D6DAD /* WKWebViewController.swift */; }; 27 | 72FE46E89764601E263150681082DD27 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2F903572436656AF7CB3B417A1A11FA /* Foundation.framework */; }; 28 | 7DC1586203C4FF138BB9D15A2DB35D9A /* JustLayout+Style.swift in Sources */ = {isa = PBXBuildFile; fileRef = F4081486D56ABBAF8E145706E374F498 /* JustLayout+Style.swift */; }; 29 | 85016DB7EA2E26FCBF85BFCDC63B546D /* JustLayout+LayoutAnchors.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0DF9252D3562EDF1081CC9314DCB7E54 /* JustLayout+LayoutAnchors.swift */; }; 30 | 855C89B2D383D83EBC4446D73E067A82 /* JustLayout+Position.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1105C6771FCF8F5A19C83B1A81CAAB48 /* JustLayout+Position.swift */; }; 31 | 980C151F9779CF61E31E6649E17F9D53 /* JustLayout+Alignment.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9161FA06E9DC16268D629A7D1DBCD10E /* JustLayout+Alignment.swift */; }; 32 | AA54BFFF07E52F8A87BC0C26DB30903D /* JustLayout+Hierarchy.swift in Sources */ = {isa = PBXBuildFile; fileRef = DE89B0A3EAC3699DB202EE52762FFB4F /* JustLayout+Hierarchy.swift */; }; 33 | BE8E7AF62EAD3BA578BC96478C50A036 /* WKWebViewController-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 8FA19D298D8C82BA435D9E46C25DC9E3 /* WKWebViewController-dummy.m */; }; 34 | CD0D3D005DF2A646600F886F38BC0CA8 /* JustLayout+Size.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1EA816A27BC1F30897A459EBE899A516 /* JustLayout+Size.swift */; }; 35 | CD385058B2939B84AA70FB8B580601FF /* Pods-Sample-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 9A03CD5534147A9FD92A24DF4B311437 /* Pods-Sample-dummy.m */; }; 36 | E3CE6A7D6C6CF49AA95B4BACC85B54A5 /* Enums.swift in Sources */ = {isa = PBXBuildFile; fileRef = 28E2854B40C640DDEC2955032EEA8333 /* Enums.swift */; }; 37 | E8BC14BB50E22D6777DA5B256D79CDC1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 9F783EA173027B391B5A673293EE5AA0 /* Assets.xcassets */; }; 38 | EB7DEF59ABC166D2AD62538C1097EC1F /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2F903572436656AF7CB3B417A1A11FA /* Foundation.framework */; }; 39 | F19843FEDCEFCEE50FC2410F0AFA6E05 /* JustLayout-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 34ACEE96A8DA98399CA7508F20C46E83 /* JustLayout-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 40 | F1E82941928D2CF82B377C3616E2FD51 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C2F903572436656AF7CB3B417A1A11FA /* Foundation.framework */; }; 41 | F25E2682C8CFF6B2A0E33EFB236A077F /* Pods-Sample-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 859A9C3FF8DAF43611B7457FC86B0142 /* Pods-Sample-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 42 | F2CFCC78A244EF281080551373F8E720 /* JustLayout+Equation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1881B1AE2EC416AB4095C2E6E7FF05A5 /* JustLayout+Equation.swift */; }; 43 | F5798DF6E88F435B2F9D78F931B72D76 /* JustLayout+Center.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3663035BC2F9FB3EC759959096A3A457 /* JustLayout+Center.swift */; }; 44 | FC8E9C02440C419E8B23E1F03A899A06 /* WKWebViewController-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 449D7876D536551ADEB697348A3BE561 /* WKWebViewController-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 45 | /* End PBXBuildFile section */ 46 | 47 | /* Begin PBXContainerItemProxy section */ 48 | 8E28BF760A387B0238D2FB67AC9A7207 /* PBXContainerItemProxy */ = { 49 | isa = PBXContainerItemProxy; 50 | containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; 51 | proxyType = 1; 52 | remoteGlobalIDString = 38E81C94D8A0123761FC5D426269C2BC; 53 | remoteInfo = WKWebViewController; 54 | }; 55 | BC47722D91D8BE2DB6A50138A89AEBAF /* PBXContainerItemProxy */ = { 56 | isa = PBXContainerItemProxy; 57 | containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; 58 | proxyType = 1; 59 | remoteGlobalIDString = 92DA9A5E711D887CC500599460C385B7; 60 | remoteInfo = JustLayout; 61 | }; 62 | E2F75C77DA8A2A4D5C97607E28F1A512 /* PBXContainerItemProxy */ = { 63 | isa = PBXContainerItemProxy; 64 | containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; 65 | proxyType = 1; 66 | remoteGlobalIDString = 92DA9A5E711D887CC500599460C385B7; 67 | remoteInfo = JustLayout; 68 | }; 69 | /* End PBXContainerItemProxy section */ 70 | 71 | /* Begin PBXFileReference section */ 72 | 02389EA12C2616D4C5778D5DE8C51296 /* WKWebViewController.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; path = WKWebViewController.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 73 | 0B1692077B2B61C40A9D996692389C86 /* Pods-Sample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Sample.release.xcconfig"; sourceTree = ""; }; 74 | 0CE816F02B1470A84A62E849FFC10B27 /* JustLayout.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = JustLayout.modulemap; sourceTree = ""; }; 75 | 0DF9252D3562EDF1081CC9314DCB7E54 /* JustLayout+LayoutAnchors.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "JustLayout+LayoutAnchors.swift"; path = "JustLayout/Core/Main/JustLayout+LayoutAnchors.swift"; sourceTree = ""; }; 76 | 10C870BEEF1BBBC6528D12CF3D859958 /* JustLayout.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = JustLayout.swift; path = JustLayout/Core/Main/JustLayout.swift; sourceTree = ""; }; 77 | 1105C6771FCF8F5A19C83B1A81CAAB48 /* JustLayout+Position.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "JustLayout+Position.swift"; path = "JustLayout/Core/Main/JustLayout+Position.swift"; sourceTree = ""; }; 78 | 11AC1C9D83DB5ABBEC922740FF8EB18B /* JustLayout.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = JustLayout.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 79 | 132CA629A285D4D90A24A3F363A53D6D /* WKWebViewController-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "WKWebViewController-Info.plist"; sourceTree = ""; }; 80 | 14C3448CFD0AEC16E37CB6150B95B27B /* JustLayout+Constraints.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "JustLayout+Constraints.swift"; path = "JustLayout/Core/Main/JustLayout+Constraints.swift"; sourceTree = ""; }; 81 | 17E90AEF24512FB0B1667E893BE894AB /* JustLayout+Stacks.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "JustLayout+Stacks.swift"; path = "JustLayout/Core/Main/JustLayout+Stacks.swift"; sourceTree = ""; }; 82 | 187E87546C20258ED9F6D08C2CFC27B8 /* LICENSE.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; path = LICENSE.md; sourceTree = ""; }; 83 | 1881B1AE2EC416AB4095C2E6E7FF05A5 /* JustLayout+Equation.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "JustLayout+Equation.swift"; path = "JustLayout/Core/Main/JustLayout+Equation.swift"; sourceTree = ""; }; 84 | 1A8F46F92A831AC7D33180148E2F0C86 /* JustLayout-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "JustLayout-dummy.m"; sourceTree = ""; }; 85 | 1C6426C7FFD6C1183915950C9FC8BD00 /* JustLayout-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "JustLayout-Info.plist"; sourceTree = ""; }; 86 | 1EA816A27BC1F30897A459EBE899A516 /* JustLayout+Size.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "JustLayout+Size.swift"; path = "JustLayout/Core/Main/JustLayout+Size.swift"; sourceTree = ""; }; 87 | 1F51C99A8E5C5648DC036DBAABB345CC /* JustLayout+FlexibleMargin.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "JustLayout+FlexibleMargin.swift"; path = "JustLayout/Core/Main/JustLayout+FlexibleMargin.swift"; sourceTree = ""; }; 88 | 28E2854B40C640DDEC2955032EEA8333 /* Enums.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Enums.swift; path = WKWebViewController/Enums.swift; sourceTree = ""; }; 89 | 30D82F7693B3D8F2483E879990E26E4F /* JustLayout+Following.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "JustLayout+Following.swift"; path = "JustLayout/Core/Main/JustLayout+Following.swift"; sourceTree = ""; }; 90 | 34ACEE96A8DA98399CA7508F20C46E83 /* JustLayout-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "JustLayout-umbrella.h"; sourceTree = ""; }; 91 | 3663035BC2F9FB3EC759959096A3A457 /* JustLayout+Center.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "JustLayout+Center.swift"; path = "JustLayout/Core/Main/JustLayout+Center.swift"; sourceTree = ""; }; 92 | 37B7ACBDDD6A1CABC0F00CE66B90F31E /* JustLayout+Tap.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "JustLayout+Tap.swift"; path = "JustLayout/Core/Extensions/JustLayout+Tap.swift"; sourceTree = ""; }; 93 | 38DE9734CE3506D7C277CB9ED3F3DD67 /* JustLayout.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = JustLayout.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 94 | 3DF87CDBF351C0A5F8589E22A0F52C54 /* Pods-Sample-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-Sample-acknowledgements.markdown"; sourceTree = ""; }; 95 | 3F4CECDA38C08BEAE89304FAF8F47441 /* Pods-Sample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-Sample.debug.xcconfig"; sourceTree = ""; }; 96 | 41D8A423349F047B62EAC8AF5F9503E8 /* JustLayout+HeightOperators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "JustLayout+HeightOperators.swift"; path = "JustLayout/Core/Main/JustLayout+HeightOperators.swift"; sourceTree = ""; }; 97 | 44053E42CB60A20133DF16CEB2B915AB /* Pods-Sample-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Sample-acknowledgements.plist"; sourceTree = ""; }; 98 | 449D7876D536551ADEB697348A3BE561 /* WKWebViewController-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "WKWebViewController-umbrella.h"; sourceTree = ""; }; 99 | 5BA353EBEC1AEA42CCE424A367613343 /* JustLayout+Percentage.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "JustLayout+Percentage.swift"; path = "JustLayout/Core/Main/JustLayout+Percentage.swift"; sourceTree = ""; }; 100 | 5BDFFA8C357893BC7FEA0492A8A143A5 /* JustLayout+Fill.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "JustLayout+Fill.swift"; path = "JustLayout/Core/Main/JustLayout+Fill.swift"; sourceTree = ""; }; 101 | 608D5D1E6F9F6F96F21FD1EBC0DC676B /* WKWebViewController-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "WKWebViewController-prefix.pch"; sourceTree = ""; }; 102 | 6D3FB2105306BA5602C7545CAC514A53 /* JustLayout+GetConstraint.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "JustLayout+GetConstraint.swift"; path = "JustLayout/Core/Main/JustLayout+GetConstraint.swift"; sourceTree = ""; }; 103 | 702F0F72F820E0F577FA82E8639A562D /* WKWebViewController.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = WKWebViewController.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 104 | 786A66E6046DE72D7DE6D8B510793F6A /* JustLayout+Remake.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "JustLayout+Remake.swift"; path = "JustLayout/Core/Main/JustLayout+Remake.swift"; sourceTree = ""; }; 105 | 7A792C5E2AB54643A7F9BD075FDFF0F4 /* README.adoc */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = README.adoc; sourceTree = ""; }; 106 | 859A9C3FF8DAF43611B7457FC86B0142 /* Pods-Sample-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-Sample-umbrella.h"; sourceTree = ""; }; 107 | 85E691C0024271E2D0092FA1EBACE452 /* Pods-Sample.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-Sample.modulemap"; sourceTree = ""; }; 108 | 8FA19D298D8C82BA435D9E46C25DC9E3 /* WKWebViewController-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "WKWebViewController-dummy.m"; sourceTree = ""; }; 109 | 9161FA06E9DC16268D629A7D1DBCD10E /* JustLayout+Alignment.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "JustLayout+Alignment.swift"; path = "JustLayout/Core/Main/JustLayout+Alignment.swift"; sourceTree = ""; }; 110 | 93BA5F32660E3285865571B5A896444C /* WKWebViewController.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = WKWebViewController.xcconfig; sourceTree = ""; }; 111 | 9A03CD5534147A9FD92A24DF4B311437 /* Pods-Sample-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-Sample-dummy.m"; sourceTree = ""; }; 112 | 9AB35F64666C379279CD93A9FF22ED5D /* Pods-Sample-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-Sample-Info.plist"; sourceTree = ""; }; 113 | 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 114 | 9F783EA173027B391B5A673293EE5AA0 /* Assets.xcassets */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = WKWebViewController/Assets.xcassets; sourceTree = ""; }; 115 | A677FFACB9D782A390660C6220E95CA3 /* JustLayout.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = JustLayout.xcconfig; sourceTree = ""; }; 116 | B865511747A2DE523FD3D6AA0A200A88 /* WKWebViewController.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = WKWebViewController.modulemap; sourceTree = ""; }; 117 | BADF852D6F5106BE1D87C8A89F9D6DAD /* WKWebViewController.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = WKWebViewController.swift; path = WKWebViewController/WKWebViewController.swift; sourceTree = ""; }; 118 | C119C16D3818D1439407B460BBC89C45 /* Pods_Sample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Sample.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 119 | C2F903572436656AF7CB3B417A1A11FA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 120 | C9B0F0E4961741479474B45B1C043E89 /* JustLayout+Content.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "JustLayout+Content.swift"; path = "JustLayout/Core/Extensions/JustLayout+Content.swift"; sourceTree = ""; }; 121 | DE89B0A3EAC3699DB202EE52762FFB4F /* JustLayout+Hierarchy.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "JustLayout+Hierarchy.swift"; path = "JustLayout/Core/Main/JustLayout+Hierarchy.swift"; sourceTree = ""; }; 122 | E3671AD7550AC5ADA9CCDD07E96DD63B /* JustLayout.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = JustLayout.h; path = JustLayout/JustLayout.h; sourceTree = ""; }; 123 | F4081486D56ABBAF8E145706E374F498 /* JustLayout+Style.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "JustLayout+Style.swift"; path = "JustLayout/Core/Extensions/JustLayout+Style.swift"; sourceTree = ""; }; 124 | F73885550FD8A2CFD84A2FED511FA220 /* Pods-Sample-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-Sample-frameworks.sh"; sourceTree = ""; }; 125 | F9FA989DA22504636FF0C7ACBABE58F3 /* JustLayout-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "JustLayout-prefix.pch"; sourceTree = ""; }; 126 | FC92C844DA819CB38411CC0EC4F21058 /* JustLayout+Operators.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = "JustLayout+Operators.swift"; path = "JustLayout/Core/Main/JustLayout+Operators.swift"; sourceTree = ""; }; 127 | /* End PBXFileReference section */ 128 | 129 | /* Begin PBXFrameworksBuildPhase section */ 130 | B404F5BFEDC4D9C44C7FD268503F91B1 /* Frameworks */ = { 131 | isa = PBXFrameworksBuildPhase; 132 | buildActionMask = 2147483647; 133 | files = ( 134 | 72FE46E89764601E263150681082DD27 /* Foundation.framework in Frameworks */, 135 | 6EE50C0385838FD7540C47C335ED8790 /* JustLayout.framework in Frameworks */, 136 | ); 137 | runOnlyForDeploymentPostprocessing = 0; 138 | }; 139 | BD2C4F53412402A6C7BE941F4090FAEB /* Frameworks */ = { 140 | isa = PBXFrameworksBuildPhase; 141 | buildActionMask = 2147483647; 142 | files = ( 143 | F1E82941928D2CF82B377C3616E2FD51 /* Foundation.framework in Frameworks */, 144 | ); 145 | runOnlyForDeploymentPostprocessing = 0; 146 | }; 147 | E7618A4A1AB9A3406586505B8C2ABA0E /* Frameworks */ = { 148 | isa = PBXFrameworksBuildPhase; 149 | buildActionMask = 2147483647; 150 | files = ( 151 | EB7DEF59ABC166D2AD62538C1097EC1F /* Foundation.framework in Frameworks */, 152 | ); 153 | runOnlyForDeploymentPostprocessing = 0; 154 | }; 155 | /* End PBXFrameworksBuildPhase section */ 156 | 157 | /* Begin PBXGroup section */ 158 | 06FAEF77E61B4A18193C5641FECA9209 /* WKWebViewController */ = { 159 | isa = PBXGroup; 160 | children = ( 161 | 28E2854B40C640DDEC2955032EEA8333 /* Enums.swift */, 162 | BADF852D6F5106BE1D87C8A89F9D6DAD /* WKWebViewController.swift */, 163 | 1B53FAB7CCAF78F22C2EF2C76EF67B04 /* Pod */, 164 | 91064F829620C615F325E8DE744182A0 /* Resources */, 165 | 5C0B8CE1D3804AE8F515FE28571E0909 /* Support Files */, 166 | ); 167 | name = WKWebViewController; 168 | path = ../..; 169 | sourceTree = ""; 170 | }; 171 | 0AB606AB6E0BC641E275E3CF87988BA2 /* Pods */ = { 172 | isa = PBXGroup; 173 | children = ( 174 | 4D5615B53BBF9C4D077EB6CCAD21B1CC /* JustLayout */, 175 | ); 176 | name = Pods; 177 | sourceTree = ""; 178 | }; 179 | 1B53FAB7CCAF78F22C2EF2C76EF67B04 /* Pod */ = { 180 | isa = PBXGroup; 181 | children = ( 182 | 187E87546C20258ED9F6D08C2CFC27B8 /* LICENSE.md */, 183 | 7A792C5E2AB54643A7F9BD075FDFF0F4 /* README.adoc */, 184 | 02389EA12C2616D4C5778D5DE8C51296 /* WKWebViewController.podspec */, 185 | ); 186 | name = Pod; 187 | sourceTree = ""; 188 | }; 189 | 23EBEA67BEF8D6F72C48397FA5EC9847 /* Targets Support Files */ = { 190 | isa = PBXGroup; 191 | children = ( 192 | 6602D307FBE2BE5A77398DF73B02D432 /* Pods-Sample */, 193 | ); 194 | name = "Targets Support Files"; 195 | sourceTree = ""; 196 | }; 197 | 4D5615B53BBF9C4D077EB6CCAD21B1CC /* JustLayout */ = { 198 | isa = PBXGroup; 199 | children = ( 200 | 78576E681F77E8B8FBC6167EBE311410 /* Core */, 201 | CC5F03C3ED446535B85855A5BD651807 /* Support Files */, 202 | ); 203 | path = JustLayout; 204 | sourceTree = ""; 205 | }; 206 | 4D712457676BF2EB72BC45B45D0CC5F4 /* iOS */ = { 207 | isa = PBXGroup; 208 | children = ( 209 | C2F903572436656AF7CB3B417A1A11FA /* Foundation.framework */, 210 | ); 211 | name = iOS; 212 | sourceTree = ""; 213 | }; 214 | 5C0B8CE1D3804AE8F515FE28571E0909 /* Support Files */ = { 215 | isa = PBXGroup; 216 | children = ( 217 | B865511747A2DE523FD3D6AA0A200A88 /* WKWebViewController.modulemap */, 218 | 93BA5F32660E3285865571B5A896444C /* WKWebViewController.xcconfig */, 219 | 8FA19D298D8C82BA435D9E46C25DC9E3 /* WKWebViewController-dummy.m */, 220 | 132CA629A285D4D90A24A3F363A53D6D /* WKWebViewController-Info.plist */, 221 | 608D5D1E6F9F6F96F21FD1EBC0DC676B /* WKWebViewController-prefix.pch */, 222 | 449D7876D536551ADEB697348A3BE561 /* WKWebViewController-umbrella.h */, 223 | ); 224 | name = "Support Files"; 225 | path = "Sample/Pods/Target Support Files/WKWebViewController"; 226 | sourceTree = ""; 227 | }; 228 | 6602D307FBE2BE5A77398DF73B02D432 /* Pods-Sample */ = { 229 | isa = PBXGroup; 230 | children = ( 231 | 85E691C0024271E2D0092FA1EBACE452 /* Pods-Sample.modulemap */, 232 | 3DF87CDBF351C0A5F8589E22A0F52C54 /* Pods-Sample-acknowledgements.markdown */, 233 | 44053E42CB60A20133DF16CEB2B915AB /* Pods-Sample-acknowledgements.plist */, 234 | 9A03CD5534147A9FD92A24DF4B311437 /* Pods-Sample-dummy.m */, 235 | F73885550FD8A2CFD84A2FED511FA220 /* Pods-Sample-frameworks.sh */, 236 | 9AB35F64666C379279CD93A9FF22ED5D /* Pods-Sample-Info.plist */, 237 | 859A9C3FF8DAF43611B7457FC86B0142 /* Pods-Sample-umbrella.h */, 238 | 3F4CECDA38C08BEAE89304FAF8F47441 /* Pods-Sample.debug.xcconfig */, 239 | 0B1692077B2B61C40A9D996692389C86 /* Pods-Sample.release.xcconfig */, 240 | ); 241 | name = "Pods-Sample"; 242 | path = "Target Support Files/Pods-Sample"; 243 | sourceTree = ""; 244 | }; 245 | 6EDDC29FB8E433C164808E623C4317E4 /* Products */ = { 246 | isa = PBXGroup; 247 | children = ( 248 | 11AC1C9D83DB5ABBEC922740FF8EB18B /* JustLayout.framework */, 249 | C119C16D3818D1439407B460BBC89C45 /* Pods_Sample.framework */, 250 | 702F0F72F820E0F577FA82E8639A562D /* WKWebViewController.framework */, 251 | ); 252 | name = Products; 253 | sourceTree = ""; 254 | }; 255 | 78576E681F77E8B8FBC6167EBE311410 /* Core */ = { 256 | isa = PBXGroup; 257 | children = ( 258 | E3671AD7550AC5ADA9CCDD07E96DD63B /* JustLayout.h */, 259 | 10C870BEEF1BBBC6528D12CF3D859958 /* JustLayout.swift */, 260 | 9161FA06E9DC16268D629A7D1DBCD10E /* JustLayout+Alignment.swift */, 261 | 3663035BC2F9FB3EC759959096A3A457 /* JustLayout+Center.swift */, 262 | 14C3448CFD0AEC16E37CB6150B95B27B /* JustLayout+Constraints.swift */, 263 | C9B0F0E4961741479474B45B1C043E89 /* JustLayout+Content.swift */, 264 | 1881B1AE2EC416AB4095C2E6E7FF05A5 /* JustLayout+Equation.swift */, 265 | 5BDFFA8C357893BC7FEA0492A8A143A5 /* JustLayout+Fill.swift */, 266 | 1F51C99A8E5C5648DC036DBAABB345CC /* JustLayout+FlexibleMargin.swift */, 267 | 30D82F7693B3D8F2483E879990E26E4F /* JustLayout+Following.swift */, 268 | 6D3FB2105306BA5602C7545CAC514A53 /* JustLayout+GetConstraint.swift */, 269 | 41D8A423349F047B62EAC8AF5F9503E8 /* JustLayout+HeightOperators.swift */, 270 | DE89B0A3EAC3699DB202EE52762FFB4F /* JustLayout+Hierarchy.swift */, 271 | 0DF9252D3562EDF1081CC9314DCB7E54 /* JustLayout+LayoutAnchors.swift */, 272 | FC92C844DA819CB38411CC0EC4F21058 /* JustLayout+Operators.swift */, 273 | 5BA353EBEC1AEA42CCE424A367613343 /* JustLayout+Percentage.swift */, 274 | 1105C6771FCF8F5A19C83B1A81CAAB48 /* JustLayout+Position.swift */, 275 | 786A66E6046DE72D7DE6D8B510793F6A /* JustLayout+Remake.swift */, 276 | 1EA816A27BC1F30897A459EBE899A516 /* JustLayout+Size.swift */, 277 | 17E90AEF24512FB0B1667E893BE894AB /* JustLayout+Stacks.swift */, 278 | F4081486D56ABBAF8E145706E374F498 /* JustLayout+Style.swift */, 279 | 37B7ACBDDD6A1CABC0F00CE66B90F31E /* JustLayout+Tap.swift */, 280 | ); 281 | name = Core; 282 | sourceTree = ""; 283 | }; 284 | 91064F829620C615F325E8DE744182A0 /* Resources */ = { 285 | isa = PBXGroup; 286 | children = ( 287 | 9F783EA173027B391B5A673293EE5AA0 /* Assets.xcassets */, 288 | ); 289 | name = Resources; 290 | sourceTree = ""; 291 | }; 292 | A2DFB5E892A6B9DEF761EA6E58E31668 /* Development Pods */ = { 293 | isa = PBXGroup; 294 | children = ( 295 | 06FAEF77E61B4A18193C5641FECA9209 /* WKWebViewController */, 296 | ); 297 | name = "Development Pods"; 298 | sourceTree = ""; 299 | }; 300 | C388F57A970A2A44090830B25324D0EE /* Frameworks */ = { 301 | isa = PBXGroup; 302 | children = ( 303 | 38DE9734CE3506D7C277CB9ED3F3DD67 /* JustLayout.framework */, 304 | 4D712457676BF2EB72BC45B45D0CC5F4 /* iOS */, 305 | ); 306 | name = Frameworks; 307 | sourceTree = ""; 308 | }; 309 | CC5F03C3ED446535B85855A5BD651807 /* Support Files */ = { 310 | isa = PBXGroup; 311 | children = ( 312 | 0CE816F02B1470A84A62E849FFC10B27 /* JustLayout.modulemap */, 313 | A677FFACB9D782A390660C6220E95CA3 /* JustLayout.xcconfig */, 314 | 1A8F46F92A831AC7D33180148E2F0C86 /* JustLayout-dummy.m */, 315 | 1C6426C7FFD6C1183915950C9FC8BD00 /* JustLayout-Info.plist */, 316 | F9FA989DA22504636FF0C7ACBABE58F3 /* JustLayout-prefix.pch */, 317 | 34ACEE96A8DA98399CA7508F20C46E83 /* JustLayout-umbrella.h */, 318 | ); 319 | name = "Support Files"; 320 | path = "../Target Support Files/JustLayout"; 321 | sourceTree = ""; 322 | }; 323 | CF1408CF629C7361332E53B88F7BD30C = { 324 | isa = PBXGroup; 325 | children = ( 326 | 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, 327 | A2DFB5E892A6B9DEF761EA6E58E31668 /* Development Pods */, 328 | C388F57A970A2A44090830B25324D0EE /* Frameworks */, 329 | 0AB606AB6E0BC641E275E3CF87988BA2 /* Pods */, 330 | 6EDDC29FB8E433C164808E623C4317E4 /* Products */, 331 | 23EBEA67BEF8D6F72C48397FA5EC9847 /* Targets Support Files */, 332 | ); 333 | sourceTree = ""; 334 | }; 335 | /* End PBXGroup section */ 336 | 337 | /* Begin PBXHeadersBuildPhase section */ 338 | 16EAEF71C19F2BC308A84EFC0760C220 /* Headers */ = { 339 | isa = PBXHeadersBuildPhase; 340 | buildActionMask = 2147483647; 341 | files = ( 342 | F25E2682C8CFF6B2A0E33EFB236A077F /* Pods-Sample-umbrella.h in Headers */, 343 | ); 344 | runOnlyForDeploymentPostprocessing = 0; 345 | }; 346 | 53EA2F42221C10180EA555A10B57349F /* Headers */ = { 347 | isa = PBXHeadersBuildPhase; 348 | buildActionMask = 2147483647; 349 | files = ( 350 | F19843FEDCEFCEE50FC2410F0AFA6E05 /* JustLayout-umbrella.h in Headers */, 351 | 38136CE28DAECE8BD5AC06263BBDF3E9 /* JustLayout.h in Headers */, 352 | ); 353 | runOnlyForDeploymentPostprocessing = 0; 354 | }; 355 | DBFBE37B422FA2FA85BE0A04C1AFD9CD /* Headers */ = { 356 | isa = PBXHeadersBuildPhase; 357 | buildActionMask = 2147483647; 358 | files = ( 359 | FC8E9C02440C419E8B23E1F03A899A06 /* WKWebViewController-umbrella.h in Headers */, 360 | ); 361 | runOnlyForDeploymentPostprocessing = 0; 362 | }; 363 | /* End PBXHeadersBuildPhase section */ 364 | 365 | /* Begin PBXNativeTarget section */ 366 | 38E81C94D8A0123761FC5D426269C2BC /* WKWebViewController */ = { 367 | isa = PBXNativeTarget; 368 | buildConfigurationList = 51396A284E880C6FEFD885537F8AF53A /* Build configuration list for PBXNativeTarget "WKWebViewController" */; 369 | buildPhases = ( 370 | DBFBE37B422FA2FA85BE0A04C1AFD9CD /* Headers */, 371 | 38DBF59D4DB3B77E1B5BB1243699FF87 /* Sources */, 372 | B404F5BFEDC4D9C44C7FD268503F91B1 /* Frameworks */, 373 | 930D29DCA1BFF6E0EBE9672621CFACF9 /* Resources */, 374 | ); 375 | buildRules = ( 376 | ); 377 | dependencies = ( 378 | 2783A3F6D694814B294E40716A560EF9 /* PBXTargetDependency */, 379 | ); 380 | name = WKWebViewController; 381 | productName = WKWebViewController; 382 | productReference = 702F0F72F820E0F577FA82E8639A562D /* WKWebViewController.framework */; 383 | productType = "com.apple.product-type.framework"; 384 | }; 385 | 3D56F5BE8DAFC40C8A6EB6135F33F23F /* Pods-Sample */ = { 386 | isa = PBXNativeTarget; 387 | buildConfigurationList = 8814D0EFF5F9D949CB5C757099ECBD84 /* Build configuration list for PBXNativeTarget "Pods-Sample" */; 388 | buildPhases = ( 389 | 16EAEF71C19F2BC308A84EFC0760C220 /* Headers */, 390 | 478C56F5C87C56F4081B76A8C61D3825 /* Sources */, 391 | BD2C4F53412402A6C7BE941F4090FAEB /* Frameworks */, 392 | 547716C5B9925477779E6AE475A5D1B4 /* Resources */, 393 | ); 394 | buildRules = ( 395 | ); 396 | dependencies = ( 397 | 88728CCC1C950836FACAB69A0DB352B3 /* PBXTargetDependency */, 398 | 69F5A73679AD90BF23627FE7348F091F /* PBXTargetDependency */, 399 | ); 400 | name = "Pods-Sample"; 401 | productName = "Pods-Sample"; 402 | productReference = C119C16D3818D1439407B460BBC89C45 /* Pods_Sample.framework */; 403 | productType = "com.apple.product-type.framework"; 404 | }; 405 | 92DA9A5E711D887CC500599460C385B7 /* JustLayout */ = { 406 | isa = PBXNativeTarget; 407 | buildConfigurationList = 12471E22B08F6473EC4B205436D342E1 /* Build configuration list for PBXNativeTarget "JustLayout" */; 408 | buildPhases = ( 409 | 53EA2F42221C10180EA555A10B57349F /* Headers */, 410 | 4916205567A466B2F229E272506D757C /* Sources */, 411 | E7618A4A1AB9A3406586505B8C2ABA0E /* Frameworks */, 412 | C7B2A250C63BD3A9B7CFC729A1384D15 /* Resources */, 413 | ); 414 | buildRules = ( 415 | ); 416 | dependencies = ( 417 | ); 418 | name = JustLayout; 419 | productName = JustLayout; 420 | productReference = 11AC1C9D83DB5ABBEC922740FF8EB18B /* JustLayout.framework */; 421 | productType = "com.apple.product-type.framework"; 422 | }; 423 | /* End PBXNativeTarget section */ 424 | 425 | /* Begin PBXProject section */ 426 | BFDFE7DC352907FC980B868725387E98 /* Project object */ = { 427 | isa = PBXProject; 428 | attributes = { 429 | LastSwiftUpdateCheck = 0930; 430 | LastUpgradeCheck = 1020; 431 | }; 432 | buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; 433 | compatibilityVersion = "Xcode 8.0"; 434 | developmentRegion = English; 435 | hasScannedForEncodings = 0; 436 | knownRegions = ( 437 | English, 438 | en, 439 | ); 440 | mainGroup = CF1408CF629C7361332E53B88F7BD30C; 441 | productRefGroup = 6EDDC29FB8E433C164808E623C4317E4 /* Products */; 442 | projectDirPath = ""; 443 | projectRoot = ""; 444 | targets = ( 445 | 92DA9A5E711D887CC500599460C385B7 /* JustLayout */, 446 | 3D56F5BE8DAFC40C8A6EB6135F33F23F /* Pods-Sample */, 447 | 38E81C94D8A0123761FC5D426269C2BC /* WKWebViewController */, 448 | ); 449 | }; 450 | /* End PBXProject section */ 451 | 452 | /* Begin PBXResourcesBuildPhase section */ 453 | 547716C5B9925477779E6AE475A5D1B4 /* Resources */ = { 454 | isa = PBXResourcesBuildPhase; 455 | buildActionMask = 2147483647; 456 | files = ( 457 | ); 458 | runOnlyForDeploymentPostprocessing = 0; 459 | }; 460 | 930D29DCA1BFF6E0EBE9672621CFACF9 /* Resources */ = { 461 | isa = PBXResourcesBuildPhase; 462 | buildActionMask = 2147483647; 463 | files = ( 464 | E8BC14BB50E22D6777DA5B256D79CDC1 /* Assets.xcassets in Resources */, 465 | ); 466 | runOnlyForDeploymentPostprocessing = 0; 467 | }; 468 | C7B2A250C63BD3A9B7CFC729A1384D15 /* Resources */ = { 469 | isa = PBXResourcesBuildPhase; 470 | buildActionMask = 2147483647; 471 | files = ( 472 | ); 473 | runOnlyForDeploymentPostprocessing = 0; 474 | }; 475 | /* End PBXResourcesBuildPhase section */ 476 | 477 | /* Begin PBXSourcesBuildPhase section */ 478 | 38DBF59D4DB3B77E1B5BB1243699FF87 /* Sources */ = { 479 | isa = PBXSourcesBuildPhase; 480 | buildActionMask = 2147483647; 481 | files = ( 482 | E3CE6A7D6C6CF49AA95B4BACC85B54A5 /* Enums.swift in Sources */, 483 | BE8E7AF62EAD3BA578BC96478C50A036 /* WKWebViewController-dummy.m in Sources */, 484 | 71FD00C6E48A2F6C510339429A07983B /* WKWebViewController.swift in Sources */, 485 | ); 486 | runOnlyForDeploymentPostprocessing = 0; 487 | }; 488 | 478C56F5C87C56F4081B76A8C61D3825 /* Sources */ = { 489 | isa = PBXSourcesBuildPhase; 490 | buildActionMask = 2147483647; 491 | files = ( 492 | CD385058B2939B84AA70FB8B580601FF /* Pods-Sample-dummy.m in Sources */, 493 | ); 494 | runOnlyForDeploymentPostprocessing = 0; 495 | }; 496 | 4916205567A466B2F229E272506D757C /* Sources */ = { 497 | isa = PBXSourcesBuildPhase; 498 | buildActionMask = 2147483647; 499 | files = ( 500 | 980C151F9779CF61E31E6649E17F9D53 /* JustLayout+Alignment.swift in Sources */, 501 | F5798DF6E88F435B2F9D78F931B72D76 /* JustLayout+Center.swift in Sources */, 502 | 575215B6052CE7BC4E34F775101F21E1 /* JustLayout+Constraints.swift in Sources */, 503 | 2A4D46641C443E4634F9A10375F07172 /* JustLayout+Content.swift in Sources */, 504 | F2CFCC78A244EF281080551373F8E720 /* JustLayout+Equation.swift in Sources */, 505 | 1A95EBD7482053AA6E7A58275513DEE5 /* JustLayout+Fill.swift in Sources */, 506 | 3DC40DADDA9480B39FBFA18E366792C5 /* JustLayout+FlexibleMargin.swift in Sources */, 507 | 29C5AADEF23B4C6BD2CAAAFA089E34E2 /* JustLayout+Following.swift in Sources */, 508 | 07653184EEB2AB3641C79FEAB76E3904 /* JustLayout+GetConstraint.swift in Sources */, 509 | 69CADD7EA2FDDF1ABDC1471110B5DAD8 /* JustLayout+HeightOperators.swift in Sources */, 510 | AA54BFFF07E52F8A87BC0C26DB30903D /* JustLayout+Hierarchy.swift in Sources */, 511 | 85016DB7EA2E26FCBF85BFCDC63B546D /* JustLayout+LayoutAnchors.swift in Sources */, 512 | 1F98CA5EDFD7A031F4EAE53EB23ED98E /* JustLayout+Operators.swift in Sources */, 513 | 70BF53C5FF1D704FD014980217D6675A /* JustLayout+Percentage.swift in Sources */, 514 | 855C89B2D383D83EBC4446D73E067A82 /* JustLayout+Position.swift in Sources */, 515 | 4056534DB44F321B453341BA9E2AE3DC /* JustLayout+Remake.swift in Sources */, 516 | CD0D3D005DF2A646600F886F38BC0CA8 /* JustLayout+Size.swift in Sources */, 517 | 66845F428C9C9B12DF224B92D0FF17FA /* JustLayout+Stacks.swift in Sources */, 518 | 7DC1586203C4FF138BB9D15A2DB35D9A /* JustLayout+Style.swift in Sources */, 519 | 6DE7F3123E817A815C4736A419D3BE17 /* JustLayout+Tap.swift in Sources */, 520 | 6B66F8CED7EF61BA2BC1B4E648B68DDE /* JustLayout-dummy.m in Sources */, 521 | 15FCDF9E2A8A8B5F3B7148924E7063A9 /* JustLayout.swift in Sources */, 522 | ); 523 | runOnlyForDeploymentPostprocessing = 0; 524 | }; 525 | /* End PBXSourcesBuildPhase section */ 526 | 527 | /* Begin PBXTargetDependency section */ 528 | 2783A3F6D694814B294E40716A560EF9 /* PBXTargetDependency */ = { 529 | isa = PBXTargetDependency; 530 | name = JustLayout; 531 | target = 92DA9A5E711D887CC500599460C385B7 /* JustLayout */; 532 | targetProxy = BC47722D91D8BE2DB6A50138A89AEBAF /* PBXContainerItemProxy */; 533 | }; 534 | 69F5A73679AD90BF23627FE7348F091F /* PBXTargetDependency */ = { 535 | isa = PBXTargetDependency; 536 | name = WKWebViewController; 537 | target = 38E81C94D8A0123761FC5D426269C2BC /* WKWebViewController */; 538 | targetProxy = 8E28BF760A387B0238D2FB67AC9A7207 /* PBXContainerItemProxy */; 539 | }; 540 | 88728CCC1C950836FACAB69A0DB352B3 /* PBXTargetDependency */ = { 541 | isa = PBXTargetDependency; 542 | name = JustLayout; 543 | target = 92DA9A5E711D887CC500599460C385B7 /* JustLayout */; 544 | targetProxy = E2F75C77DA8A2A4D5C97607E28F1A512 /* PBXContainerItemProxy */; 545 | }; 546 | /* End PBXTargetDependency section */ 547 | 548 | /* Begin XCBuildConfiguration section */ 549 | 07488D4657FB0A78086563621D425F8A /* Debug */ = { 550 | isa = XCBuildConfiguration; 551 | buildSettings = { 552 | ALWAYS_SEARCH_USER_PATHS = NO; 553 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 554 | CLANG_ANALYZER_NONNULL = YES; 555 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 556 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 557 | CLANG_CXX_LIBRARY = "libc++"; 558 | CLANG_ENABLE_MODULES = YES; 559 | CLANG_ENABLE_OBJC_ARC = YES; 560 | CLANG_ENABLE_OBJC_WEAK = YES; 561 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 562 | CLANG_WARN_BOOL_CONVERSION = YES; 563 | CLANG_WARN_COMMA = YES; 564 | CLANG_WARN_CONSTANT_CONVERSION = YES; 565 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 566 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 567 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 568 | CLANG_WARN_EMPTY_BODY = YES; 569 | CLANG_WARN_ENUM_CONVERSION = YES; 570 | CLANG_WARN_INFINITE_RECURSION = YES; 571 | CLANG_WARN_INT_CONVERSION = YES; 572 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 573 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 574 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 575 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 576 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 577 | CLANG_WARN_STRICT_PROTOTYPES = YES; 578 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 579 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 580 | CLANG_WARN_UNREACHABLE_CODE = YES; 581 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 582 | COPY_PHASE_STRIP = NO; 583 | DEBUG_INFORMATION_FORMAT = dwarf; 584 | ENABLE_STRICT_OBJC_MSGSEND = YES; 585 | ENABLE_TESTABILITY = YES; 586 | GCC_C_LANGUAGE_STANDARD = gnu11; 587 | GCC_DYNAMIC_NO_PIC = NO; 588 | GCC_NO_COMMON_BLOCKS = YES; 589 | GCC_OPTIMIZATION_LEVEL = 0; 590 | GCC_PREPROCESSOR_DEFINITIONS = ( 591 | "POD_CONFIGURATION_DEBUG=1", 592 | "DEBUG=1", 593 | "$(inherited)", 594 | ); 595 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 596 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 597 | GCC_WARN_UNDECLARED_SELECTOR = YES; 598 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 599 | GCC_WARN_UNUSED_FUNCTION = YES; 600 | GCC_WARN_UNUSED_VARIABLE = YES; 601 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 602 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 603 | MTL_FAST_MATH = YES; 604 | ONLY_ACTIVE_ARCH = YES; 605 | PRODUCT_NAME = "$(TARGET_NAME)"; 606 | STRIP_INSTALLED_PRODUCT = NO; 607 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 608 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 609 | SWIFT_VERSION = 4.2; 610 | SYMROOT = "${SRCROOT}/../build"; 611 | }; 612 | name = Debug; 613 | }; 614 | 1E727C4712D3DE37F7BC98D57E508659 /* Debug */ = { 615 | isa = XCBuildConfiguration; 616 | baseConfigurationReference = 93BA5F32660E3285865571B5A896444C /* WKWebViewController.xcconfig */; 617 | buildSettings = { 618 | CODE_SIGN_IDENTITY = ""; 619 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 620 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 621 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 622 | CURRENT_PROJECT_VERSION = 1; 623 | DEFINES_MODULE = YES; 624 | DYLIB_COMPATIBILITY_VERSION = 1; 625 | DYLIB_CURRENT_VERSION = 1; 626 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 627 | GCC_PREFIX_HEADER = "Target Support Files/WKWebViewController/WKWebViewController-prefix.pch"; 628 | INFOPLIST_FILE = "Target Support Files/WKWebViewController/WKWebViewController-Info.plist"; 629 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 630 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 631 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 632 | MODULEMAP_FILE = "Target Support Files/WKWebViewController/WKWebViewController.modulemap"; 633 | PRODUCT_MODULE_NAME = WKWebViewController; 634 | PRODUCT_NAME = WKWebViewController; 635 | SDKROOT = iphoneos; 636 | SKIP_INSTALL = YES; 637 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 638 | SWIFT_VERSION = 5; 639 | TARGETED_DEVICE_FAMILY = "1,2"; 640 | VERSIONING_SYSTEM = "apple-generic"; 641 | VERSION_INFO_PREFIX = ""; 642 | }; 643 | name = Debug; 644 | }; 645 | 39B07F9F000A05D2B994A97D3AFBCCBE /* Release */ = { 646 | isa = XCBuildConfiguration; 647 | baseConfigurationReference = A677FFACB9D782A390660C6220E95CA3 /* JustLayout.xcconfig */; 648 | buildSettings = { 649 | CODE_SIGN_IDENTITY = ""; 650 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 651 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 652 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 653 | CURRENT_PROJECT_VERSION = 1; 654 | DEFINES_MODULE = YES; 655 | DYLIB_COMPATIBILITY_VERSION = 1; 656 | DYLIB_CURRENT_VERSION = 1; 657 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 658 | GCC_PREFIX_HEADER = "Target Support Files/JustLayout/JustLayout-prefix.pch"; 659 | INFOPLIST_FILE = "Target Support Files/JustLayout/JustLayout-Info.plist"; 660 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 661 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 662 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 663 | MODULEMAP_FILE = "Target Support Files/JustLayout/JustLayout.modulemap"; 664 | PRODUCT_MODULE_NAME = JustLayout; 665 | PRODUCT_NAME = JustLayout; 666 | SDKROOT = iphoneos; 667 | SKIP_INSTALL = YES; 668 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 669 | SWIFT_VERSION = 5; 670 | TARGETED_DEVICE_FAMILY = "1,2"; 671 | VALIDATE_PRODUCT = YES; 672 | VERSIONING_SYSTEM = "apple-generic"; 673 | VERSION_INFO_PREFIX = ""; 674 | }; 675 | name = Release; 676 | }; 677 | A1962E6FF39BBAC201A2E5DDF99557DF /* Release */ = { 678 | isa = XCBuildConfiguration; 679 | buildSettings = { 680 | ALWAYS_SEARCH_USER_PATHS = NO; 681 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 682 | CLANG_ANALYZER_NONNULL = YES; 683 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 684 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 685 | CLANG_CXX_LIBRARY = "libc++"; 686 | CLANG_ENABLE_MODULES = YES; 687 | CLANG_ENABLE_OBJC_ARC = YES; 688 | CLANG_ENABLE_OBJC_WEAK = YES; 689 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 690 | CLANG_WARN_BOOL_CONVERSION = YES; 691 | CLANG_WARN_COMMA = YES; 692 | CLANG_WARN_CONSTANT_CONVERSION = YES; 693 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 694 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 695 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 696 | CLANG_WARN_EMPTY_BODY = YES; 697 | CLANG_WARN_ENUM_CONVERSION = YES; 698 | CLANG_WARN_INFINITE_RECURSION = YES; 699 | CLANG_WARN_INT_CONVERSION = YES; 700 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 701 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 702 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 703 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 704 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 705 | CLANG_WARN_STRICT_PROTOTYPES = YES; 706 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 707 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 708 | CLANG_WARN_UNREACHABLE_CODE = YES; 709 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 710 | COPY_PHASE_STRIP = NO; 711 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 712 | ENABLE_NS_ASSERTIONS = NO; 713 | ENABLE_STRICT_OBJC_MSGSEND = YES; 714 | GCC_C_LANGUAGE_STANDARD = gnu11; 715 | GCC_NO_COMMON_BLOCKS = YES; 716 | GCC_PREPROCESSOR_DEFINITIONS = ( 717 | "POD_CONFIGURATION_RELEASE=1", 718 | "$(inherited)", 719 | ); 720 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 721 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 722 | GCC_WARN_UNDECLARED_SELECTOR = YES; 723 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 724 | GCC_WARN_UNUSED_FUNCTION = YES; 725 | GCC_WARN_UNUSED_VARIABLE = YES; 726 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 727 | MTL_ENABLE_DEBUG_INFO = NO; 728 | MTL_FAST_MATH = YES; 729 | PRODUCT_NAME = "$(TARGET_NAME)"; 730 | STRIP_INSTALLED_PRODUCT = NO; 731 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 732 | SWIFT_VERSION = 4.2; 733 | SYMROOT = "${SRCROOT}/../build"; 734 | }; 735 | name = Release; 736 | }; 737 | BBCD076EFD37EEBAF6E46A63F6645341 /* Debug */ = { 738 | isa = XCBuildConfiguration; 739 | baseConfigurationReference = A677FFACB9D782A390660C6220E95CA3 /* JustLayout.xcconfig */; 740 | buildSettings = { 741 | CODE_SIGN_IDENTITY = ""; 742 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 743 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 744 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 745 | CURRENT_PROJECT_VERSION = 1; 746 | DEFINES_MODULE = YES; 747 | DYLIB_COMPATIBILITY_VERSION = 1; 748 | DYLIB_CURRENT_VERSION = 1; 749 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 750 | GCC_PREFIX_HEADER = "Target Support Files/JustLayout/JustLayout-prefix.pch"; 751 | INFOPLIST_FILE = "Target Support Files/JustLayout/JustLayout-Info.plist"; 752 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 753 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 754 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 755 | MODULEMAP_FILE = "Target Support Files/JustLayout/JustLayout.modulemap"; 756 | PRODUCT_MODULE_NAME = JustLayout; 757 | PRODUCT_NAME = JustLayout; 758 | SDKROOT = iphoneos; 759 | SKIP_INSTALL = YES; 760 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 761 | SWIFT_VERSION = 5; 762 | TARGETED_DEVICE_FAMILY = "1,2"; 763 | VERSIONING_SYSTEM = "apple-generic"; 764 | VERSION_INFO_PREFIX = ""; 765 | }; 766 | name = Debug; 767 | }; 768 | D2EFABD81FECB110B8D3063A8BAB6930 /* Debug */ = { 769 | isa = XCBuildConfiguration; 770 | baseConfigurationReference = 3F4CECDA38C08BEAE89304FAF8F47441 /* Pods-Sample.debug.xcconfig */; 771 | buildSettings = { 772 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 773 | CODE_SIGN_IDENTITY = ""; 774 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 775 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 776 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 777 | CURRENT_PROJECT_VERSION = 1; 778 | DEFINES_MODULE = YES; 779 | DYLIB_COMPATIBILITY_VERSION = 1; 780 | DYLIB_CURRENT_VERSION = 1; 781 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 782 | INFOPLIST_FILE = "Target Support Files/Pods-Sample/Pods-Sample-Info.plist"; 783 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 784 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 785 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 786 | MACH_O_TYPE = staticlib; 787 | MODULEMAP_FILE = "Target Support Files/Pods-Sample/Pods-Sample.modulemap"; 788 | OTHER_LDFLAGS = ""; 789 | OTHER_LIBTOOLFLAGS = ""; 790 | PODS_ROOT = "$(SRCROOT)"; 791 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 792 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 793 | SDKROOT = iphoneos; 794 | SKIP_INSTALL = YES; 795 | TARGETED_DEVICE_FAMILY = "1,2"; 796 | VERSIONING_SYSTEM = "apple-generic"; 797 | VERSION_INFO_PREFIX = ""; 798 | }; 799 | name = Debug; 800 | }; 801 | EAD6E40D9B40841A3E191912504BAD14 /* Release */ = { 802 | isa = XCBuildConfiguration; 803 | baseConfigurationReference = 93BA5F32660E3285865571B5A896444C /* WKWebViewController.xcconfig */; 804 | buildSettings = { 805 | CODE_SIGN_IDENTITY = ""; 806 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 807 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 808 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 809 | CURRENT_PROJECT_VERSION = 1; 810 | DEFINES_MODULE = YES; 811 | DYLIB_COMPATIBILITY_VERSION = 1; 812 | DYLIB_CURRENT_VERSION = 1; 813 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 814 | GCC_PREFIX_HEADER = "Target Support Files/WKWebViewController/WKWebViewController-prefix.pch"; 815 | INFOPLIST_FILE = "Target Support Files/WKWebViewController/WKWebViewController-Info.plist"; 816 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 817 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 818 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 819 | MODULEMAP_FILE = "Target Support Files/WKWebViewController/WKWebViewController.modulemap"; 820 | PRODUCT_MODULE_NAME = WKWebViewController; 821 | PRODUCT_NAME = WKWebViewController; 822 | SDKROOT = iphoneos; 823 | SKIP_INSTALL = YES; 824 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 825 | SWIFT_VERSION = 5; 826 | TARGETED_DEVICE_FAMILY = "1,2"; 827 | VALIDATE_PRODUCT = YES; 828 | VERSIONING_SYSTEM = "apple-generic"; 829 | VERSION_INFO_PREFIX = ""; 830 | }; 831 | name = Release; 832 | }; 833 | F2FD73F91ADF8B499838C941CBA6CE95 /* Release */ = { 834 | isa = XCBuildConfiguration; 835 | baseConfigurationReference = 0B1692077B2B61C40A9D996692389C86 /* Pods-Sample.release.xcconfig */; 836 | buildSettings = { 837 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 838 | CODE_SIGN_IDENTITY = ""; 839 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 840 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 841 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 842 | CURRENT_PROJECT_VERSION = 1; 843 | DEFINES_MODULE = YES; 844 | DYLIB_COMPATIBILITY_VERSION = 1; 845 | DYLIB_CURRENT_VERSION = 1; 846 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 847 | INFOPLIST_FILE = "Target Support Files/Pods-Sample/Pods-Sample-Info.plist"; 848 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 849 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 850 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 851 | MACH_O_TYPE = staticlib; 852 | MODULEMAP_FILE = "Target Support Files/Pods-Sample/Pods-Sample.modulemap"; 853 | OTHER_LDFLAGS = ""; 854 | OTHER_LIBTOOLFLAGS = ""; 855 | PODS_ROOT = "$(SRCROOT)"; 856 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 857 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 858 | SDKROOT = iphoneos; 859 | SKIP_INSTALL = YES; 860 | TARGETED_DEVICE_FAMILY = "1,2"; 861 | VALIDATE_PRODUCT = YES; 862 | VERSIONING_SYSTEM = "apple-generic"; 863 | VERSION_INFO_PREFIX = ""; 864 | }; 865 | name = Release; 866 | }; 867 | /* End XCBuildConfiguration section */ 868 | 869 | /* Begin XCConfigurationList section */ 870 | 12471E22B08F6473EC4B205436D342E1 /* Build configuration list for PBXNativeTarget "JustLayout" */ = { 871 | isa = XCConfigurationList; 872 | buildConfigurations = ( 873 | BBCD076EFD37EEBAF6E46A63F6645341 /* Debug */, 874 | 39B07F9F000A05D2B994A97D3AFBCCBE /* Release */, 875 | ); 876 | defaultConfigurationIsVisible = 0; 877 | defaultConfigurationName = Release; 878 | }; 879 | 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { 880 | isa = XCConfigurationList; 881 | buildConfigurations = ( 882 | 07488D4657FB0A78086563621D425F8A /* Debug */, 883 | A1962E6FF39BBAC201A2E5DDF99557DF /* Release */, 884 | ); 885 | defaultConfigurationIsVisible = 0; 886 | defaultConfigurationName = Release; 887 | }; 888 | 51396A284E880C6FEFD885537F8AF53A /* Build configuration list for PBXNativeTarget "WKWebViewController" */ = { 889 | isa = XCConfigurationList; 890 | buildConfigurations = ( 891 | 1E727C4712D3DE37F7BC98D57E508659 /* Debug */, 892 | EAD6E40D9B40841A3E191912504BAD14 /* Release */, 893 | ); 894 | defaultConfigurationIsVisible = 0; 895 | defaultConfigurationName = Release; 896 | }; 897 | 8814D0EFF5F9D949CB5C757099ECBD84 /* Build configuration list for PBXNativeTarget "Pods-Sample" */ = { 898 | isa = XCConfigurationList; 899 | buildConfigurations = ( 900 | D2EFABD81FECB110B8D3063A8BAB6930 /* Debug */, 901 | F2FD73F91ADF8B499838C941CBA6CE95 /* Release */, 902 | ); 903 | defaultConfigurationIsVisible = 0; 904 | defaultConfigurationName = Release; 905 | }; 906 | /* End XCConfigurationList section */ 907 | }; 908 | rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; 909 | } 910 | -------------------------------------------------------------------------------- /Sample/Pods/Pods.xcodeproj/xcuserdata/Meniny.xcuserdatad/xcschemes/Pods-Sample.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /Sample/Pods/Pods.xcodeproj/xcuserdata/Meniny.xcuserdatad/xcschemes/WKWebViewController.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /Sample/Pods/Pods.xcodeproj/xcuserdata/Meniny.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | JustLayout.xcscheme 8 | 9 | isShown 10 | 11 | orderHint 12 | 0 13 | 14 | Pods-Sample.xcscheme 15 | 16 | isShown 17 | 18 | orderHint 19 | 1 20 | 21 | WKWebViewController.xcscheme 22 | 23 | isShown 24 | 25 | orderHint 26 | 2 27 | 28 | 29 | SuppressBuildableAutocreation 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /Sample/Pods/Pods.xcodeproj/xcuserdata/elias.xcuserdatad/xcschemes/JustLayout.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 45 | 46 | 52 | 53 | 55 | 56 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /Sample/Pods/Pods.xcodeproj/xcuserdata/elias.xcuserdatad/xcschemes/Pods-Sample.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 34 | 35 | 45 | 46 | 52 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 66 | 67 | 70 | 71 | 72 | -------------------------------------------------------------------------------- /Sample/Pods/Pods.xcodeproj/xcuserdata/elias.xcuserdatad/xcschemes/WKWebViewController.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 45 | 46 | 52 | 53 | 55 | 56 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /Sample/Pods/Pods.xcodeproj/xcuserdata/elias.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | JustLayout.xcscheme 8 | 9 | isShown 10 | 11 | orderHint 12 | 0 13 | 14 | Pods-Sample.xcscheme 15 | 16 | isShown 17 | 18 | orderHint 19 | 1 20 | 21 | WKWebViewController.xcscheme 22 | 23 | isShown 24 | 25 | orderHint 26 | 2 27 | 28 | 29 | SuppressBuildableAutocreation 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /Sample/Pods/Target Support Files/JustLayout/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.3.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Sample/Pods/Target Support Files/JustLayout/JustLayout-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_JustLayout : NSObject 3 | @end 4 | @implementation PodsDummy_JustLayout 5 | @end 6 | -------------------------------------------------------------------------------- /Sample/Pods/Target Support Files/JustLayout/JustLayout-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Sample/Pods/Target Support Files/JustLayout/JustLayout-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | #import "JustLayout.h" 14 | 15 | FOUNDATION_EXPORT double JustLayoutVersionNumber; 16 | FOUNDATION_EXPORT const unsigned char JustLayoutVersionString[]; 17 | 18 | -------------------------------------------------------------------------------- /Sample/Pods/Target Support Files/JustLayout/JustLayout.modulemap: -------------------------------------------------------------------------------- 1 | framework module JustLayout { 2 | umbrella header "JustLayout-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Sample/Pods/Target Support Files/JustLayout/JustLayout.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/JustLayout 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/JustLayout 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /Sample/Pods/Target Support Files/Pods-Sample/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Sample/Pods/Target Support Files/Pods-Sample/Pods-Sample-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## JustLayout 5 | 6 | MIT License 7 | 8 | Copyright (c) 2018 Elias Abel 9 | 10 | Permission is hereby granted, free of charge, to any person obtaining a copy 11 | of this software and associated documentation files (the "Software"), to deal 12 | in the Software without restriction, including without limitation the rights 13 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 14 | copies of the Software, and to permit persons to whom the Software is 15 | furnished to do so, subject to the following conditions: 16 | 17 | The above copyright notice and this permission notice shall be included in all 18 | copies or substantial portions of the Software. 19 | 20 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 21 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 22 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 23 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 24 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 25 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 26 | SOFTWARE. 27 | 28 | 29 | ## WKWebViewController 30 | 31 | The MIT License (MIT) 32 | 33 | Copyright (c) 2015 Meniny 34 | 35 | Permission is hereby granted, free of charge, to any person obtaining a copy 36 | of this software and associated documentation files (the "Software"), to deal 37 | in the Software without restriction, including without limitation the rights 38 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 39 | copies of the Software, and to permit persons to whom the Software is 40 | furnished to do so, subject to the following conditions: 41 | 42 | The above copyright notice and this permission notice shall be included in all 43 | copies or substantial portions of the Software. 44 | 45 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 46 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 47 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 48 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 49 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 50 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 51 | SOFTWARE. 52 | Generated by CocoaPods - https://cocoapods.org 53 | -------------------------------------------------------------------------------- /Sample/Pods/Target Support Files/Pods-Sample/Pods-Sample-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | MIT License 18 | 19 | Copyright (c) 2018 Elias Abel <admin@meniny.cn> 20 | 21 | Permission is hereby granted, free of charge, to any person obtaining a copy 22 | of this software and associated documentation files (the "Software"), to deal 23 | in the Software without restriction, including without limitation the rights 24 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 25 | copies of the Software, and to permit persons to whom the Software is 26 | furnished to do so, subject to the following conditions: 27 | 28 | The above copyright notice and this permission notice shall be included in all 29 | copies or substantial portions of the Software. 30 | 31 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 32 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 33 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 34 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 35 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 36 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 37 | SOFTWARE. 38 | 39 | License 40 | MIT 41 | Title 42 | JustLayout 43 | Type 44 | PSGroupSpecifier 45 | 46 | 47 | FooterText 48 | The MIT License (MIT) 49 | 50 | Copyright (c) 2015 Meniny <Meniny@qq.com> 51 | 52 | Permission is hereby granted, free of charge, to any person obtaining a copy 53 | of this software and associated documentation files (the "Software"), to deal 54 | in the Software without restriction, including without limitation the rights 55 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 56 | copies of the Software, and to permit persons to whom the Software is 57 | furnished to do so, subject to the following conditions: 58 | 59 | The above copyright notice and this permission notice shall be included in all 60 | copies or substantial portions of the Software. 61 | 62 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 63 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 64 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 65 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 66 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 67 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 68 | SOFTWARE. 69 | License 70 | MIT 71 | Title 72 | WKWebViewController 73 | Type 74 | PSGroupSpecifier 75 | 76 | 77 | FooterText 78 | Generated by CocoaPods - https://cocoapods.org 79 | Title 80 | 81 | Type 82 | PSGroupSpecifier 83 | 84 | 85 | StringsTable 86 | Acknowledgements 87 | Title 88 | Acknowledgements 89 | 90 | 91 | -------------------------------------------------------------------------------- /Sample/Pods/Target Support Files/Pods-Sample/Pods-Sample-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Sample : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Sample 5 | @end 6 | -------------------------------------------------------------------------------- /Sample/Pods/Target Support Files/Pods-Sample/Pods-Sample-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | function on_error { 7 | echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" 8 | } 9 | trap 'on_error $LINENO' ERR 10 | 11 | if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then 12 | # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy 13 | # frameworks to, so exit 0 (signalling the script phase was successful). 14 | exit 0 15 | fi 16 | 17 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 18 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 19 | 20 | COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" 21 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 22 | 23 | # Used as a return value for each invocation of `strip_invalid_archs` function. 24 | STRIP_BINARY_RETVAL=0 25 | 26 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 27 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 28 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 29 | 30 | # Copies and strips a vendored framework 31 | install_framework() 32 | { 33 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 34 | local source="${BUILT_PRODUCTS_DIR}/$1" 35 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 36 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 37 | elif [ -r "$1" ]; then 38 | local source="$1" 39 | fi 40 | 41 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 42 | 43 | if [ -L "${source}" ]; then 44 | echo "Symlinked..." 45 | source="$(readlink "${source}")" 46 | fi 47 | 48 | # Use filter instead of exclude so missing patterns don't throw errors. 49 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 50 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 51 | 52 | local basename 53 | basename="$(basename -s .framework "$1")" 54 | binary="${destination}/${basename}.framework/${basename}" 55 | 56 | if ! [ -r "$binary" ]; then 57 | binary="${destination}/${basename}" 58 | elif [ -L "${binary}" ]; then 59 | echo "Destination binary is symlinked..." 60 | dirname="$(dirname "${binary}")" 61 | binary="${dirname}/$(readlink "${binary}")" 62 | fi 63 | 64 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 65 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 66 | strip_invalid_archs "$binary" 67 | fi 68 | 69 | # Resign the code if required by the build settings to avoid unstable apps 70 | code_sign_if_enabled "${destination}/$(basename "$1")" 71 | 72 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 73 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 74 | local swift_runtime_libs 75 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) 76 | for lib in $swift_runtime_libs; do 77 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 78 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 79 | code_sign_if_enabled "${destination}/${lib}" 80 | done 81 | fi 82 | } 83 | 84 | # Copies and strips a vendored dSYM 85 | install_dsym() { 86 | local source="$1" 87 | if [ -r "$source" ]; then 88 | # Copy the dSYM into a the targets temp dir. 89 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 90 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 91 | 92 | local basename 93 | basename="$(basename -s .framework.dSYM "$source")" 94 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 95 | 96 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 97 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then 98 | strip_invalid_archs "$binary" 99 | fi 100 | 101 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 102 | # Move the stripped file into its final destination. 103 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 104 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 105 | else 106 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 107 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 108 | fi 109 | fi 110 | } 111 | 112 | # Copies the bcsymbolmap files of a vendored framework 113 | install_bcsymbolmap() { 114 | local bcsymbolmap_path="$1" 115 | local destination="${BUILT_PRODUCTS_DIR}" 116 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" 117 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" 118 | } 119 | 120 | # Signs a framework with the provided identity 121 | code_sign_if_enabled() { 122 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 123 | # Use the current code_sign_identity 124 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 125 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" 126 | 127 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 128 | code_sign_cmd="$code_sign_cmd &" 129 | fi 130 | echo "$code_sign_cmd" 131 | eval "$code_sign_cmd" 132 | fi 133 | } 134 | 135 | # Strip invalid architectures 136 | strip_invalid_archs() { 137 | binary="$1" 138 | # Get architectures for current target binary 139 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 140 | # Intersect them with the architectures we are building for 141 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 142 | # If there are no archs supported by this binary then warn the user 143 | if [[ -z "$intersected_archs" ]]; then 144 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 145 | STRIP_BINARY_RETVAL=0 146 | return 147 | fi 148 | stripped="" 149 | for arch in $binary_archs; do 150 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 151 | # Strip non-valid architectures in-place 152 | lipo -remove "$arch" -output "$binary" "$binary" 153 | stripped="$stripped $arch" 154 | fi 155 | done 156 | if [[ "$stripped" ]]; then 157 | echo "Stripped $binary of architectures:$stripped" 158 | fi 159 | STRIP_BINARY_RETVAL=1 160 | } 161 | 162 | 163 | if [[ "$CONFIGURATION" == "Debug" ]]; then 164 | install_framework "${BUILT_PRODUCTS_DIR}/JustLayout/JustLayout.framework" 165 | install_framework "${BUILT_PRODUCTS_DIR}/WKWebViewController/WKWebViewController.framework" 166 | fi 167 | if [[ "$CONFIGURATION" == "Release" ]]; then 168 | install_framework "${BUILT_PRODUCTS_DIR}/JustLayout/JustLayout.framework" 169 | install_framework "${BUILT_PRODUCTS_DIR}/WKWebViewController/WKWebViewController.framework" 170 | fi 171 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 172 | wait 173 | fi 174 | -------------------------------------------------------------------------------- /Sample/Pods/Target Support Files/Pods-Sample/Pods-Sample-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then 7 | # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy 8 | # resources to, so exit 0 (signalling the script phase was successful). 9 | exit 0 10 | fi 11 | 12 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 13 | 14 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 15 | > "$RESOURCES_TO_COPY" 16 | 17 | XCASSET_FILES=() 18 | 19 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 20 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 21 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 22 | 23 | case "${TARGETED_DEVICE_FAMILY:-}" in 24 | 1,2) 25 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 26 | ;; 27 | 1) 28 | TARGET_DEVICE_ARGS="--target-device iphone" 29 | ;; 30 | 2) 31 | TARGET_DEVICE_ARGS="--target-device ipad" 32 | ;; 33 | 3) 34 | TARGET_DEVICE_ARGS="--target-device tv" 35 | ;; 36 | 4) 37 | TARGET_DEVICE_ARGS="--target-device watch" 38 | ;; 39 | *) 40 | TARGET_DEVICE_ARGS="--target-device mac" 41 | ;; 42 | esac 43 | 44 | install_resource() 45 | { 46 | if [[ "$1" = /* ]] ; then 47 | RESOURCE_PATH="$1" 48 | else 49 | RESOURCE_PATH="${PODS_ROOT}/$1" 50 | fi 51 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 52 | cat << EOM 53 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 54 | EOM 55 | exit 1 56 | fi 57 | case $RESOURCE_PATH in 58 | *.storyboard) 59 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 60 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 61 | ;; 62 | *.xib) 63 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true 64 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 65 | ;; 66 | *.framework) 67 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 68 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 69 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true 70 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 71 | ;; 72 | *.xcdatamodel) 73 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true 74 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 75 | ;; 76 | *.xcdatamodeld) 77 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true 78 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 79 | ;; 80 | *.xcmappingmodel) 81 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true 82 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 83 | ;; 84 | *.xcassets) 85 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" 86 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 87 | ;; 88 | *) 89 | echo "$RESOURCE_PATH" || true 90 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 91 | ;; 92 | esac 93 | } 94 | 95 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 96 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 97 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 98 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 99 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 100 | fi 101 | rm -f "$RESOURCES_TO_COPY" 102 | 103 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] 104 | then 105 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 106 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 107 | while read line; do 108 | if [[ $line != "${PODS_ROOT}*" ]]; then 109 | XCASSET_FILES+=("$line") 110 | fi 111 | done <<<"$OTHER_XCASSETS" 112 | 113 | if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then 114 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 115 | else 116 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" 117 | fi 118 | fi 119 | -------------------------------------------------------------------------------- /Sample/Pods/Target Support Files/Pods-Sample/Pods-Sample-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_SampleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_SampleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Sample/Pods/Target Support Files/Pods-Sample/Pods-Sample.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/JustLayout" "${PODS_CONFIGURATION_BUILD_DIR}/WKWebViewController" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/JustLayout/JustLayout.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/WKWebViewController/WKWebViewController.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "JustLayout" -framework "WKWebViewController" 7 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /Sample/Pods/Target Support Files/Pods-Sample/Pods-Sample.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_Sample { 2 | umbrella header "Pods-Sample-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Sample/Pods/Target Support Files/Pods-Sample/Pods-Sample.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/JustLayout" "${PODS_CONFIGURATION_BUILD_DIR}/WKWebViewController" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/JustLayout/JustLayout.framework/Headers" "${PODS_CONFIGURATION_BUILD_DIR}/WKWebViewController/WKWebViewController.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "JustLayout" -framework "WKWebViewController" 7 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /Sample/Pods/Target Support Files/WKWebViewController/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.2.2 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Sample/Pods/Target Support Files/WKWebViewController/WKWebViewController-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_WKWebViewController : NSObject 3 | @end 4 | @implementation PodsDummy_WKWebViewController 5 | @end 6 | -------------------------------------------------------------------------------- /Sample/Pods/Target Support Files/WKWebViewController/WKWebViewController-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Sample/Pods/Target Support Files/WKWebViewController/WKWebViewController-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double WKWebViewControllerVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char WKWebViewControllerVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Sample/Pods/Target Support Files/WKWebViewController/WKWebViewController.modulemap: -------------------------------------------------------------------------------- 1 | framework module WKWebViewController { 2 | umbrella header "WKWebViewController-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Sample/Pods/Target Support Files/WKWebViewController/WKWebViewController.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/WKWebViewController 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/JustLayout" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | -------------------------------------------------------------------------------- /Sample/Sample.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 48; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 59E3A3A0B20954376CB28F76 /* Pods_Sample.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7AB5AA5DBABF8A439D77D66C /* Pods_Sample.framework */; }; 11 | 5C635FB120138E0F00979833 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C635FB020138E0F00979833 /* AppDelegate.swift */; }; 12 | 5C635FB320138E0F00979833 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5C635FB220138E0F00979833 /* ViewController.swift */; }; 13 | 5C635FB620138E0F00979833 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5C635FB420138E0F00979833 /* Main.storyboard */; }; 14 | 5C635FB820138E0F00979833 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 5C635FB720138E0F00979833 /* Assets.xcassets */; }; 15 | 5C635FBB20138E0F00979833 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 5C635FB920138E0F00979833 /* LaunchScreen.storyboard */; }; 16 | /* End PBXBuildFile section */ 17 | 18 | /* Begin PBXFileReference section */ 19 | 00E1A23AE304E82951A53F23 /* Pods-Sample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Sample.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Sample/Pods-Sample.debug.xcconfig"; sourceTree = ""; }; 20 | 5C19E7272014558200E2865A /* WKWebViewController.podspec */ = {isa = PBXFileReference; lastKnownFileType = text; name = WKWebViewController.podspec; path = ../WKWebViewController.podspec; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 21 | 5C19E72A2014558200E2865A /* LICENSE.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = LICENSE.md; path = ../LICENSE.md; sourceTree = ""; }; 22 | 5C635FAD20138E0F00979833 /* Sample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Sample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 23 | 5C635FB020138E0F00979833 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 24 | 5C635FB220138E0F00979833 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 25 | 5C635FB520138E0F00979833 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 26 | 5C635FB720138E0F00979833 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 27 | 5C635FBA20138E0F00979833 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 28 | 5C635FBC20138E0F00979833 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 29 | 5CDA429620AC14EF00FDC229 /* README.adoc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; name = README.adoc; path = ../README.adoc; sourceTree = ""; }; 30 | 7AB5AA5DBABF8A439D77D66C /* Pods_Sample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Sample.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 31 | AA262AAAE259CAE0B9DC31F8 /* Pods-Sample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Sample.release.xcconfig"; path = "Pods/Target Support Files/Pods-Sample/Pods-Sample.release.xcconfig"; sourceTree = ""; }; 32 | /* End PBXFileReference section */ 33 | 34 | /* Begin PBXFrameworksBuildPhase section */ 35 | 5C635FAA20138E0F00979833 /* Frameworks */ = { 36 | isa = PBXFrameworksBuildPhase; 37 | buildActionMask = 2147483647; 38 | files = ( 39 | 59E3A3A0B20954376CB28F76 /* Pods_Sample.framework in Frameworks */, 40 | ); 41 | runOnlyForDeploymentPostprocessing = 0; 42 | }; 43 | /* End PBXFrameworksBuildPhase section */ 44 | 45 | /* Begin PBXGroup section */ 46 | 04106AF0BD04683BC8B91F91 /* Pods */ = { 47 | isa = PBXGroup; 48 | children = ( 49 | 00E1A23AE304E82951A53F23 /* Pods-Sample.debug.xcconfig */, 50 | AA262AAAE259CAE0B9DC31F8 /* Pods-Sample.release.xcconfig */, 51 | ); 52 | name = Pods; 53 | sourceTree = ""; 54 | }; 55 | 5C635FA420138E0F00979833 = { 56 | isa = PBXGroup; 57 | children = ( 58 | 5C19E72A2014558200E2865A /* LICENSE.md */, 59 | 5C19E7272014558200E2865A /* WKWebViewController.podspec */, 60 | 5CDA429620AC14EF00FDC229 /* README.adoc */, 61 | 5C635FAF20138E0F00979833 /* Sample */, 62 | 5C635FAE20138E0F00979833 /* Products */, 63 | 04106AF0BD04683BC8B91F91 /* Pods */, 64 | 6886F1A7B46480B64DEA9578 /* Frameworks */, 65 | ); 66 | sourceTree = ""; 67 | }; 68 | 5C635FAE20138E0F00979833 /* Products */ = { 69 | isa = PBXGroup; 70 | children = ( 71 | 5C635FAD20138E0F00979833 /* Sample.app */, 72 | ); 73 | name = Products; 74 | sourceTree = ""; 75 | }; 76 | 5C635FAF20138E0F00979833 /* Sample */ = { 77 | isa = PBXGroup; 78 | children = ( 79 | 5C635FB020138E0F00979833 /* AppDelegate.swift */, 80 | 5C635FB220138E0F00979833 /* ViewController.swift */, 81 | 5C635FB420138E0F00979833 /* Main.storyboard */, 82 | 5C635FB720138E0F00979833 /* Assets.xcassets */, 83 | 5C635FB920138E0F00979833 /* LaunchScreen.storyboard */, 84 | 5C635FBC20138E0F00979833 /* Info.plist */, 85 | ); 86 | path = Sample; 87 | sourceTree = ""; 88 | }; 89 | 6886F1A7B46480B64DEA9578 /* Frameworks */ = { 90 | isa = PBXGroup; 91 | children = ( 92 | 7AB5AA5DBABF8A439D77D66C /* Pods_Sample.framework */, 93 | ); 94 | name = Frameworks; 95 | sourceTree = ""; 96 | }; 97 | /* End PBXGroup section */ 98 | 99 | /* Begin PBXNativeTarget section */ 100 | 5C635FAC20138E0F00979833 /* Sample */ = { 101 | isa = PBXNativeTarget; 102 | buildConfigurationList = 5C635FBF20138E0F00979833 /* Build configuration list for PBXNativeTarget "Sample" */; 103 | buildPhases = ( 104 | 6EA6961ACE57B8ADA2AC2657 /* [CP] Check Pods Manifest.lock */, 105 | 5C635FA920138E0F00979833 /* Sources */, 106 | 5C635FAA20138E0F00979833 /* Frameworks */, 107 | 5C635FAB20138E0F00979833 /* Resources */, 108 | 32387B7C2E5DE4EA20DD1CE9 /* [CP] Embed Pods Frameworks */, 109 | ); 110 | buildRules = ( 111 | ); 112 | dependencies = ( 113 | ); 114 | name = Sample; 115 | productName = Sample; 116 | productReference = 5C635FAD20138E0F00979833 /* Sample.app */; 117 | productType = "com.apple.product-type.application"; 118 | }; 119 | /* End PBXNativeTarget section */ 120 | 121 | /* Begin PBXProject section */ 122 | 5C635FA520138E0F00979833 /* Project object */ = { 123 | isa = PBXProject; 124 | attributes = { 125 | LastSwiftUpdateCheck = 0920; 126 | LastUpgradeCheck = 0930; 127 | ORGANIZATIONNAME = Meniny; 128 | TargetAttributes = { 129 | 5C635FAC20138E0F00979833 = { 130 | CreatedOnToolsVersion = 9.2; 131 | LastSwiftMigration = 1020; 132 | ProvisioningStyle = Automatic; 133 | }; 134 | }; 135 | }; 136 | buildConfigurationList = 5C635FA820138E0F00979833 /* Build configuration list for PBXProject "Sample" */; 137 | compatibilityVersion = "Xcode 8.0"; 138 | developmentRegion = en; 139 | hasScannedForEncodings = 0; 140 | knownRegions = ( 141 | en, 142 | Base, 143 | ); 144 | mainGroup = 5C635FA420138E0F00979833; 145 | productRefGroup = 5C635FAE20138E0F00979833 /* Products */; 146 | projectDirPath = ""; 147 | projectRoot = ""; 148 | targets = ( 149 | 5C635FAC20138E0F00979833 /* Sample */, 150 | ); 151 | }; 152 | /* End PBXProject section */ 153 | 154 | /* Begin PBXResourcesBuildPhase section */ 155 | 5C635FAB20138E0F00979833 /* Resources */ = { 156 | isa = PBXResourcesBuildPhase; 157 | buildActionMask = 2147483647; 158 | files = ( 159 | 5C635FBB20138E0F00979833 /* LaunchScreen.storyboard in Resources */, 160 | 5C635FB820138E0F00979833 /* Assets.xcassets in Resources */, 161 | 5C635FB620138E0F00979833 /* Main.storyboard in Resources */, 162 | ); 163 | runOnlyForDeploymentPostprocessing = 0; 164 | }; 165 | /* End PBXResourcesBuildPhase section */ 166 | 167 | /* Begin PBXShellScriptBuildPhase section */ 168 | 32387B7C2E5DE4EA20DD1CE9 /* [CP] Embed Pods Frameworks */ = { 169 | isa = PBXShellScriptBuildPhase; 170 | buildActionMask = 2147483647; 171 | files = ( 172 | ); 173 | inputPaths = ( 174 | "${PODS_ROOT}/Target Support Files/Pods-Sample/Pods-Sample-frameworks.sh", 175 | "${BUILT_PRODUCTS_DIR}/JustLayout/JustLayout.framework", 176 | "${BUILT_PRODUCTS_DIR}/WKWebViewController/WKWebViewController.framework", 177 | ); 178 | name = "[CP] Embed Pods Frameworks"; 179 | outputPaths = ( 180 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/JustLayout.framework", 181 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/WKWebViewController.framework", 182 | ); 183 | runOnlyForDeploymentPostprocessing = 0; 184 | shellPath = /bin/sh; 185 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Sample/Pods-Sample-frameworks.sh\"\n"; 186 | showEnvVarsInLog = 0; 187 | }; 188 | 6EA6961ACE57B8ADA2AC2657 /* [CP] Check Pods Manifest.lock */ = { 189 | isa = PBXShellScriptBuildPhase; 190 | buildActionMask = 2147483647; 191 | files = ( 192 | ); 193 | inputPaths = ( 194 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 195 | "${PODS_ROOT}/Manifest.lock", 196 | ); 197 | name = "[CP] Check Pods Manifest.lock"; 198 | outputPaths = ( 199 | "$(DERIVED_FILE_DIR)/Pods-Sample-checkManifestLockResult.txt", 200 | ); 201 | runOnlyForDeploymentPostprocessing = 0; 202 | shellPath = /bin/sh; 203 | shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; 204 | showEnvVarsInLog = 0; 205 | }; 206 | /* End PBXShellScriptBuildPhase section */ 207 | 208 | /* Begin PBXSourcesBuildPhase section */ 209 | 5C635FA920138E0F00979833 /* Sources */ = { 210 | isa = PBXSourcesBuildPhase; 211 | buildActionMask = 2147483647; 212 | files = ( 213 | 5C635FB320138E0F00979833 /* ViewController.swift in Sources */, 214 | 5C635FB120138E0F00979833 /* AppDelegate.swift in Sources */, 215 | ); 216 | runOnlyForDeploymentPostprocessing = 0; 217 | }; 218 | /* End PBXSourcesBuildPhase section */ 219 | 220 | /* Begin PBXVariantGroup section */ 221 | 5C635FB420138E0F00979833 /* Main.storyboard */ = { 222 | isa = PBXVariantGroup; 223 | children = ( 224 | 5C635FB520138E0F00979833 /* Base */, 225 | ); 226 | name = Main.storyboard; 227 | sourceTree = ""; 228 | }; 229 | 5C635FB920138E0F00979833 /* LaunchScreen.storyboard */ = { 230 | isa = PBXVariantGroup; 231 | children = ( 232 | 5C635FBA20138E0F00979833 /* Base */, 233 | ); 234 | name = LaunchScreen.storyboard; 235 | sourceTree = ""; 236 | }; 237 | /* End PBXVariantGroup section */ 238 | 239 | /* Begin XCBuildConfiguration section */ 240 | 5C635FBD20138E0F00979833 /* Debug */ = { 241 | isa = XCBuildConfiguration; 242 | buildSettings = { 243 | ALWAYS_SEARCH_USER_PATHS = NO; 244 | CLANG_ANALYZER_NONNULL = YES; 245 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 246 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 247 | CLANG_CXX_LIBRARY = "libc++"; 248 | CLANG_ENABLE_MODULES = YES; 249 | CLANG_ENABLE_OBJC_ARC = YES; 250 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 251 | CLANG_WARN_BOOL_CONVERSION = YES; 252 | CLANG_WARN_COMMA = YES; 253 | CLANG_WARN_CONSTANT_CONVERSION = YES; 254 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 255 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 256 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 257 | CLANG_WARN_EMPTY_BODY = YES; 258 | CLANG_WARN_ENUM_CONVERSION = YES; 259 | CLANG_WARN_INFINITE_RECURSION = YES; 260 | CLANG_WARN_INT_CONVERSION = YES; 261 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 262 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 263 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 264 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 265 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 266 | CLANG_WARN_STRICT_PROTOTYPES = YES; 267 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 268 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 269 | CLANG_WARN_UNREACHABLE_CODE = YES; 270 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 271 | CODE_SIGN_IDENTITY = "iPhone Developer"; 272 | COPY_PHASE_STRIP = NO; 273 | DEBUG_INFORMATION_FORMAT = dwarf; 274 | ENABLE_STRICT_OBJC_MSGSEND = YES; 275 | ENABLE_TESTABILITY = YES; 276 | GCC_C_LANGUAGE_STANDARD = gnu11; 277 | GCC_DYNAMIC_NO_PIC = NO; 278 | GCC_NO_COMMON_BLOCKS = YES; 279 | GCC_OPTIMIZATION_LEVEL = 0; 280 | GCC_PREPROCESSOR_DEFINITIONS = ( 281 | "DEBUG=1", 282 | "$(inherited)", 283 | ); 284 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 285 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 286 | GCC_WARN_UNDECLARED_SELECTOR = YES; 287 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 288 | GCC_WARN_UNUSED_FUNCTION = YES; 289 | GCC_WARN_UNUSED_VARIABLE = YES; 290 | MTL_ENABLE_DEBUG_INFO = YES; 291 | ONLY_ACTIVE_ARCH = YES; 292 | SDKROOT = iphoneos; 293 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 294 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 295 | }; 296 | name = Debug; 297 | }; 298 | 5C635FBE20138E0F00979833 /* Release */ = { 299 | isa = XCBuildConfiguration; 300 | buildSettings = { 301 | ALWAYS_SEARCH_USER_PATHS = NO; 302 | CLANG_ANALYZER_NONNULL = YES; 303 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 304 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 305 | CLANG_CXX_LIBRARY = "libc++"; 306 | CLANG_ENABLE_MODULES = YES; 307 | CLANG_ENABLE_OBJC_ARC = YES; 308 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 309 | CLANG_WARN_BOOL_CONVERSION = YES; 310 | CLANG_WARN_COMMA = YES; 311 | CLANG_WARN_CONSTANT_CONVERSION = YES; 312 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 313 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 314 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 315 | CLANG_WARN_EMPTY_BODY = YES; 316 | CLANG_WARN_ENUM_CONVERSION = YES; 317 | CLANG_WARN_INFINITE_RECURSION = YES; 318 | CLANG_WARN_INT_CONVERSION = YES; 319 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 320 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 321 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 322 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 323 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 324 | CLANG_WARN_STRICT_PROTOTYPES = YES; 325 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 326 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 327 | CLANG_WARN_UNREACHABLE_CODE = YES; 328 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 329 | CODE_SIGN_IDENTITY = "iPhone Developer"; 330 | COPY_PHASE_STRIP = NO; 331 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 332 | ENABLE_NS_ASSERTIONS = NO; 333 | ENABLE_STRICT_OBJC_MSGSEND = YES; 334 | GCC_C_LANGUAGE_STANDARD = gnu11; 335 | GCC_NO_COMMON_BLOCKS = YES; 336 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 337 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 338 | GCC_WARN_UNDECLARED_SELECTOR = YES; 339 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 340 | GCC_WARN_UNUSED_FUNCTION = YES; 341 | GCC_WARN_UNUSED_VARIABLE = YES; 342 | MTL_ENABLE_DEBUG_INFO = NO; 343 | SDKROOT = iphoneos; 344 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 345 | VALIDATE_PRODUCT = YES; 346 | }; 347 | name = Release; 348 | }; 349 | 5C635FC020138E0F00979833 /* Debug */ = { 350 | isa = XCBuildConfiguration; 351 | baseConfigurationReference = 00E1A23AE304E82951A53F23 /* Pods-Sample.debug.xcconfig */; 352 | buildSettings = { 353 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 354 | CODE_SIGN_STYLE = Automatic; 355 | DEVELOPMENT_TEAM = 63YL5QDMNS; 356 | INFOPLIST_FILE = Sample/Info.plist; 357 | IPHONEOS_DEPLOYMENT_TARGET = 11.0; 358 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 359 | PRODUCT_BUNDLE_IDENTIFIER = cn.meniny.WKWebViewController.Sample; 360 | PRODUCT_NAME = "$(TARGET_NAME)"; 361 | SWIFT_VERSION = 5.0; 362 | TARGETED_DEVICE_FAMILY = "1,2"; 363 | }; 364 | name = Debug; 365 | }; 366 | 5C635FC120138E0F00979833 /* Release */ = { 367 | isa = XCBuildConfiguration; 368 | baseConfigurationReference = AA262AAAE259CAE0B9DC31F8 /* Pods-Sample.release.xcconfig */; 369 | buildSettings = { 370 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 371 | CODE_SIGN_STYLE = Automatic; 372 | DEVELOPMENT_TEAM = 63YL5QDMNS; 373 | INFOPLIST_FILE = Sample/Info.plist; 374 | IPHONEOS_DEPLOYMENT_TARGET = 11.0; 375 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 376 | PRODUCT_BUNDLE_IDENTIFIER = cn.meniny.WKWebViewController.Sample; 377 | PRODUCT_NAME = "$(TARGET_NAME)"; 378 | SWIFT_VERSION = 5.0; 379 | TARGETED_DEVICE_FAMILY = "1,2"; 380 | }; 381 | name = Release; 382 | }; 383 | /* End XCBuildConfiguration section */ 384 | 385 | /* Begin XCConfigurationList section */ 386 | 5C635FA820138E0F00979833 /* Build configuration list for PBXProject "Sample" */ = { 387 | isa = XCConfigurationList; 388 | buildConfigurations = ( 389 | 5C635FBD20138E0F00979833 /* Debug */, 390 | 5C635FBE20138E0F00979833 /* Release */, 391 | ); 392 | defaultConfigurationIsVisible = 0; 393 | defaultConfigurationName = Release; 394 | }; 395 | 5C635FBF20138E0F00979833 /* Build configuration list for PBXNativeTarget "Sample" */ = { 396 | isa = XCConfigurationList; 397 | buildConfigurations = ( 398 | 5C635FC020138E0F00979833 /* Debug */, 399 | 5C635FC120138E0F00979833 /* Release */, 400 | ); 401 | defaultConfigurationIsVisible = 0; 402 | defaultConfigurationName = Release; 403 | }; 404 | /* End XCConfigurationList section */ 405 | }; 406 | rootObject = 5C635FA520138E0F00979833 /* Project object */; 407 | } 408 | -------------------------------------------------------------------------------- /Sample/Sample.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Sample/Sample.xcodeproj/xcuserdata/Meniny.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Sample.xcscheme 8 | 9 | orderHint 10 | 3 11 | 12 | Sample.xcscheme_^#shared#^_ 13 | 14 | orderHint 15 | 3 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /Sample/Sample.xcodeproj/xcuserdata/elias.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Sample.xcscheme 8 | 9 | orderHint 10 | 3 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Sample/Sample.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Sample/Sample.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Sample/Sample.xcworkspace/xcuserdata/Meniny.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 8 | 12 | 13 | 14 | 16 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /Sample/Sample.xcworkspace/xcuserdata/elias.xcuserdatad/UserInterfaceState.xcuserstate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Meniny/WKWebViewController/5a826c2917d3cc4840188efe2ec641ba5e225450/Sample/Sample.xcworkspace/xcuserdata/elias.xcuserdatad/UserInterfaceState.xcuserstate -------------------------------------------------------------------------------- /Sample/Sample/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // Sample 4 | // 5 | // Created by Meniny on 2018-01-20. 6 | // Copyright © 2018年 Meniny. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 18 | // Override point for customization after application launch. 19 | return true 20 | } 21 | 22 | func applicationWillResignActive(_ application: UIApplication) { 23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 24 | // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game. 25 | } 26 | 27 | func applicationDidEnterBackground(_ application: UIApplication) { 28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 30 | } 31 | 32 | func applicationWillEnterForeground(_ application: UIApplication) { 33 | // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 34 | } 35 | 36 | func applicationDidBecomeActive(_ application: UIApplication) { 37 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 38 | } 39 | 40 | func applicationWillTerminate(_ application: UIApplication) { 41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 42 | } 43 | 44 | 45 | } 46 | 47 | -------------------------------------------------------------------------------- /Sample/Sample/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 | "info" : { 90 | "version" : 1, 91 | "author" : "xcode" 92 | } 93 | } -------------------------------------------------------------------------------- /Sample/Sample/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 | -------------------------------------------------------------------------------- /Sample/Sample/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 | 34 | 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 | -------------------------------------------------------------------------------- /Sample/Sample/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleDisplayName 8 | WVC 9 | CFBundleExecutable 10 | $(EXECUTABLE_NAME) 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | NSAppTransportSecurity 26 | 27 | NSAllowsArbitraryLoads 28 | 29 | 30 | UILaunchStoryboardName 31 | LaunchScreen 32 | UIMainStoryboardFile 33 | Main 34 | UIRequiredDeviceCapabilities 35 | 36 | armv7 37 | 38 | UISupportedInterfaceOrientations 39 | 40 | UIInterfaceOrientationPortrait 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | UISupportedInterfaceOrientations~ipad 45 | 46 | UIInterfaceOrientationPortrait 47 | UIInterfaceOrientationPortraitUpsideDown 48 | UIInterfaceOrientationLandscapeLeft 49 | UIInterfaceOrientationLandscapeRight 50 | 51 | 52 | 53 | -------------------------------------------------------------------------------- /Sample/Sample/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // Sample 4 | // 5 | // Created by Meniny on 2018-01-20. 6 | // Copyright © 2018年 Meniny. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import WebKit 11 | import WKWebViewController 12 | 13 | class ViewController: UIViewController { 14 | 15 | let url = URL.init(string: "https://meniny.cn/")! 16 | 17 | override func viewDidLoad() { 18 | super.viewDidLoad() 19 | // Do any additional setup after loading the view, typically from a nib. 20 | } 21 | 22 | @IBAction func presentWeb(_ sender: UIButton) { 23 | let webViewController = WKWebViewController.init() 24 | webViewController.source = .remote(url) 25 | webViewController.bypassedSSLHosts = [url.host!] 26 | webViewController.userAgent = "WKWebViewController/1.0.0" 27 | webViewController.websiteTitleInNavigationBar = false 28 | webViewController.navigationItem.title = "Elias's Cave" 29 | webViewController.leftNavigaionBarItemTypes = [.reload] 30 | webViewController.toolbarItemTypes = [.back, .forward, .activity] 31 | 32 | let navigation = UINavigationController.init(rootViewController: webViewController) 33 | if #available(iOS 11.0, *) { 34 | navigation.navigationBar.prefersLargeTitles = true 35 | } 36 | 37 | self.present(navigation, animated: true, completion: nil) 38 | } 39 | 40 | @IBAction func showWeb(_ sender: UIButton) { 41 | let webViewController = WKWebViewController.init() 42 | webViewController.source = .remote(url) 43 | webViewController.headers = ["browser": "in-app browser"] 44 | webViewController.tintColor = .red 45 | webViewController.cookies = [ 46 | HTTPCookie(properties: 47 | [HTTPCookiePropertyKey.originURL: url.absoluteString, 48 | HTTPCookiePropertyKey.path: "/", 49 | HTTPCookiePropertyKey.name: "author", 50 | HTTPCookiePropertyKey.value: "Elias Abel"])!, 51 | HTTPCookie(properties: 52 | [HTTPCookiePropertyKey.originURL: url.absoluteString, 53 | HTTPCookiePropertyKey.path: "/", 54 | HTTPCookiePropertyKey.name: "GitHub", 55 | HTTPCookiePropertyKey.value: "Meniny"])!] 56 | self.show(webViewController, sender: self) 57 | } 58 | 59 | override func didReceiveMemoryWarning() { 60 | super.didReceiveMemoryWarning() 61 | // Dispose of any resources that can be recreated. 62 | } 63 | 64 | 65 | } 66 | 67 | -------------------------------------------------------------------------------- /WKWebViewController.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'WKWebViewController' 3 | s.version = "1.3.0" 4 | s.summary = "An UIViewController with WKWebView inside." 5 | s.homepage = "https://github.com/Meniny/WKWebViewController" 6 | s.license = { :type => "MIT", :file => "LICENSE.md" } 7 | s.author = 'Elias Abel' 8 | s.source = { :git => "https://github.com/Meniny/WKWebViewController.git", :tag => s.version.to_s } 9 | s.swift_version = "5" 10 | s.social_media_url = 'https://meniny.cn/' 11 | s.source_files = "WKWebViewController/**/*.swift" 12 | s.resources = "WKWebViewController/Assets.xcassets" 13 | s.requires_arc = true 14 | s.ios.deployment_target = "9.0" 15 | s.dependency "JustLayout" 16 | s.description = "WKWebViewController is an UIViewController with WKWebView inside." 17 | s.module_name = 'WKWebViewController' 18 | end 19 | -------------------------------------------------------------------------------- /WKWebViewController/Assets.xcassets/Back.imageset/Back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Meniny/WKWebViewController/5a826c2917d3cc4840188efe2ec641ba5e225450/WKWebViewController/Assets.xcassets/Back.imageset/Back.png -------------------------------------------------------------------------------- /WKWebViewController/Assets.xcassets/Back.imageset/Back@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Meniny/WKWebViewController/5a826c2917d3cc4840188efe2ec641ba5e225450/WKWebViewController/Assets.xcassets/Back.imageset/Back@2x.png -------------------------------------------------------------------------------- /WKWebViewController/Assets.xcassets/Back.imageset/Back@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Meniny/WKWebViewController/5a826c2917d3cc4840188efe2ec641ba5e225450/WKWebViewController/Assets.xcassets/Back.imageset/Back@3x.png -------------------------------------------------------------------------------- /WKWebViewController/Assets.xcassets/Back.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Back.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Back@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Back@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /WKWebViewController/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /WKWebViewController/Assets.xcassets/Forward.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "Forward.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "filename" : "Forward@2x.png", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "universal", 15 | "filename" : "Forward@3x.png", 16 | "scale" : "3x" 17 | } 18 | ], 19 | "info" : { 20 | "version" : 1, 21 | "author" : "xcode" 22 | }, 23 | "properties" : { 24 | "template-rendering-intent" : "template" 25 | } 26 | } -------------------------------------------------------------------------------- /WKWebViewController/Assets.xcassets/Forward.imageset/Forward.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Meniny/WKWebViewController/5a826c2917d3cc4840188efe2ec641ba5e225450/WKWebViewController/Assets.xcassets/Forward.imageset/Forward.png -------------------------------------------------------------------------------- /WKWebViewController/Assets.xcassets/Forward.imageset/Forward@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Meniny/WKWebViewController/5a826c2917d3cc4840188efe2ec641ba5e225450/WKWebViewController/Assets.xcassets/Forward.imageset/Forward@2x.png -------------------------------------------------------------------------------- /WKWebViewController/Assets.xcassets/Forward.imageset/Forward@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Meniny/WKWebViewController/5a826c2917d3cc4840188efe2ec641ba5e225450/WKWebViewController/Assets.xcassets/Forward.imageset/Forward@3x.png -------------------------------------------------------------------------------- /WKWebViewController/Enums.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Enums.swift 3 | // Sample 4 | // 5 | // Created by Meniny on 2018-01-20. 6 | // Copyright © 2018年 Meniny. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | public enum WKWebSource: Equatable { 12 | case remote(URL) 13 | case file(URL, access: URL) 14 | case string(String, base: URL?) 15 | 16 | public var url: URL? { 17 | switch self { 18 | case .remote(let u): return u 19 | case .file(let u, access: _): return u 20 | default: return nil 21 | } 22 | } 23 | 24 | public var remoteURL: URL? { 25 | switch self { 26 | case .remote(let u): return u 27 | default: return nil 28 | } 29 | } 30 | 31 | public var absoluteString: String? { 32 | switch self { 33 | case .remote(let u): return u.absoluteString 34 | case .file(let u, access: _): return u.absoluteString 35 | default: return nil 36 | } 37 | } 38 | } 39 | 40 | public enum BarButtonItemType { 41 | case back 42 | case forward 43 | case reload 44 | case stop 45 | case activity 46 | case done 47 | case flexibleSpace 48 | case custom(icon: UIImage?, title: String?, action: (WKWebViewController) -> Void) 49 | } 50 | 51 | public enum NavigationBarPosition: String, Equatable, Codable { 52 | case none 53 | case left 54 | case right 55 | } 56 | 57 | @objc public enum NavigationType: Int, Equatable, Codable { 58 | case linkActivated 59 | case formSubmitted 60 | case backForward 61 | case reload 62 | case formResubmitted 63 | case other 64 | } 65 | -------------------------------------------------------------------------------- /WKWebViewController/WKWebViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // WKWebViewController.swift 3 | // Sample 4 | // 5 | // Created by Meniny on 2018-01-20. 6 | // Copyright © 2018年 Meniny. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import WebKit 11 | import JustLayout 12 | 13 | fileprivate let estimatedProgressKeyPath = "estimatedProgress" 14 | fileprivate let titleKeyPath = "title" 15 | fileprivate let cookieKey = "Cookie" 16 | 17 | fileprivate struct UrlsHandledByApp { 18 | public static var hosts = ["itunes.apple.com"] 19 | public static var schemes = ["tel", "mailto", "sms"] 20 | public static var blank = true 21 | } 22 | 23 | @objc public protocol WKWebViewControllerDelegate { 24 | @objc optional func webViewController(_ controller: WKWebViewController, canDismiss url: URL) -> Bool 25 | 26 | @objc optional func webViewController(_ controller: WKWebViewController, didStart url: URL) 27 | @objc optional func webViewController(_ controller: WKWebViewController, didFinish url: URL) 28 | @objc optional func webViewController(_ controller: WKWebViewController, didFail url: URL, withError error: Error) 29 | @objc optional func webViewController(_ controller: WKWebViewController, decidePolicy url: URL, navigationType: NavigationType) -> Bool 30 | } 31 | 32 | open class WKWebViewController: UIViewController { 33 | 34 | public init() { 35 | super.init(nibName: nil, bundle: nil) 36 | } 37 | 38 | public required init?(coder aDecoder: NSCoder) { 39 | super.init(coder: aDecoder) 40 | } 41 | 42 | public init(source: WKWebSource?) { 43 | super.init(nibName: nil, bundle: nil) 44 | self.source = source 45 | } 46 | 47 | public init(url: URL) { 48 | super.init(nibName: nil, bundle: nil) 49 | self.source = .remote(url) 50 | } 51 | 52 | open var source: WKWebSource? 53 | /// use `source` instead 54 | open internal(set) var url: URL? 55 | open var tintColor: UIColor? 56 | open var allowsFileURL = true 57 | open var delegate: WKWebViewControllerDelegate? 58 | open var bypassedSSLHosts: [String]? 59 | open var cookies: [HTTPCookie]? 60 | open var headers: [String: String]? 61 | internal var customUserAgent: String? { 62 | didSet { 63 | guard let agent = userAgent else { 64 | return 65 | } 66 | webView?.customUserAgent = agent 67 | } 68 | } 69 | 70 | open var userAgent: String? { 71 | didSet { 72 | guard let originalUserAgent = originalUserAgent, let userAgent = userAgent else { 73 | return 74 | } 75 | webView?.customUserAgent = [originalUserAgent, userAgent].joined(separator: " ") 76 | } 77 | } 78 | 79 | open var pureUserAgent: String? { 80 | didSet { 81 | guard let agent = pureUserAgent else { 82 | return 83 | } 84 | webView?.customUserAgent = agent 85 | } 86 | } 87 | 88 | open var websiteTitleInNavigationBar = true 89 | open var doneBarButtonItemPosition: NavigationBarPosition = .right 90 | open var leftNavigaionBarItemTypes: [BarButtonItemType] = [] 91 | open var rightNavigaionBarItemTypes: [BarButtonItemType] = [] 92 | open var toolbarItemTypes: [BarButtonItemType] = [.back, .forward, .reload, .activity] 93 | 94 | open var backBarButtonItemImage: UIImage? 95 | open var forwardBarButtonItemImage: UIImage? 96 | open var reloadBarButtonItemImage: UIImage? 97 | open var stopBarButtonItemImage: UIImage? 98 | open var activityBarButtonItemImage: UIImage? 99 | 100 | fileprivate var webView: WKWebView? 101 | fileprivate var progressView: UIProgressView? 102 | 103 | fileprivate var previousNavigationBarState: (tintColor: UIColor, hidden: Bool) = (.black, false) 104 | fileprivate var previousToolbarState: (tintColor: UIColor, hidden: Bool) = (.black, false) 105 | 106 | lazy fileprivate var originalUserAgent = UIWebView().stringByEvaluatingJavaScript(from: "navigator.userAgent") 107 | 108 | lazy fileprivate var backBarButtonItem: UIBarButtonItem = { 109 | let bundle = Bundle(for: WKWebViewController.self) 110 | return UIBarButtonItem(image: backBarButtonItemImage ?? UIImage(named: "Back", in: bundle, compatibleWith: nil), style: .plain, target: self, action: #selector(backDidClick(sender:))) 111 | }() 112 | 113 | lazy fileprivate var forwardBarButtonItem: UIBarButtonItem = { 114 | let bundle = Bundle(for: WKWebViewController.self) 115 | return UIBarButtonItem(image: forwardBarButtonItemImage ?? UIImage(named: "Forward", in: bundle, compatibleWith: nil), style: .plain, target: self, action: #selector(forwardDidClick(sender:))) 116 | }() 117 | 118 | lazy fileprivate var reloadBarButtonItem: UIBarButtonItem = { 119 | if let image = reloadBarButtonItemImage { 120 | return UIBarButtonItem(image: image, style: .plain, target: self, action: #selector(reloadDidClick(sender:))) 121 | } else { 122 | return UIBarButtonItem(barButtonSystemItem: .refresh, target: self, action: #selector(reloadDidClick(sender:))) 123 | } 124 | }() 125 | 126 | lazy fileprivate var stopBarButtonItem: UIBarButtonItem = { 127 | if let image = stopBarButtonItemImage { 128 | return UIBarButtonItem(image: image, style: .plain, target: self, action: #selector(stopDidClick(sender:))) 129 | } else { 130 | return UIBarButtonItem(barButtonSystemItem: .stop, target: self, action: #selector(stopDidClick(sender:))) 131 | } 132 | }() 133 | 134 | lazy fileprivate var activityBarButtonItem: UIBarButtonItem = { 135 | if let image = activityBarButtonItemImage { 136 | return UIBarButtonItem(image: image, style: .plain, target: self, action: #selector(activityDidClick(sender:))) 137 | } else { 138 | return UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(activityDidClick(sender:))) 139 | } 140 | }() 141 | 142 | lazy fileprivate var doneBarButtonItem: UIBarButtonItem = { 143 | return UIBarButtonItem(barButtonSystemItem: .done, target: self, action: #selector(doneDidClick(sender:))) 144 | }() 145 | 146 | lazy fileprivate var flexibleSpaceBarButtonItem: UIBarButtonItem = { 147 | return UIBarButtonItem(barButtonSystemItem: .flexibleSpace, target: nil, action: nil) 148 | }() 149 | 150 | deinit { 151 | webView?.removeObserver(self, forKeyPath: estimatedProgressKeyPath) 152 | if websiteTitleInNavigationBar { 153 | webView?.removeObserver(self, forKeyPath: titleKeyPath) 154 | } 155 | } 156 | 157 | override open func viewDidLoad() { 158 | super.viewDidLoad() 159 | 160 | self.view.backgroundColor = UIColor.white 161 | 162 | self.extendedLayoutIncludesOpaqueBars = true 163 | self.edgesForExtendedLayout = [.bottom] 164 | 165 | let webConfiguration = WKWebViewConfiguration() 166 | let webView = WKWebView(frame: .zero, configuration: webConfiguration) 167 | 168 | webView.uiDelegate = self 169 | webView.navigationDelegate = self 170 | 171 | webView.allowsBackForwardNavigationGestures = true 172 | webView.isMultipleTouchEnabled = true 173 | 174 | webView.addObserver(self, forKeyPath: estimatedProgressKeyPath, options: .new, context: nil) 175 | if websiteTitleInNavigationBar { 176 | webView.addObserver(self, forKeyPath: titleKeyPath, options: .new, context: nil) 177 | } 178 | 179 | // view = webView 180 | self.webView = webView 181 | 182 | self.webView?.customUserAgent = self.customUserAgent ?? self.userAgent ?? self.originalUserAgent 183 | 184 | self.navigationItem.title = self.navigationItem.title ?? self.source?.absoluteString 185 | 186 | if let navigation = self.navigationController { 187 | self.previousNavigationBarState = (navigation.navigationBar.tintColor, navigation.navigationBar.isHidden) 188 | self.previousToolbarState = (navigation.toolbar.tintColor, navigation.toolbar.isHidden) 189 | } 190 | 191 | self.setUpProgressView() 192 | self.setUpConstraints() 193 | self.addBarButtonItems() 194 | 195 | if let s = self.source { 196 | self.load(source: s) 197 | } else { 198 | print("[\(type(of: self))][Error] Invalid url") 199 | } 200 | } 201 | 202 | override open func viewWillAppear(_ animated: Bool) { 203 | super.viewWillAppear(animated) 204 | 205 | setUpState() 206 | } 207 | 208 | override open func viewWillDisappear(_ animated: Bool) { 209 | super.viewWillDisappear(animated) 210 | 211 | rollbackState() 212 | } 213 | 214 | override open func didReceiveMemoryWarning() { 215 | super.didReceiveMemoryWarning() 216 | // Dispose of any resources that can be recreated. 217 | } 218 | 219 | override open func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) { 220 | switch keyPath { 221 | case estimatedProgressKeyPath?: 222 | guard let estimatedProgress = self.webView?.estimatedProgress else { 223 | return 224 | } 225 | self.progressView?.alpha = 1 226 | self.progressView?.setProgress(Float(estimatedProgress), animated: true) 227 | 228 | if estimatedProgress >= 1.0 { 229 | UIView.animate(withDuration: 0.3, delay: 0.3, options: .curveEaseOut, animations: { 230 | self.progressView?.alpha = 0 231 | }, completion: { 232 | finished in 233 | self.progressView?.setProgress(0, animated: false) 234 | }) 235 | } 236 | case titleKeyPath?: 237 | navigationItem.title = webView?.title 238 | default: 239 | super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context) 240 | } 241 | } 242 | } 243 | 244 | // MARK: - Public Methods 245 | public extension WKWebViewController { 246 | 247 | func load(source s: WKWebSource) { 248 | switch s { 249 | case .remote(let url): 250 | self.load(remote: url) 251 | case .file(let url, access: let access): 252 | self.load(file: url, access: access) 253 | case .string(let str, base: let base): 254 | self.load(string: str, base: base) 255 | } 256 | } 257 | 258 | func load(remote: URL) { 259 | webView?.load(createRequest(url: remote)) 260 | } 261 | 262 | func load(file: URL, access: URL) { 263 | webView?.loadFileURL(file, allowingReadAccessTo: access) 264 | } 265 | 266 | func load(string: String, base: URL? = nil) { 267 | webView?.loadHTMLString(string, baseURL: base) 268 | } 269 | 270 | func goBackToFirstPage() { 271 | if let firstPageItem = webView?.backForwardList.backList.first { 272 | webView?.go(to: firstPageItem) 273 | } 274 | } 275 | } 276 | 277 | // MARK: - Fileprivate Methods 278 | fileprivate extension WKWebViewController { 279 | var availableCookies: [HTTPCookie]? { 280 | return cookies?.filter { 281 | cookie in 282 | var result = true 283 | let url = self.source?.remoteURL 284 | if let host = url?.host, !cookie.domain.hasSuffix(host) { 285 | result = false 286 | } 287 | if cookie.isSecure && url?.scheme != "https" { 288 | result = false 289 | } 290 | 291 | return result 292 | } 293 | } 294 | func createRequest(url: URL) -> URLRequest { 295 | var request = URLRequest(url: url) 296 | 297 | // Set up headers 298 | if let headers = headers { 299 | for (field, value) in headers { 300 | request.addValue(value, forHTTPHeaderField: field) 301 | } 302 | } 303 | 304 | // Set up Cookies 305 | if let cookies = availableCookies, let value = HTTPCookie.requestHeaderFields(with: cookies)[cookieKey] { 306 | request.addValue(value, forHTTPHeaderField: cookieKey) 307 | } 308 | 309 | return request 310 | } 311 | 312 | func setUpProgressView() { 313 | let progressView = UIProgressView(progressViewStyle: .default) 314 | progressView.trackTintColor = UIColor(white: 1, alpha: 0) 315 | self.progressView = progressView 316 | // updateProgressViewFrame() 317 | } 318 | 319 | func setUpConstraints() { 320 | if let progressView = self.progressView, let web = self.webView { 321 | self.view.translates(subViews: progressView, web) 322 | self.view.layout( 323 | 0, 324 | |progressView| ~ 2, 325 | 0, 326 | |web|, 327 | 0 328 | ) 329 | } 330 | } 331 | 332 | func addBarButtonItems() { 333 | func barButtonItem(_ type: BarButtonItemType) -> UIBarButtonItem? { 334 | switch type { 335 | case .back: 336 | return backBarButtonItem 337 | case .forward: 338 | return forwardBarButtonItem 339 | case .reload: 340 | return reloadBarButtonItem 341 | case .stop: 342 | return stopBarButtonItem 343 | case .activity: 344 | return activityBarButtonItem 345 | case .done: 346 | return doneBarButtonItem 347 | case .flexibleSpace: 348 | return flexibleSpaceBarButtonItem 349 | case .custom(let icon, let title, let action): 350 | let item: BlockBarButtonItem 351 | if let icon = icon { 352 | item = BlockBarButtonItem(image: icon, style: .plain, target: self, action: #selector(customDidClick(sender:))) 353 | } else { 354 | item = BlockBarButtonItem(title: title, style: .plain, target: self, action: #selector(customDidClick(sender:))) 355 | } 356 | item.block = action 357 | return item 358 | } 359 | } 360 | 361 | if presentingViewController != nil { 362 | switch doneBarButtonItemPosition { 363 | case .left: 364 | if !leftNavigaionBarItemTypes.contains(where: { type in 365 | switch type { 366 | case .done: 367 | return true 368 | default: 369 | return false 370 | } 371 | }) { 372 | leftNavigaionBarItemTypes.insert(.done, at: 0) 373 | } 374 | case .right: 375 | if !rightNavigaionBarItemTypes.contains(where: { type in 376 | switch type { 377 | case .done: 378 | return true 379 | default: 380 | return false 381 | } 382 | }) { 383 | rightNavigaionBarItemTypes.insert(.done, at: 0) 384 | } 385 | case .none: 386 | break 387 | } 388 | } 389 | 390 | navigationItem.leftBarButtonItems = leftNavigaionBarItemTypes.map { 391 | barButtonItemType in 392 | if let barButtonItem = barButtonItem(barButtonItemType) { 393 | return barButtonItem 394 | } 395 | return UIBarButtonItem() 396 | } 397 | 398 | navigationItem.rightBarButtonItems = rightNavigaionBarItemTypes.map { 399 | barButtonItemType in 400 | if let barButtonItem = barButtonItem(barButtonItemType) { 401 | return barButtonItem 402 | } 403 | return UIBarButtonItem() 404 | } 405 | 406 | if toolbarItemTypes.count > 0 { 407 | for index in 0.. UIBarButtonItem in 414 | if let barButtonItem = barButtonItem(barButtonItemType) { 415 | return barButtonItem 416 | } 417 | return UIBarButtonItem() 418 | }, animated: true) 419 | } 420 | 421 | func updateBarButtonItems() { 422 | backBarButtonItem.isEnabled = webView?.canGoBack ?? false 423 | forwardBarButtonItem.isEnabled = webView?.canGoForward ?? false 424 | 425 | let updateReloadBarButtonItem: (UIBarButtonItem, Bool) -> UIBarButtonItem = { 426 | [unowned self] barButtonItem, isLoading in 427 | switch barButtonItem { 428 | case self.reloadBarButtonItem: 429 | fallthrough 430 | case self.stopBarButtonItem: 431 | return isLoading ? self.stopBarButtonItem : self.reloadBarButtonItem 432 | default: 433 | break 434 | } 435 | return barButtonItem 436 | } 437 | 438 | let isLoading = webView?.isLoading ?? false 439 | toolbarItems = toolbarItems?.map { 440 | barButtonItem -> UIBarButtonItem in 441 | return updateReloadBarButtonItem(barButtonItem, isLoading) 442 | } 443 | 444 | navigationItem.leftBarButtonItems = navigationItem.leftBarButtonItems?.map { 445 | barButtonItem -> UIBarButtonItem in 446 | return updateReloadBarButtonItem(barButtonItem, isLoading) 447 | } 448 | 449 | navigationItem.rightBarButtonItems = navigationItem.rightBarButtonItems?.map { 450 | barButtonItem -> UIBarButtonItem in 451 | return updateReloadBarButtonItem(barButtonItem, isLoading) 452 | } 453 | } 454 | 455 | func setUpState() { 456 | navigationController?.setNavigationBarHidden(false, animated: true) 457 | navigationController?.setToolbarHidden(toolbarItemTypes.count == 0, animated: true) 458 | 459 | if let tintColor = tintColor { 460 | progressView?.progressTintColor = tintColor 461 | navigationController?.navigationBar.tintColor = tintColor 462 | navigationController?.toolbar.tintColor = tintColor 463 | } 464 | } 465 | 466 | func rollbackState() { 467 | progressView?.progress = 0 468 | 469 | navigationController?.navigationBar.tintColor = previousNavigationBarState.tintColor 470 | navigationController?.toolbar.tintColor = previousToolbarState.tintColor 471 | 472 | navigationController?.setToolbarHidden(previousToolbarState.hidden, animated: true) 473 | navigationController?.setNavigationBarHidden(previousNavigationBarState.hidden, animated: true) 474 | } 475 | 476 | func checkRequestCookies(_ request: URLRequest, cookies: [HTTPCookie]) -> Bool { 477 | if cookies.count <= 0 { 478 | return true 479 | } 480 | guard let headerFields = request.allHTTPHeaderFields, let cookieString = headerFields[cookieKey] else { 481 | return false 482 | } 483 | 484 | let requestCookies = cookieString.components(separatedBy: ";").map { 485 | $0.trimmingCharacters(in: .whitespacesAndNewlines).split(separator: "=", maxSplits: 1).map(String.init) 486 | } 487 | 488 | var valid = false 489 | for cookie in cookies { 490 | valid = requestCookies.filter { 491 | $0[0] == cookie.name && $0[1] == cookie.value 492 | }.count > 0 493 | if !valid { 494 | break 495 | } 496 | } 497 | return valid 498 | } 499 | 500 | func openURLWithApp(_ url: URL) -> Bool { 501 | let application = UIApplication.shared 502 | if application.canOpenURL(url) { 503 | return application.openURL(url) 504 | } 505 | 506 | return false 507 | } 508 | 509 | func handleURLWithApp(_ url: URL, targetFrame: WKFrameInfo?) -> Bool { 510 | let hosts = UrlsHandledByApp.hosts 511 | let schemes = UrlsHandledByApp.schemes 512 | let blank = UrlsHandledByApp.blank 513 | 514 | var tryToOpenURLWithApp = false 515 | if let host = url.host, hosts.contains(host) { 516 | tryToOpenURLWithApp = true 517 | } 518 | if let scheme = url.scheme, schemes.contains(scheme) { 519 | tryToOpenURLWithApp = true 520 | } 521 | if blank && targetFrame == nil { 522 | tryToOpenURLWithApp = true 523 | } 524 | 525 | return tryToOpenURLWithApp ? openURLWithApp(url) : false 526 | } 527 | 528 | @objc func backDidClick(sender: AnyObject) { 529 | webView?.goBack() 530 | } 531 | 532 | @objc func forwardDidClick(sender: AnyObject) { 533 | webView?.goForward() 534 | } 535 | 536 | @objc func reloadDidClick(sender: AnyObject) { 537 | webView?.stopLoading() 538 | if webView?.url != nil { 539 | webView?.reload() 540 | } else if let s = self.source { 541 | self.load(source: s) 542 | } 543 | } 544 | 545 | @objc func stopDidClick(sender: AnyObject) { 546 | webView?.stopLoading() 547 | } 548 | 549 | @objc func activityDidClick(sender: AnyObject) { 550 | guard let s = self.source else { 551 | return 552 | } 553 | 554 | let items: [Any] 555 | switch s { 556 | case .remote(let u): 557 | items = [u] 558 | case .file(let u, access: _): 559 | items = [u] 560 | case .string(let str, base: _): 561 | items = [str] 562 | } 563 | 564 | let activityViewController = UIActivityViewController(activityItems: items, applicationActivities: nil) 565 | present(activityViewController, animated: true, completion: nil) 566 | } 567 | 568 | @objc func doneDidClick(sender: AnyObject) { 569 | var canDismiss = true 570 | if let url = self.source?.url { 571 | canDismiss = delegate?.webViewController?(self, canDismiss: url) ?? true 572 | } 573 | if canDismiss { 574 | dismiss(animated: true, completion: nil) 575 | } 576 | } 577 | 578 | @objc func customDidClick(sender: BlockBarButtonItem) { 579 | sender.block?(self) 580 | } 581 | } 582 | 583 | // MARK: - WKUIDelegate 584 | extension WKWebViewController: WKUIDelegate { 585 | 586 | } 587 | 588 | // MARK: - WKNavigationDelegate 589 | extension WKWebViewController: WKNavigationDelegate { 590 | public func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) { 591 | updateBarButtonItems() 592 | self.progressView?.progress = 0 593 | if let u = webView.url { 594 | self.url = u 595 | delegate?.webViewController?(self, didStart: u) 596 | } 597 | } 598 | public func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { 599 | updateBarButtonItems() 600 | self.progressView?.progress = 0 601 | if let url = webView.url { 602 | self.url = url 603 | delegate?.webViewController?(self, didFinish: url) 604 | } 605 | } 606 | 607 | public func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) { 608 | updateBarButtonItems() 609 | self.progressView?.progress = 0 610 | if let url = webView.url { 611 | self.url = url 612 | delegate?.webViewController?(self, didFail: url, withError: error) 613 | } 614 | } 615 | 616 | public func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) { 617 | updateBarButtonItems() 618 | self.progressView?.progress = 0 619 | if let url = webView.url { 620 | self.url = url 621 | delegate?.webViewController?(self, didFail: url, withError: error) 622 | } 623 | } 624 | 625 | public func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { 626 | if let bypassedSSLHosts = bypassedSSLHosts, bypassedSSLHosts.contains(challenge.protectionSpace.host) { 627 | let credential = URLCredential(trust: challenge.protectionSpace.serverTrust!) 628 | completionHandler(.useCredential, credential) 629 | } else { 630 | completionHandler(.performDefaultHandling, nil) 631 | } 632 | } 633 | 634 | public func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { 635 | var actionPolicy: WKNavigationActionPolicy = .allow 636 | defer { 637 | decisionHandler(actionPolicy) 638 | } 639 | guard let u = navigationAction.request.url else { 640 | print("Cannot handle empty URLs") 641 | return 642 | } 643 | 644 | if !self.allowsFileURL && u.isFileURL { 645 | print("Cannot handle file URLs") 646 | return 647 | } 648 | 649 | if handleURLWithApp(u, targetFrame: navigationAction.targetFrame) { 650 | actionPolicy = .cancel 651 | return 652 | } 653 | 654 | if u.host == self.source?.url?.host, let cookies = availableCookies, !checkRequestCookies(navigationAction.request, cookies: cookies) { 655 | self.load(remote: u) 656 | actionPolicy = .cancel 657 | return 658 | } 659 | 660 | if let navigationType = NavigationType(rawValue: navigationAction.navigationType.rawValue), let result = delegate?.webViewController?(self, decidePolicy: u, navigationType: navigationType) { 661 | actionPolicy = result ? .allow : .cancel 662 | } 663 | } 664 | } 665 | 666 | class BlockBarButtonItem: UIBarButtonItem { 667 | 668 | var block: ((WKWebViewController) -> Void)? 669 | } 670 | --------------------------------------------------------------------------------