├── .github └── workflows │ ├── swiftlint.yml │ └── test.yml ├── .gitignore ├── Configs ├── SwiftPublicIP.plist └── SwiftPublicIPTests.plist ├── LICENSE ├── Package.swift ├── README.md ├── Sources ├── PublicIPAPI.swift ├── PublicIPAPIURLs.swift └── SwiftPublicIP.swift ├── SwiftPublicIP-CLI └── main.swift ├── SwiftPublicIP.podspec ├── SwiftPublicIP.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── xcshareddata │ └── xcschemes │ ├── SwiftPublicIP-iOS.xcscheme │ ├── SwiftPublicIP-macOS.xcscheme │ ├── SwiftPublicIP-tvOS.xcscheme │ └── SwiftPublicIP-watchOS.xcscheme ├── Tests ├── LinuxMain.swift └── SwiftPublicIPTests │ └── SwiftPublicIPTests.swift └── renovate.json /.github/workflows/swiftlint.yml: -------------------------------------------------------------------------------- 1 | name: SwiftLint 2 | 3 | on: 4 | pull_request: 5 | paths: 6 | - '.github/workflows/swiftlint.yml' 7 | - '.swiftlint.yml' 8 | - '**/*.swift' 9 | 10 | jobs: 11 | SwiftLint: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v4 15 | - name: GitHub Action for SwiftLint 16 | uses: norio-nomura/action-swiftlint@3.2.1 17 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | 3 | on: 4 | push: 5 | branches: [ master ] 6 | pull_request: 7 | paths: 8 | - '.github/workflows/test.yml' 9 | - '**/*.swift' 10 | - 'Tests/**' 11 | 12 | jobs: 13 | test: 14 | container: 15 | image: swift 16 | runs-on: ubuntu-latest 17 | steps: 18 | - uses: actions/checkout@v4 19 | - name: Test with Code Coverage 20 | run: swift test --enable-code-coverage --filter '^((?!ipv6).)*$' 21 | - name: Report Codecov 22 | run: | 23 | llvm-cov report .build/debug/SwiftPublicIPPackageTests.xctest -instr-profile=.build/debug/codecov/default.profdata -use-color 24 | - name: Export Codecov 25 | run: | 26 | mkdir -p coverage 27 | llvm-cov export -format="lcov" .build/debug/SwiftPublicIPPackageTests.xctest -instr-profile .build/debug/codecov/default.profdata > ./coverage/lcov.info 28 | - name: Convert Absolute Path to Relative Path 29 | run: sed -i "s~${PWD}/~~g" ./coverage/lcov.info 30 | - uses: actions/upload-artifact@v3 31 | with: 32 | name: lcov.info 33 | path: ./coverage/lcov.info 34 | retention-days: 1 35 | codecov: 36 | needs: test 37 | runs-on: ubuntu-latest 38 | steps: 39 | - uses: actions/download-artifact@v3 40 | with: 41 | name: lcov.info 42 | path: ./coverage/ 43 | - run: ls -R 44 | - uses: HackingGate/lcov-reporter-action@a1c0d02b814fedd5aff86d9e7eac73834eb6e091 45 | with: 46 | lcov-base: ./coverage/lcov-base.info 47 | lcov-file: ./coverage/lcov.info 48 | - run: cat ./coverage/body.html 49 | - uses: actions/github-script@v6 50 | with: 51 | script: | 52 | fs = require('fs'); 53 | fs.readFile('./coverage/body.html', 'utf8', function (error,data) { 54 | if (error) { 55 | console.log(error) 56 | } 57 | if (context.eventName === "pull_request") { 58 | github.issues.createComment({ 59 | issue_number: context.issue.number, 60 | owner: context.repo.owner, 61 | repo: context.repo.repo, 62 | body: data 63 | }) 64 | } else if (context.eventName === "push") { 65 | github.repos.createCommitComment({ 66 | commit_sha: context.sha, 67 | owner: context.repo.owner, 68 | repo: context.repo.repo, 69 | body: data 70 | }) 71 | } 72 | }); 73 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | 20 | ## Other 21 | *.moved-aside 22 | *.xccheckout 23 | *.xcscmblueprint 24 | 25 | ## Obj-C/Swift specific 26 | *.hmap 27 | *.ipa 28 | *.dSYM.zip 29 | *.dSYM 30 | 31 | ## Playgrounds 32 | timeline.xctimeline 33 | playground.xcworkspace 34 | 35 | # Swift Package Manager 36 | # 37 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 38 | # Packages/ 39 | # Package.pins 40 | # Package.resolved 41 | .build/ 42 | 43 | # CocoaPods 44 | # 45 | # We recommend against adding the Pods directory to your .gitignore. However 46 | # you should judge for yourself, the pros and cons are mentioned at: 47 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 48 | # 49 | # Pods/ 50 | 51 | # Carthage 52 | # 53 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 54 | # Carthage/Checkouts 55 | 56 | Carthage/Build 57 | 58 | # fastlane 59 | # 60 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 61 | # screenshots whenever they are needed. 62 | # For more information about the recommended setup visit: 63 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 64 | 65 | fastlane/report.xml 66 | fastlane/Preview.html 67 | fastlane/screenshots/**/*.png 68 | fastlane/test_output 69 | -------------------------------------------------------------------------------- /Configs/SwiftPublicIP.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 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSHumanReadableCopyright 24 | Copyright © 2019 HackingGate. All rights reserved. 25 | NSPrincipalClass 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /Configs/SwiftPublicIPTests.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 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 HackingGate 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. 22 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.0 2 | 3 | import PackageDescription 4 | 5 | let package = Package( 6 | name: "SwiftPublicIP", 7 | products: [ 8 | .library( 9 | name: "SwiftPublicIP", 10 | targets: ["SwiftPublicIP"]) 11 | ], 12 | targets: [ 13 | .target( 14 | name: "SwiftPublicIP", 15 | dependencies: [], 16 | path: "Sources"), 17 | .testTarget( 18 | name: "SwiftPublicIPTests", 19 | dependencies: ["SwiftPublicIP"]) 20 | ] 21 | ) 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Swift-Public-IP 2 | [![SwiftLint](https://github.com/HackingGate/Swift-Public-IP/actions/workflows/swiftlint.yml/badge.svg)](https://github.com/HackingGate/Swift-Public-IP/actions/workflows/swiftlint.yml) 3 | [![Test](https://github.com/HackingGate/Swift-Public-IP/actions/workflows/test.yml/badge.svg)](https://github.com/HackingGate/Swift-Public-IP/actions/workflows/test.yml) 4 | 5 | Swift library for checking your public IP address 6 | 7 | Supports macOS, iOS, tvOS, watchOS and Linux. 8 | 9 | Uses [icanhazip](https://icanhazip.com), [ipv6test](https://v4v6.ipv6-test.com/api/myip.php), [seeip](https://ip.seeip.org), [whatismyipaddress](https://bot.whatismyipaddress.com), [ident](https://ident.me/) and etc. 10 | 11 | ## Usage 12 | 13 | ```swift 14 | import SwiftPublicIP 15 | 16 | SwiftPublicIP.getPublicIP(url: PublicIPAPIURLs.IPv4.icanhazip.rawValue) { (string, error) in 17 | if let error = error { 18 | print(error.localizedDescription) 19 | } else if let string = string { 20 | print(string) // Your IP address 21 | } 22 | } 23 | ``` 24 | 25 | ## Implementation 26 | 27 | ### Carthage 28 | 29 | Add it in the Cartfile. 30 | 31 | ``` 32 | github "HackingGate/Swift-Public-IP" "0.0.2" 33 | ``` 34 | 35 | Run `carthage update`. 36 | 37 | Add the SwiftPublicIP framework as an embedded binary to your .xcodeproj file. 38 | 39 | ### CocoaPods 40 | 41 | Add it in the Podfile 42 | 43 | ``` 44 | pod 'SwiftPublicIP', '~> 0.0.2' 45 | ``` 46 | 47 | Run `pod install`. 48 | 49 | If you only want try this pod without import it. Run `pod try SwiftPublicIP`. 50 | 51 | ### Swift Package Manager (SPM) 52 | 53 | You need Package.swift file. 54 | 55 | ```swift 56 | // swift-tools-version:5.0 57 | 58 | import PackageDescription 59 | 60 | let package = Package( 61 | name: "YourAwesomeApp", 62 | dependencies: [ 63 | .package(url: "https://github.com/HackingGate/Swift-Public-IP", from: "0.0.2"), 64 | ], 65 | targets: [ 66 | .target( 67 | name: "YourAwesomeApp", 68 | dependencies: ["SwiftPublicIP"], 69 | path: "Sources") 70 | ] 71 | ) 72 | ``` 73 | 74 | ### Git Submodule or Manual 75 | 76 | Add as a git submodule. 77 | 78 | ``` 79 | git submodule add https://github.com/HackingGate/Swift-Public-IP 80 | ``` 81 | 82 | If you don't use git, just download it manually. 83 | 84 | Drag SwiftPublicIP.xcodeproj to your project. 85 | 86 | Add the SwiftPublicIP framework as an embedded binary to your .xcodeproj file. 87 | 88 | If you want to remove git submodule Swift-Public-IP. 89 | 90 | ``` 91 | git submodule deinit Swift-Public-IP 92 | ``` 93 | 94 | And don't forget remove reference from Xcode. 95 | -------------------------------------------------------------------------------- /Sources/PublicIPAPI.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PublicIPAPI.swift 3 | // SwiftPublicIP 4 | // 5 | // Created by HackingGate on 2019/05/13. 6 | // Copyright © 2019 SwiftPublicIP. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | #if canImport(FoundationNetworking) 12 | import FoundationNetworking 13 | #endif 14 | 15 | typealias CompletionHandler = (String?, Error?) -> Void 16 | 17 | func getPublicIPAddress(requestURL: URL, completion: @escaping CompletionHandler) { 18 | URLSession.shared.dataTask(with: requestURL) { (data, _, error) in 19 | if let error = error { 20 | completion(nil, CustomError.error(error)) 21 | return 22 | } 23 | guard let data = data else { 24 | completion(nil, CustomError.noData) 25 | return 26 | } 27 | guard let result = String(data: data, encoding: .utf8) else { 28 | completion(nil, CustomError.undecodeable) 29 | return 30 | } 31 | let ipAddress = String(result.filter { !" \n\t\r".contains($0) }) 32 | completion(ipAddress, nil) 33 | }.resume() 34 | } 35 | 36 | enum CustomError: LocalizedError { 37 | case noData 38 | case error(Error) 39 | case undecodeable 40 | 41 | public var errorDescription: String? { 42 | switch self { 43 | case .noData: 44 | return "No data response." 45 | case .error(let err): 46 | return err.localizedDescription 47 | case .undecodeable: 48 | return "Data undecodeable." 49 | } 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /Sources/PublicIPAPIURLs.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PublicIPAPIURLs.swift 3 | // SwiftPublicIP 4 | // 5 | // Created by ERU on 2019/05/18. 6 | // Copyright © 2019 SwiftPublicIP. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | public enum PublicIPAPIURLs { 12 | 13 | public enum Hybrid: String, CaseIterable { 14 | case icanhazip = "https://icanhazip.com" 15 | case ipv6test = "https://v4v6.ipv6-test.com/api/myip.php" 16 | case seeip = "https://ip.seeip.org" 17 | case whatismyipaddress = "https://bot.whatismyipaddress.com" 18 | case ident = "https://ident.me/" 19 | } 20 | 21 | public enum IPv4: String, CaseIterable { 22 | case icanhazip = "https://ipv4.icanhazip.com" 23 | case ipv6test = "https://v4.ipv6-test.com/api/myip.php" 24 | case seeip = "https://ip4.seeip.org" 25 | case whatismyipaddress = "https://ipv4bot.whatismyipaddress.com" 26 | case ident = "https://v4.ident.me/" 27 | 28 | case ipify = "https://api.ipify.org" 29 | 30 | case amazonaws = "https://checkip.amazonaws.com" 31 | case ipecho = "https://ipecho.net/plain" 32 | } 33 | 34 | public enum IPv6: String, CaseIterable { 35 | case icanhazip = "https://ipv6.icanhazip.com" 36 | case ipv6test = "https://v6.ipv6-test.com/api/myip.php" 37 | case seeip = "https://ip6.seeip.org" 38 | case whatismyipaddress = "https://ipv6bot.whatismyipaddress.com" 39 | case ident = "https://v6.ident.me/" 40 | 41 | case ipify = "https://api6.ipify.org" 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /Sources/SwiftPublicIP.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SwiftPublicIP.swift 3 | // SwiftPublicIP 4 | // 5 | // Created by HackingGate on 2019/05/13. 6 | // Copyright © 2019 SwiftPublicIP. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | /// Get public IP address from specified API. Including icanhazip, ipv6-test... 12 | /// 13 | /// - parameter url: The API URL. Use `PublicIPAPIURLs` class. `IPv4` for IPv4 network only, 14 | /// `IPv6` for IPv6 network only, `Hybrid` for both IPv4 or IPv6 networks. You can use custom API URL but make sure 15 | /// it returns vilidate IP address. 16 | /// - parameter completion: The result. IP address in a String. 17 | /// 18 | public func getPublicIP(url: String, completion: @escaping (String?, Error?) -> Void) { 19 | 20 | guard let url: URL = URL(string: url) else { 21 | fatalError("URL is not validate") 22 | } 23 | 24 | getPublicIPAddress(requestURL: url) { (result, error) in 25 | completion(result, error) 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /SwiftPublicIP-CLI/main.swift: -------------------------------------------------------------------------------- 1 | // 2 | // main.swift 3 | // SwiftPublicIP-CLI 4 | // 5 | // Created by ERU on 2019/05/13. 6 | // Copyright © 2019 SwiftPublicIP. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import SwiftPublicIP 11 | 12 | print("Hello, World!") 13 | 14 | var sema = DispatchSemaphore(value: 0) 15 | SwiftPublicIP.getPublicIP(url: PublicIPAPIURLs.IPv4.icanhazip.rawValue) { string, error in 16 | if let error = error { 17 | print(error.localizedDescription) 18 | } else if let string = string { 19 | print(string) // Your IP address 20 | } 21 | sema.signal() 22 | } 23 | 24 | sema.wait() 25 | -------------------------------------------------------------------------------- /SwiftPublicIP.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = "SwiftPublicIP" 3 | s.version = "0.0.2" 4 | s.summary = "Swift library for checking your public IP address." 5 | s.description = <<-DESC 6 | Swift library for checking your public IP address. 7 | Supports macOS, iOS, tvOS, watchOS and Linux. 8 | DESC 9 | s.homepage = "https://github.com/HackingGate/Swift-Public-IP" 10 | s.license = { :type => "MIT", :file => "LICENSE" } 11 | s.author = { "HackingGate" => "i@hackinggate.com" } 12 | s.social_media_url = "" 13 | s.ios.deployment_target = "8.0" 14 | s.osx.deployment_target = "10.9" 15 | s.watchos.deployment_target = "2.0" 16 | s.tvos.deployment_target = "9.0" 17 | s.source = { :git => "https://github.com/HackingGate/Swift-Public-IP.git", :tag => s.version.to_s } 18 | s.source_files = "Sources/**/*" 19 | s.frameworks = "Foundation" 20 | s.swift_versions = "5.0" 21 | end 22 | -------------------------------------------------------------------------------- /SwiftPublicIP.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 47; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 52D6D9871BEFF229002C0205 /* SwiftPublicIP.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52D6D97C1BEFF229002C0205 /* SwiftPublicIP.framework */; }; 11 | 7601E5CF229035610030CAB5 /* SwiftPublicIP.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52D6DA0F1BF000BD002C0205 /* SwiftPublicIP.framework */; }; 12 | 760928F622899554004CAE43 /* PublicIPAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 760928F522899554004CAE43 /* PublicIPAPI.swift */; }; 13 | 760928F722899554004CAE43 /* PublicIPAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 760928F522899554004CAE43 /* PublicIPAPI.swift */; }; 14 | 760928F822899554004CAE43 /* PublicIPAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 760928F522899554004CAE43 /* PublicIPAPI.swift */; }; 15 | 760928F922899554004CAE43 /* PublicIPAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = 760928F522899554004CAE43 /* PublicIPAPI.swift */; }; 16 | 7609290122899825004CAE43 /* main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7609290022899825004CAE43 /* main.swift */; }; 17 | 763B7F3F228FC6930015E312 /* PublicIPAPIURLs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 763B7F3E228FC6930015E312 /* PublicIPAPIURLs.swift */; }; 18 | 763B7F40228FC6930015E312 /* PublicIPAPIURLs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 763B7F3E228FC6930015E312 /* PublicIPAPIURLs.swift */; }; 19 | 763B7F42228FC6930015E312 /* PublicIPAPIURLs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 763B7F3E228FC6930015E312 /* PublicIPAPIURLs.swift */; }; 20 | 763B7F43228FC6930015E312 /* PublicIPAPIURLs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 763B7F3E228FC6930015E312 /* PublicIPAPIURLs.swift */; }; 21 | 763B7F44228FC9D00015E312 /* PublicIPAPIURLs.swift in Sources */ = {isa = PBXBuildFile; fileRef = 763B7F3E228FC6930015E312 /* PublicIPAPIURLs.swift */; }; 22 | 8933C7851EB5B820000D00A4 /* SwiftPublicIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8933C7841EB5B820000D00A4 /* SwiftPublicIP.swift */; }; 23 | 8933C7861EB5B820000D00A4 /* SwiftPublicIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8933C7841EB5B820000D00A4 /* SwiftPublicIP.swift */; }; 24 | 8933C7871EB5B820000D00A4 /* SwiftPublicIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8933C7841EB5B820000D00A4 /* SwiftPublicIP.swift */; }; 25 | 8933C7881EB5B820000D00A4 /* SwiftPublicIP.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8933C7841EB5B820000D00A4 /* SwiftPublicIP.swift */; }; 26 | 8933C78E1EB5B82C000D00A4 /* SwiftPublicIPTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8933C7891EB5B82A000D00A4 /* SwiftPublicIPTests.swift */; }; 27 | 8933C78F1EB5B82C000D00A4 /* SwiftPublicIPTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8933C7891EB5B82A000D00A4 /* SwiftPublicIPTests.swift */; }; 28 | 8933C7901EB5B82D000D00A4 /* SwiftPublicIPTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8933C7891EB5B82A000D00A4 /* SwiftPublicIPTests.swift */; }; 29 | DD7502881C68FEDE006590AF /* SwiftPublicIP.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52D6DA0F1BF000BD002C0205 /* SwiftPublicIP.framework */; }; 30 | DD7502921C690C7A006590AF /* SwiftPublicIP.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 52D6D9F01BEFFFBE002C0205 /* SwiftPublicIP.framework */; }; 31 | /* End PBXBuildFile section */ 32 | 33 | /* Begin PBXContainerItemProxy section */ 34 | 52D6D9881BEFF229002C0205 /* PBXContainerItemProxy */ = { 35 | isa = PBXContainerItemProxy; 36 | containerPortal = 52D6D9731BEFF229002C0205 /* Project object */; 37 | proxyType = 1; 38 | remoteGlobalIDString = 52D6D97B1BEFF229002C0205; 39 | remoteInfo = SwiftPublicIP; 40 | }; 41 | DD7502801C68FCFC006590AF /* PBXContainerItemProxy */ = { 42 | isa = PBXContainerItemProxy; 43 | containerPortal = 52D6D9731BEFF229002C0205 /* Project object */; 44 | proxyType = 1; 45 | remoteGlobalIDString = 52D6DA0E1BF000BD002C0205; 46 | remoteInfo = "SwiftPublicIP-macOS"; 47 | }; 48 | DD7502931C690C7A006590AF /* PBXContainerItemProxy */ = { 49 | isa = PBXContainerItemProxy; 50 | containerPortal = 52D6D9731BEFF229002C0205 /* Project object */; 51 | proxyType = 1; 52 | remoteGlobalIDString = 52D6D9EF1BEFFFBE002C0205; 53 | remoteInfo = "SwiftPublicIP-tvOS"; 54 | }; 55 | /* End PBXContainerItemProxy section */ 56 | 57 | /* Begin PBXCopyFilesBuildPhase section */ 58 | 760928FC22899824004CAE43 /* CopyFiles */ = { 59 | isa = PBXCopyFilesBuildPhase; 60 | buildActionMask = 2147483647; 61 | dstPath = /usr/share/man/man1/; 62 | dstSubfolderSpec = 0; 63 | files = ( 64 | ); 65 | runOnlyForDeploymentPostprocessing = 1; 66 | }; 67 | /* End PBXCopyFilesBuildPhase section */ 68 | 69 | /* Begin PBXFileReference section */ 70 | 52D6D97C1BEFF229002C0205 /* SwiftPublicIP.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftPublicIP.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 71 | 52D6D9861BEFF229002C0205 /* SwiftPublicIP-iOS Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "SwiftPublicIP-iOS Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 72 | 52D6D9E21BEFFF6E002C0205 /* SwiftPublicIP.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftPublicIP.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 73 | 52D6D9F01BEFFFBE002C0205 /* SwiftPublicIP.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftPublicIP.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 74 | 52D6DA0F1BF000BD002C0205 /* SwiftPublicIP.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwiftPublicIP.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 75 | 760928F522899554004CAE43 /* PublicIPAPI.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PublicIPAPI.swift; sourceTree = ""; }; 76 | 760928FE22899824004CAE43 /* SwiftPublicIP-CLI */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = "SwiftPublicIP-CLI"; sourceTree = BUILT_PRODUCTS_DIR; }; 77 | 7609290022899825004CAE43 /* main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = main.swift; sourceTree = ""; }; 78 | 760929052289B2F4004CAE43 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; 79 | 763B7F3E228FC6930015E312 /* PublicIPAPIURLs.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PublicIPAPIURLs.swift; sourceTree = ""; }; 80 | 8933C7841EB5B820000D00A4 /* SwiftPublicIP.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftPublicIP.swift; sourceTree = ""; }; 81 | 8933C7891EB5B82A000D00A4 /* SwiftPublicIPTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftPublicIPTests.swift; sourceTree = ""; }; 82 | AD2FAA261CD0B6D800659CF4 /* SwiftPublicIP.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = SwiftPublicIP.plist; sourceTree = ""; }; 83 | AD2FAA281CD0B6E100659CF4 /* SwiftPublicIPTests.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = SwiftPublicIPTests.plist; sourceTree = ""; }; 84 | DD75027A1C68FCFC006590AF /* SwiftPublicIP-macOS Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "SwiftPublicIP-macOS Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 85 | DD75028D1C690C7A006590AF /* SwiftPublicIP-tvOS Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "SwiftPublicIP-tvOS Tests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 86 | /* End PBXFileReference section */ 87 | 88 | /* Begin PBXFrameworksBuildPhase section */ 89 | 52D6D9781BEFF229002C0205 /* Frameworks */ = { 90 | isa = PBXFrameworksBuildPhase; 91 | buildActionMask = 2147483647; 92 | files = ( 93 | ); 94 | runOnlyForDeploymentPostprocessing = 0; 95 | }; 96 | 52D6D9831BEFF229002C0205 /* Frameworks */ = { 97 | isa = PBXFrameworksBuildPhase; 98 | buildActionMask = 2147483647; 99 | files = ( 100 | 52D6D9871BEFF229002C0205 /* SwiftPublicIP.framework in Frameworks */, 101 | ); 102 | runOnlyForDeploymentPostprocessing = 0; 103 | }; 104 | 52D6D9DE1BEFFF6E002C0205 /* Frameworks */ = { 105 | isa = PBXFrameworksBuildPhase; 106 | buildActionMask = 2147483647; 107 | files = ( 108 | ); 109 | runOnlyForDeploymentPostprocessing = 0; 110 | }; 111 | 52D6D9EC1BEFFFBE002C0205 /* Frameworks */ = { 112 | isa = PBXFrameworksBuildPhase; 113 | buildActionMask = 2147483647; 114 | files = ( 115 | ); 116 | runOnlyForDeploymentPostprocessing = 0; 117 | }; 118 | 52D6DA0B1BF000BD002C0205 /* Frameworks */ = { 119 | isa = PBXFrameworksBuildPhase; 120 | buildActionMask = 2147483647; 121 | files = ( 122 | ); 123 | runOnlyForDeploymentPostprocessing = 0; 124 | }; 125 | 760928FB22899824004CAE43 /* Frameworks */ = { 126 | isa = PBXFrameworksBuildPhase; 127 | buildActionMask = 2147483647; 128 | files = ( 129 | 7601E5CF229035610030CAB5 /* SwiftPublicIP.framework in Frameworks */, 130 | ); 131 | runOnlyForDeploymentPostprocessing = 0; 132 | }; 133 | DD7502771C68FCFC006590AF /* Frameworks */ = { 134 | isa = PBXFrameworksBuildPhase; 135 | buildActionMask = 2147483647; 136 | files = ( 137 | DD7502881C68FEDE006590AF /* SwiftPublicIP.framework in Frameworks */, 138 | ); 139 | runOnlyForDeploymentPostprocessing = 0; 140 | }; 141 | DD75028A1C690C7A006590AF /* Frameworks */ = { 142 | isa = PBXFrameworksBuildPhase; 143 | buildActionMask = 2147483647; 144 | files = ( 145 | DD7502921C690C7A006590AF /* SwiftPublicIP.framework in Frameworks */, 146 | ); 147 | runOnlyForDeploymentPostprocessing = 0; 148 | }; 149 | /* End PBXFrameworksBuildPhase section */ 150 | 151 | /* Begin PBXGroup section */ 152 | 52D6D9721BEFF229002C0205 = { 153 | isa = PBXGroup; 154 | children = ( 155 | 760929052289B2F4004CAE43 /* README.md */, 156 | 8933C7811EB5B7E0000D00A4 /* Sources */, 157 | 8933C7831EB5B7EB000D00A4 /* Tests */, 158 | 52D6D99C1BEFF38C002C0205 /* Configs */, 159 | 760928FF22899825004CAE43 /* SwiftPublicIP-CLI */, 160 | 52D6D97D1BEFF229002C0205 /* Products */, 161 | 760334EC229034E10002465D /* Frameworks */, 162 | ); 163 | sourceTree = ""; 164 | }; 165 | 52D6D97D1BEFF229002C0205 /* Products */ = { 166 | isa = PBXGroup; 167 | children = ( 168 | 52D6D97C1BEFF229002C0205 /* SwiftPublicIP.framework */, 169 | 52D6D9861BEFF229002C0205 /* SwiftPublicIP-iOS Tests.xctest */, 170 | 52D6D9E21BEFFF6E002C0205 /* SwiftPublicIP.framework */, 171 | 52D6D9F01BEFFFBE002C0205 /* SwiftPublicIP.framework */, 172 | 52D6DA0F1BF000BD002C0205 /* SwiftPublicIP.framework */, 173 | DD75027A1C68FCFC006590AF /* SwiftPublicIP-macOS Tests.xctest */, 174 | DD75028D1C690C7A006590AF /* SwiftPublicIP-tvOS Tests.xctest */, 175 | 760928FE22899824004CAE43 /* SwiftPublicIP-CLI */, 176 | ); 177 | name = Products; 178 | sourceTree = ""; 179 | }; 180 | 52D6D99C1BEFF38C002C0205 /* Configs */ = { 181 | isa = PBXGroup; 182 | children = ( 183 | DD7502721C68FC1B006590AF /* Frameworks */, 184 | DD7502731C68FC20006590AF /* Tests */, 185 | ); 186 | path = Configs; 187 | sourceTree = ""; 188 | }; 189 | 760334EC229034E10002465D /* Frameworks */ = { 190 | isa = PBXGroup; 191 | children = ( 192 | ); 193 | name = Frameworks; 194 | sourceTree = ""; 195 | }; 196 | 760928FF22899825004CAE43 /* SwiftPublicIP-CLI */ = { 197 | isa = PBXGroup; 198 | children = ( 199 | 7609290022899825004CAE43 /* main.swift */, 200 | ); 201 | path = "SwiftPublicIP-CLI"; 202 | sourceTree = ""; 203 | }; 204 | 8933C7811EB5B7E0000D00A4 /* Sources */ = { 205 | isa = PBXGroup; 206 | children = ( 207 | 8933C7841EB5B820000D00A4 /* SwiftPublicIP.swift */, 208 | 760928F522899554004CAE43 /* PublicIPAPI.swift */, 209 | 763B7F3E228FC6930015E312 /* PublicIPAPIURLs.swift */, 210 | ); 211 | path = Sources; 212 | sourceTree = ""; 213 | }; 214 | 8933C7831EB5B7EB000D00A4 /* Tests */ = { 215 | isa = PBXGroup; 216 | children = ( 217 | 8933C7891EB5B82A000D00A4 /* SwiftPublicIPTests.swift */, 218 | ); 219 | name = Tests; 220 | path = Tests/SwiftPublicIPTests; 221 | sourceTree = ""; 222 | }; 223 | DD7502721C68FC1B006590AF /* Frameworks */ = { 224 | isa = PBXGroup; 225 | children = ( 226 | AD2FAA261CD0B6D800659CF4 /* SwiftPublicIP.plist */, 227 | ); 228 | name = Frameworks; 229 | sourceTree = ""; 230 | }; 231 | DD7502731C68FC20006590AF /* Tests */ = { 232 | isa = PBXGroup; 233 | children = ( 234 | AD2FAA281CD0B6E100659CF4 /* SwiftPublicIPTests.plist */, 235 | ); 236 | name = Tests; 237 | sourceTree = ""; 238 | }; 239 | /* End PBXGroup section */ 240 | 241 | /* Begin PBXHeadersBuildPhase section */ 242 | 52D6D9791BEFF229002C0205 /* Headers */ = { 243 | isa = PBXHeadersBuildPhase; 244 | buildActionMask = 2147483647; 245 | files = ( 246 | ); 247 | runOnlyForDeploymentPostprocessing = 0; 248 | }; 249 | 52D6D9DF1BEFFF6E002C0205 /* Headers */ = { 250 | isa = PBXHeadersBuildPhase; 251 | buildActionMask = 2147483647; 252 | files = ( 253 | ); 254 | runOnlyForDeploymentPostprocessing = 0; 255 | }; 256 | 52D6D9ED1BEFFFBE002C0205 /* Headers */ = { 257 | isa = PBXHeadersBuildPhase; 258 | buildActionMask = 2147483647; 259 | files = ( 260 | ); 261 | runOnlyForDeploymentPostprocessing = 0; 262 | }; 263 | 52D6DA0C1BF000BD002C0205 /* Headers */ = { 264 | isa = PBXHeadersBuildPhase; 265 | buildActionMask = 2147483647; 266 | files = ( 267 | ); 268 | runOnlyForDeploymentPostprocessing = 0; 269 | }; 270 | /* End PBXHeadersBuildPhase section */ 271 | 272 | /* Begin PBXNativeTarget section */ 273 | 52D6D97B1BEFF229002C0205 /* SwiftPublicIP-iOS */ = { 274 | isa = PBXNativeTarget; 275 | buildConfigurationList = 52D6D9901BEFF229002C0205 /* Build configuration list for PBXNativeTarget "SwiftPublicIP-iOS" */; 276 | buildPhases = ( 277 | 52D6D9771BEFF229002C0205 /* Sources */, 278 | 52D6D9781BEFF229002C0205 /* Frameworks */, 279 | 52D6D9791BEFF229002C0205 /* Headers */, 280 | 52D6D97A1BEFF229002C0205 /* Resources */, 281 | ); 282 | buildRules = ( 283 | ); 284 | dependencies = ( 285 | ); 286 | name = "SwiftPublicIP-iOS"; 287 | productName = SwiftPublicIP; 288 | productReference = 52D6D97C1BEFF229002C0205 /* SwiftPublicIP.framework */; 289 | productType = "com.apple.product-type.framework"; 290 | }; 291 | 52D6D9851BEFF229002C0205 /* SwiftPublicIP-iOS Tests */ = { 292 | isa = PBXNativeTarget; 293 | buildConfigurationList = 52D6D9931BEFF229002C0205 /* Build configuration list for PBXNativeTarget "SwiftPublicIP-iOS Tests" */; 294 | buildPhases = ( 295 | 52D6D9821BEFF229002C0205 /* Sources */, 296 | 52D6D9831BEFF229002C0205 /* Frameworks */, 297 | 52D6D9841BEFF229002C0205 /* Resources */, 298 | ); 299 | buildRules = ( 300 | ); 301 | dependencies = ( 302 | 52D6D9891BEFF229002C0205 /* PBXTargetDependency */, 303 | ); 304 | name = "SwiftPublicIP-iOS Tests"; 305 | productName = SwiftPublicIPTests; 306 | productReference = 52D6D9861BEFF229002C0205 /* SwiftPublicIP-iOS Tests.xctest */; 307 | productType = "com.apple.product-type.bundle.unit-test"; 308 | }; 309 | 52D6D9E11BEFFF6E002C0205 /* SwiftPublicIP-watchOS */ = { 310 | isa = PBXNativeTarget; 311 | buildConfigurationList = 52D6D9E71BEFFF6E002C0205 /* Build configuration list for PBXNativeTarget "SwiftPublicIP-watchOS" */; 312 | buildPhases = ( 313 | 52D6D9DD1BEFFF6E002C0205 /* Sources */, 314 | 52D6D9DE1BEFFF6E002C0205 /* Frameworks */, 315 | 52D6D9DF1BEFFF6E002C0205 /* Headers */, 316 | 52D6D9E01BEFFF6E002C0205 /* Resources */, 317 | ); 318 | buildRules = ( 319 | ); 320 | dependencies = ( 321 | ); 322 | name = "SwiftPublicIP-watchOS"; 323 | productName = "SwiftPublicIP-watchOS"; 324 | productReference = 52D6D9E21BEFFF6E002C0205 /* SwiftPublicIP.framework */; 325 | productType = "com.apple.product-type.framework"; 326 | }; 327 | 52D6D9EF1BEFFFBE002C0205 /* SwiftPublicIP-tvOS */ = { 328 | isa = PBXNativeTarget; 329 | buildConfigurationList = 52D6DA011BEFFFBE002C0205 /* Build configuration list for PBXNativeTarget "SwiftPublicIP-tvOS" */; 330 | buildPhases = ( 331 | 52D6D9EB1BEFFFBE002C0205 /* Sources */, 332 | 52D6D9EC1BEFFFBE002C0205 /* Frameworks */, 333 | 52D6D9ED1BEFFFBE002C0205 /* Headers */, 334 | 52D6D9EE1BEFFFBE002C0205 /* Resources */, 335 | ); 336 | buildRules = ( 337 | ); 338 | dependencies = ( 339 | ); 340 | name = "SwiftPublicIP-tvOS"; 341 | productName = "SwiftPublicIP-tvOS"; 342 | productReference = 52D6D9F01BEFFFBE002C0205 /* SwiftPublicIP.framework */; 343 | productType = "com.apple.product-type.framework"; 344 | }; 345 | 52D6DA0E1BF000BD002C0205 /* SwiftPublicIP-macOS */ = { 346 | isa = PBXNativeTarget; 347 | buildConfigurationList = 52D6DA201BF000BD002C0205 /* Build configuration list for PBXNativeTarget "SwiftPublicIP-macOS" */; 348 | buildPhases = ( 349 | 52D6DA0A1BF000BD002C0205 /* Sources */, 350 | 52D6DA0B1BF000BD002C0205 /* Frameworks */, 351 | 52D6DA0C1BF000BD002C0205 /* Headers */, 352 | 52D6DA0D1BF000BD002C0205 /* Resources */, 353 | ); 354 | buildRules = ( 355 | ); 356 | dependencies = ( 357 | ); 358 | name = "SwiftPublicIP-macOS"; 359 | productName = "SwiftPublicIP-macOS"; 360 | productReference = 52D6DA0F1BF000BD002C0205 /* SwiftPublicIP.framework */; 361 | productType = "com.apple.product-type.framework"; 362 | }; 363 | 760928FD22899824004CAE43 /* SwiftPublicIP-CLI */ = { 364 | isa = PBXNativeTarget; 365 | buildConfigurationList = 7609290222899825004CAE43 /* Build configuration list for PBXNativeTarget "SwiftPublicIP-CLI" */; 366 | buildPhases = ( 367 | 760928FA22899824004CAE43 /* Sources */, 368 | 760928FB22899824004CAE43 /* Frameworks */, 369 | 760928FC22899824004CAE43 /* CopyFiles */, 370 | ); 371 | buildRules = ( 372 | ); 373 | dependencies = ( 374 | ); 375 | name = "SwiftPublicIP-CLI"; 376 | productName = "SwiftPublicIP-CLI"; 377 | productReference = 760928FE22899824004CAE43 /* SwiftPublicIP-CLI */; 378 | productType = "com.apple.product-type.tool"; 379 | }; 380 | DD7502791C68FCFC006590AF /* SwiftPublicIP-macOS Tests */ = { 381 | isa = PBXNativeTarget; 382 | buildConfigurationList = DD7502821C68FCFC006590AF /* Build configuration list for PBXNativeTarget "SwiftPublicIP-macOS Tests" */; 383 | buildPhases = ( 384 | DD7502761C68FCFC006590AF /* Sources */, 385 | DD7502771C68FCFC006590AF /* Frameworks */, 386 | DD7502781C68FCFC006590AF /* Resources */, 387 | ); 388 | buildRules = ( 389 | ); 390 | dependencies = ( 391 | DD7502811C68FCFC006590AF /* PBXTargetDependency */, 392 | ); 393 | name = "SwiftPublicIP-macOS Tests"; 394 | productName = "SwiftPublicIP-OS Tests"; 395 | productReference = DD75027A1C68FCFC006590AF /* SwiftPublicIP-macOS Tests.xctest */; 396 | productType = "com.apple.product-type.bundle.unit-test"; 397 | }; 398 | DD75028C1C690C7A006590AF /* SwiftPublicIP-tvOS Tests */ = { 399 | isa = PBXNativeTarget; 400 | buildConfigurationList = DD7502951C690C7A006590AF /* Build configuration list for PBXNativeTarget "SwiftPublicIP-tvOS Tests" */; 401 | buildPhases = ( 402 | DD7502891C690C7A006590AF /* Sources */, 403 | DD75028A1C690C7A006590AF /* Frameworks */, 404 | DD75028B1C690C7A006590AF /* Resources */, 405 | ); 406 | buildRules = ( 407 | ); 408 | dependencies = ( 409 | DD7502941C690C7A006590AF /* PBXTargetDependency */, 410 | ); 411 | name = "SwiftPublicIP-tvOS Tests"; 412 | productName = "SwiftPublicIP-tvOS Tests"; 413 | productReference = DD75028D1C690C7A006590AF /* SwiftPublicIP-tvOS Tests.xctest */; 414 | productType = "com.apple.product-type.bundle.unit-test"; 415 | }; 416 | /* End PBXNativeTarget section */ 417 | 418 | /* Begin PBXProject section */ 419 | 52D6D9731BEFF229002C0205 /* Project object */ = { 420 | isa = PBXProject; 421 | attributes = { 422 | LastSwiftUpdateCheck = 1020; 423 | LastUpgradeCheck = 1020; 424 | ORGANIZATIONNAME = SwiftPublicIP; 425 | TargetAttributes = { 426 | 52D6D97B1BEFF229002C0205 = { 427 | CreatedOnToolsVersion = 7.1; 428 | LastSwiftMigration = 1020; 429 | }; 430 | 52D6D9851BEFF229002C0205 = { 431 | CreatedOnToolsVersion = 7.1; 432 | LastSwiftMigration = 1020; 433 | }; 434 | 52D6D9E11BEFFF6E002C0205 = { 435 | CreatedOnToolsVersion = 7.1; 436 | LastSwiftMigration = 1020; 437 | }; 438 | 52D6D9EF1BEFFFBE002C0205 = { 439 | CreatedOnToolsVersion = 7.1; 440 | LastSwiftMigration = 1020; 441 | }; 442 | 52D6DA0E1BF000BD002C0205 = { 443 | CreatedOnToolsVersion = 7.1; 444 | LastSwiftMigration = 1020; 445 | }; 446 | 760928FD22899824004CAE43 = { 447 | CreatedOnToolsVersion = 10.2.1; 448 | ProvisioningStyle = Automatic; 449 | }; 450 | DD7502791C68FCFC006590AF = { 451 | CreatedOnToolsVersion = 7.2.1; 452 | LastSwiftMigration = 1020; 453 | }; 454 | DD75028C1C690C7A006590AF = { 455 | CreatedOnToolsVersion = 7.2.1; 456 | LastSwiftMigration = 1020; 457 | }; 458 | }; 459 | }; 460 | buildConfigurationList = 52D6D9761BEFF229002C0205 /* Build configuration list for PBXProject "SwiftPublicIP" */; 461 | compatibilityVersion = "Xcode 6.3"; 462 | developmentRegion = en; 463 | hasScannedForEncodings = 0; 464 | knownRegions = ( 465 | en, 466 | Base, 467 | ); 468 | mainGroup = 52D6D9721BEFF229002C0205; 469 | productRefGroup = 52D6D97D1BEFF229002C0205 /* Products */; 470 | projectDirPath = ""; 471 | projectRoot = ""; 472 | targets = ( 473 | 52D6D97B1BEFF229002C0205 /* SwiftPublicIP-iOS */, 474 | 52D6DA0E1BF000BD002C0205 /* SwiftPublicIP-macOS */, 475 | 52D6D9E11BEFFF6E002C0205 /* SwiftPublicIP-watchOS */, 476 | 52D6D9EF1BEFFFBE002C0205 /* SwiftPublicIP-tvOS */, 477 | 52D6D9851BEFF229002C0205 /* SwiftPublicIP-iOS Tests */, 478 | DD7502791C68FCFC006590AF /* SwiftPublicIP-macOS Tests */, 479 | DD75028C1C690C7A006590AF /* SwiftPublicIP-tvOS Tests */, 480 | 760928FD22899824004CAE43 /* SwiftPublicIP-CLI */, 481 | ); 482 | }; 483 | /* End PBXProject section */ 484 | 485 | /* Begin PBXResourcesBuildPhase section */ 486 | 52D6D97A1BEFF229002C0205 /* Resources */ = { 487 | isa = PBXResourcesBuildPhase; 488 | buildActionMask = 2147483647; 489 | files = ( 490 | ); 491 | runOnlyForDeploymentPostprocessing = 0; 492 | }; 493 | 52D6D9841BEFF229002C0205 /* Resources */ = { 494 | isa = PBXResourcesBuildPhase; 495 | buildActionMask = 2147483647; 496 | files = ( 497 | ); 498 | runOnlyForDeploymentPostprocessing = 0; 499 | }; 500 | 52D6D9E01BEFFF6E002C0205 /* Resources */ = { 501 | isa = PBXResourcesBuildPhase; 502 | buildActionMask = 2147483647; 503 | files = ( 504 | ); 505 | runOnlyForDeploymentPostprocessing = 0; 506 | }; 507 | 52D6D9EE1BEFFFBE002C0205 /* Resources */ = { 508 | isa = PBXResourcesBuildPhase; 509 | buildActionMask = 2147483647; 510 | files = ( 511 | ); 512 | runOnlyForDeploymentPostprocessing = 0; 513 | }; 514 | 52D6DA0D1BF000BD002C0205 /* Resources */ = { 515 | isa = PBXResourcesBuildPhase; 516 | buildActionMask = 2147483647; 517 | files = ( 518 | ); 519 | runOnlyForDeploymentPostprocessing = 0; 520 | }; 521 | DD7502781C68FCFC006590AF /* Resources */ = { 522 | isa = PBXResourcesBuildPhase; 523 | buildActionMask = 2147483647; 524 | files = ( 525 | ); 526 | runOnlyForDeploymentPostprocessing = 0; 527 | }; 528 | DD75028B1C690C7A006590AF /* Resources */ = { 529 | isa = PBXResourcesBuildPhase; 530 | buildActionMask = 2147483647; 531 | files = ( 532 | ); 533 | runOnlyForDeploymentPostprocessing = 0; 534 | }; 535 | /* End PBXResourcesBuildPhase section */ 536 | 537 | /* Begin PBXSourcesBuildPhase section */ 538 | 52D6D9771BEFF229002C0205 /* Sources */ = { 539 | isa = PBXSourcesBuildPhase; 540 | buildActionMask = 2147483647; 541 | files = ( 542 | 760928F622899554004CAE43 /* PublicIPAPI.swift in Sources */, 543 | 763B7F3F228FC6930015E312 /* PublicIPAPIURLs.swift in Sources */, 544 | 8933C7851EB5B820000D00A4 /* SwiftPublicIP.swift in Sources */, 545 | ); 546 | runOnlyForDeploymentPostprocessing = 0; 547 | }; 548 | 52D6D9821BEFF229002C0205 /* Sources */ = { 549 | isa = PBXSourcesBuildPhase; 550 | buildActionMask = 2147483647; 551 | files = ( 552 | 8933C7901EB5B82D000D00A4 /* SwiftPublicIPTests.swift in Sources */, 553 | ); 554 | runOnlyForDeploymentPostprocessing = 0; 555 | }; 556 | 52D6D9DD1BEFFF6E002C0205 /* Sources */ = { 557 | isa = PBXSourcesBuildPhase; 558 | buildActionMask = 2147483647; 559 | files = ( 560 | 760928F822899554004CAE43 /* PublicIPAPI.swift in Sources */, 561 | 763B7F44228FC9D00015E312 /* PublicIPAPIURLs.swift in Sources */, 562 | 8933C7871EB5B820000D00A4 /* SwiftPublicIP.swift in Sources */, 563 | ); 564 | runOnlyForDeploymentPostprocessing = 0; 565 | }; 566 | 52D6D9EB1BEFFFBE002C0205 /* Sources */ = { 567 | isa = PBXSourcesBuildPhase; 568 | buildActionMask = 2147483647; 569 | files = ( 570 | 760928F922899554004CAE43 /* PublicIPAPI.swift in Sources */, 571 | 763B7F42228FC6930015E312 /* PublicIPAPIURLs.swift in Sources */, 572 | 8933C7881EB5B820000D00A4 /* SwiftPublicIP.swift in Sources */, 573 | ); 574 | runOnlyForDeploymentPostprocessing = 0; 575 | }; 576 | 52D6DA0A1BF000BD002C0205 /* Sources */ = { 577 | isa = PBXSourcesBuildPhase; 578 | buildActionMask = 2147483647; 579 | files = ( 580 | 760928F722899554004CAE43 /* PublicIPAPI.swift in Sources */, 581 | 763B7F40228FC6930015E312 /* PublicIPAPIURLs.swift in Sources */, 582 | 8933C7861EB5B820000D00A4 /* SwiftPublicIP.swift in Sources */, 583 | ); 584 | runOnlyForDeploymentPostprocessing = 0; 585 | }; 586 | 760928FA22899824004CAE43 /* Sources */ = { 587 | isa = PBXSourcesBuildPhase; 588 | buildActionMask = 2147483647; 589 | files = ( 590 | 763B7F43228FC6930015E312 /* PublicIPAPIURLs.swift in Sources */, 591 | 7609290122899825004CAE43 /* main.swift in Sources */, 592 | ); 593 | runOnlyForDeploymentPostprocessing = 0; 594 | }; 595 | DD7502761C68FCFC006590AF /* Sources */ = { 596 | isa = PBXSourcesBuildPhase; 597 | buildActionMask = 2147483647; 598 | files = ( 599 | 8933C78F1EB5B82C000D00A4 /* SwiftPublicIPTests.swift in Sources */, 600 | ); 601 | runOnlyForDeploymentPostprocessing = 0; 602 | }; 603 | DD7502891C690C7A006590AF /* Sources */ = { 604 | isa = PBXSourcesBuildPhase; 605 | buildActionMask = 2147483647; 606 | files = ( 607 | 8933C78E1EB5B82C000D00A4 /* SwiftPublicIPTests.swift in Sources */, 608 | ); 609 | runOnlyForDeploymentPostprocessing = 0; 610 | }; 611 | /* End PBXSourcesBuildPhase section */ 612 | 613 | /* Begin PBXTargetDependency section */ 614 | 52D6D9891BEFF229002C0205 /* PBXTargetDependency */ = { 615 | isa = PBXTargetDependency; 616 | target = 52D6D97B1BEFF229002C0205 /* SwiftPublicIP-iOS */; 617 | targetProxy = 52D6D9881BEFF229002C0205 /* PBXContainerItemProxy */; 618 | }; 619 | DD7502811C68FCFC006590AF /* PBXTargetDependency */ = { 620 | isa = PBXTargetDependency; 621 | target = 52D6DA0E1BF000BD002C0205 /* SwiftPublicIP-macOS */; 622 | targetProxy = DD7502801C68FCFC006590AF /* PBXContainerItemProxy */; 623 | }; 624 | DD7502941C690C7A006590AF /* PBXTargetDependency */ = { 625 | isa = PBXTargetDependency; 626 | target = 52D6D9EF1BEFFFBE002C0205 /* SwiftPublicIP-tvOS */; 627 | targetProxy = DD7502931C690C7A006590AF /* PBXContainerItemProxy */; 628 | }; 629 | /* End PBXTargetDependency section */ 630 | 631 | /* Begin XCBuildConfiguration section */ 632 | 52D6D98E1BEFF229002C0205 /* Debug */ = { 633 | isa = XCBuildConfiguration; 634 | buildSettings = { 635 | ALWAYS_SEARCH_USER_PATHS = NO; 636 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 637 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 638 | CLANG_CXX_LIBRARY = "libc++"; 639 | CLANG_ENABLE_MODULES = YES; 640 | CLANG_ENABLE_OBJC_ARC = YES; 641 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 642 | CLANG_WARN_BOOL_CONVERSION = YES; 643 | CLANG_WARN_COMMA = YES; 644 | CLANG_WARN_CONSTANT_CONVERSION = YES; 645 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 646 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 647 | CLANG_WARN_EMPTY_BODY = YES; 648 | CLANG_WARN_ENUM_CONVERSION = YES; 649 | CLANG_WARN_INFINITE_RECURSION = YES; 650 | CLANG_WARN_INT_CONVERSION = YES; 651 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 652 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 653 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 654 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 655 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 656 | CLANG_WARN_STRICT_PROTOTYPES = YES; 657 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 658 | CLANG_WARN_UNREACHABLE_CODE = YES; 659 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 660 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 661 | COPY_PHASE_STRIP = NO; 662 | CURRENT_PROJECT_VERSION = 1; 663 | DEBUG_INFORMATION_FORMAT = dwarf; 664 | ENABLE_STRICT_OBJC_MSGSEND = YES; 665 | ENABLE_TESTABILITY = YES; 666 | GCC_C_LANGUAGE_STANDARD = gnu99; 667 | GCC_DYNAMIC_NO_PIC = NO; 668 | GCC_NO_COMMON_BLOCKS = YES; 669 | GCC_OPTIMIZATION_LEVEL = 0; 670 | GCC_PREPROCESSOR_DEFINITIONS = ( 671 | "DEBUG=1", 672 | "$(inherited)", 673 | ); 674 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 675 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 676 | GCC_WARN_UNDECLARED_SELECTOR = YES; 677 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 678 | GCC_WARN_UNUSED_FUNCTION = YES; 679 | GCC_WARN_UNUSED_VARIABLE = YES; 680 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 681 | MTL_ENABLE_DEBUG_INFO = YES; 682 | ONLY_ACTIVE_ARCH = YES; 683 | SDKROOT = iphoneos; 684 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 685 | SWIFT_VERSION = 5.0; 686 | TARGETED_DEVICE_FAMILY = "1,2"; 687 | VERSIONING_SYSTEM = "apple-generic"; 688 | VERSION_INFO_PREFIX = ""; 689 | }; 690 | name = Debug; 691 | }; 692 | 52D6D98F1BEFF229002C0205 /* Release */ = { 693 | isa = XCBuildConfiguration; 694 | buildSettings = { 695 | ALWAYS_SEARCH_USER_PATHS = NO; 696 | CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; 697 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 698 | CLANG_CXX_LIBRARY = "libc++"; 699 | CLANG_ENABLE_MODULES = YES; 700 | CLANG_ENABLE_OBJC_ARC = YES; 701 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 702 | CLANG_WARN_BOOL_CONVERSION = YES; 703 | CLANG_WARN_COMMA = YES; 704 | CLANG_WARN_CONSTANT_CONVERSION = YES; 705 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 706 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 707 | CLANG_WARN_EMPTY_BODY = YES; 708 | CLANG_WARN_ENUM_CONVERSION = YES; 709 | CLANG_WARN_INFINITE_RECURSION = YES; 710 | CLANG_WARN_INT_CONVERSION = YES; 711 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 712 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 713 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 714 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 715 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 716 | CLANG_WARN_STRICT_PROTOTYPES = YES; 717 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 718 | CLANG_WARN_UNREACHABLE_CODE = YES; 719 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 720 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 721 | COPY_PHASE_STRIP = NO; 722 | CURRENT_PROJECT_VERSION = 1; 723 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 724 | ENABLE_NS_ASSERTIONS = NO; 725 | ENABLE_STRICT_OBJC_MSGSEND = YES; 726 | GCC_C_LANGUAGE_STANDARD = gnu99; 727 | GCC_NO_COMMON_BLOCKS = YES; 728 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 729 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 730 | GCC_WARN_UNDECLARED_SELECTOR = YES; 731 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 732 | GCC_WARN_UNUSED_FUNCTION = YES; 733 | GCC_WARN_UNUSED_VARIABLE = YES; 734 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 735 | MTL_ENABLE_DEBUG_INFO = NO; 736 | SDKROOT = iphoneos; 737 | SWIFT_VERSION = 5.0; 738 | TARGETED_DEVICE_FAMILY = "1,2"; 739 | VALIDATE_PRODUCT = YES; 740 | VERSIONING_SYSTEM = "apple-generic"; 741 | VERSION_INFO_PREFIX = ""; 742 | }; 743 | name = Release; 744 | }; 745 | 52D6D9911BEFF229002C0205 /* Debug */ = { 746 | isa = XCBuildConfiguration; 747 | buildSettings = { 748 | APPLICATION_EXTENSION_API_ONLY = YES; 749 | CLANG_ENABLE_MODULES = YES; 750 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 751 | DEFINES_MODULE = YES; 752 | DYLIB_COMPATIBILITY_VERSION = 1; 753 | DYLIB_CURRENT_VERSION = 1; 754 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 755 | INFOPLIST_FILE = Configs/SwiftPublicIP.plist; 756 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 757 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 758 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 759 | ONLY_ACTIVE_ARCH = NO; 760 | PRODUCT_BUNDLE_IDENTIFIER = "com.SwiftPublicIP.SwiftPublicIP-iOS"; 761 | PRODUCT_NAME = SwiftPublicIP; 762 | SKIP_INSTALL = YES; 763 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 764 | SWIFT_VERSION = 5.0; 765 | }; 766 | name = Debug; 767 | }; 768 | 52D6D9921BEFF229002C0205 /* Release */ = { 769 | isa = XCBuildConfiguration; 770 | buildSettings = { 771 | APPLICATION_EXTENSION_API_ONLY = YES; 772 | CLANG_ENABLE_MODULES = YES; 773 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 774 | DEFINES_MODULE = YES; 775 | DYLIB_COMPATIBILITY_VERSION = 1; 776 | DYLIB_CURRENT_VERSION = 1; 777 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 778 | INFOPLIST_FILE = Configs/SwiftPublicIP.plist; 779 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 780 | IPHONEOS_DEPLOYMENT_TARGET = 8.0; 781 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 782 | PRODUCT_BUNDLE_IDENTIFIER = "com.SwiftPublicIP.SwiftPublicIP-iOS"; 783 | PRODUCT_NAME = SwiftPublicIP; 784 | SKIP_INSTALL = YES; 785 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 786 | SWIFT_VERSION = 5.0; 787 | }; 788 | name = Release; 789 | }; 790 | 52D6D9941BEFF229002C0205 /* Debug */ = { 791 | isa = XCBuildConfiguration; 792 | buildSettings = { 793 | CLANG_ENABLE_MODULES = YES; 794 | INFOPLIST_FILE = Configs/SwiftPublicIPTests.plist; 795 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 796 | PRODUCT_BUNDLE_IDENTIFIER = "com.SwiftPublicIP.SwiftPublicIP-iOS-Tests"; 797 | PRODUCT_NAME = "$(TARGET_NAME)"; 798 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 799 | SWIFT_VERSION = 5.0; 800 | }; 801 | name = Debug; 802 | }; 803 | 52D6D9951BEFF229002C0205 /* Release */ = { 804 | isa = XCBuildConfiguration; 805 | buildSettings = { 806 | CLANG_ENABLE_MODULES = YES; 807 | INFOPLIST_FILE = Configs/SwiftPublicIPTests.plist; 808 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 809 | PRODUCT_BUNDLE_IDENTIFIER = "com.SwiftPublicIP.SwiftPublicIP-iOS-Tests"; 810 | PRODUCT_NAME = "$(TARGET_NAME)"; 811 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 812 | SWIFT_VERSION = 5.0; 813 | }; 814 | name = Release; 815 | }; 816 | 52D6D9E81BEFFF6E002C0205 /* Debug */ = { 817 | isa = XCBuildConfiguration; 818 | buildSettings = { 819 | APPLICATION_EXTENSION_API_ONLY = YES; 820 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 821 | DEFINES_MODULE = YES; 822 | DYLIB_COMPATIBILITY_VERSION = 1; 823 | DYLIB_CURRENT_VERSION = 1; 824 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 825 | INFOPLIST_FILE = Configs/SwiftPublicIP.plist; 826 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 827 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 828 | PRODUCT_BUNDLE_IDENTIFIER = "com.SwiftPublicIP.SwiftPublicIP-watchOS"; 829 | PRODUCT_NAME = SwiftPublicIP; 830 | SDKROOT = watchos; 831 | SKIP_INSTALL = YES; 832 | SWIFT_VERSION = 5.0; 833 | TARGETED_DEVICE_FAMILY = 4; 834 | WATCHOS_DEPLOYMENT_TARGET = 2.0; 835 | }; 836 | name = Debug; 837 | }; 838 | 52D6D9E91BEFFF6E002C0205 /* Release */ = { 839 | isa = XCBuildConfiguration; 840 | buildSettings = { 841 | APPLICATION_EXTENSION_API_ONLY = YES; 842 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 843 | DEFINES_MODULE = YES; 844 | DYLIB_COMPATIBILITY_VERSION = 1; 845 | DYLIB_CURRENT_VERSION = 1; 846 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 847 | INFOPLIST_FILE = Configs/SwiftPublicIP.plist; 848 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 849 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 850 | PRODUCT_BUNDLE_IDENTIFIER = "com.SwiftPublicIP.SwiftPublicIP-watchOS"; 851 | PRODUCT_NAME = SwiftPublicIP; 852 | SDKROOT = watchos; 853 | SKIP_INSTALL = YES; 854 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 855 | SWIFT_VERSION = 5.0; 856 | TARGETED_DEVICE_FAMILY = 4; 857 | WATCHOS_DEPLOYMENT_TARGET = 2.0; 858 | }; 859 | name = Release; 860 | }; 861 | 52D6DA021BEFFFBE002C0205 /* Debug */ = { 862 | isa = XCBuildConfiguration; 863 | buildSettings = { 864 | APPLICATION_EXTENSION_API_ONLY = YES; 865 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 866 | DEFINES_MODULE = YES; 867 | DYLIB_COMPATIBILITY_VERSION = 1; 868 | DYLIB_CURRENT_VERSION = 1; 869 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 870 | INFOPLIST_FILE = Configs/SwiftPublicIP.plist; 871 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 872 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 873 | PRODUCT_BUNDLE_IDENTIFIER = "com.SwiftPublicIP.SwiftPublicIP-tvOS"; 874 | PRODUCT_NAME = SwiftPublicIP; 875 | SDKROOT = appletvos; 876 | SKIP_INSTALL = YES; 877 | SWIFT_VERSION = 5.0; 878 | TARGETED_DEVICE_FAMILY = 3; 879 | TVOS_DEPLOYMENT_TARGET = 9.0; 880 | }; 881 | name = Debug; 882 | }; 883 | 52D6DA031BEFFFBE002C0205 /* Release */ = { 884 | isa = XCBuildConfiguration; 885 | buildSettings = { 886 | APPLICATION_EXTENSION_API_ONLY = YES; 887 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 888 | DEFINES_MODULE = YES; 889 | DYLIB_COMPATIBILITY_VERSION = 1; 890 | DYLIB_CURRENT_VERSION = 1; 891 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 892 | INFOPLIST_FILE = Configs/SwiftPublicIP.plist; 893 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 894 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 895 | PRODUCT_BUNDLE_IDENTIFIER = "com.SwiftPublicIP.SwiftPublicIP-tvOS"; 896 | PRODUCT_NAME = SwiftPublicIP; 897 | SDKROOT = appletvos; 898 | SKIP_INSTALL = YES; 899 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 900 | SWIFT_VERSION = 5.0; 901 | TARGETED_DEVICE_FAMILY = 3; 902 | TVOS_DEPLOYMENT_TARGET = 9.0; 903 | }; 904 | name = Release; 905 | }; 906 | 52D6DA211BF000BD002C0205 /* Debug */ = { 907 | isa = XCBuildConfiguration; 908 | buildSettings = { 909 | APPLICATION_EXTENSION_API_ONLY = YES; 910 | CODE_SIGN_IDENTITY = "-"; 911 | COMBINE_HIDPI_IMAGES = YES; 912 | DEFINES_MODULE = YES; 913 | DYLIB_COMPATIBILITY_VERSION = 1; 914 | DYLIB_CURRENT_VERSION = 1; 915 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 916 | FRAMEWORK_VERSION = A; 917 | INFOPLIST_FILE = Configs/SwiftPublicIP.plist; 918 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 919 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; 920 | MACOSX_DEPLOYMENT_TARGET = 10.10; 921 | PRODUCT_BUNDLE_IDENTIFIER = "com.SwiftPublicIP.SwiftPublicIP-macOS"; 922 | PRODUCT_NAME = SwiftPublicIP; 923 | SDKROOT = macosx; 924 | SKIP_INSTALL = YES; 925 | SWIFT_VERSION = 5.0; 926 | }; 927 | name = Debug; 928 | }; 929 | 52D6DA221BF000BD002C0205 /* Release */ = { 930 | isa = XCBuildConfiguration; 931 | buildSettings = { 932 | APPLICATION_EXTENSION_API_ONLY = YES; 933 | CODE_SIGN_IDENTITY = "-"; 934 | COMBINE_HIDPI_IMAGES = YES; 935 | DEFINES_MODULE = YES; 936 | DYLIB_COMPATIBILITY_VERSION = 1; 937 | DYLIB_CURRENT_VERSION = 1; 938 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 939 | FRAMEWORK_VERSION = A; 940 | INFOPLIST_FILE = Configs/SwiftPublicIP.plist; 941 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 942 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/Frameworks"; 943 | MACOSX_DEPLOYMENT_TARGET = 10.10; 944 | PRODUCT_BUNDLE_IDENTIFIER = "com.SwiftPublicIP.SwiftPublicIP-macOS"; 945 | PRODUCT_NAME = SwiftPublicIP; 946 | SDKROOT = macosx; 947 | SKIP_INSTALL = YES; 948 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 949 | SWIFT_VERSION = 5.0; 950 | }; 951 | name = Release; 952 | }; 953 | 7609290322899825004CAE43 /* Debug */ = { 954 | isa = XCBuildConfiguration; 955 | buildSettings = { 956 | CLANG_ANALYZER_NONNULL = YES; 957 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 958 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 959 | CLANG_ENABLE_OBJC_WEAK = YES; 960 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 961 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 962 | CODE_SIGN_IDENTITY = "-"; 963 | CODE_SIGN_STYLE = Automatic; 964 | GCC_C_LANGUAGE_STANDARD = gnu11; 965 | MACOSX_DEPLOYMENT_TARGET = 10.14; 966 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 967 | MTL_FAST_MATH = YES; 968 | PRODUCT_NAME = "$(TARGET_NAME)"; 969 | SDKROOT = macosx; 970 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 971 | SWIFT_VERSION = 5.0; 972 | }; 973 | name = Debug; 974 | }; 975 | 7609290422899825004CAE43 /* Release */ = { 976 | isa = XCBuildConfiguration; 977 | buildSettings = { 978 | CLANG_ANALYZER_NONNULL = YES; 979 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 980 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 981 | CLANG_ENABLE_OBJC_WEAK = YES; 982 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 983 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 984 | CODE_SIGN_IDENTITY = "-"; 985 | CODE_SIGN_STYLE = Automatic; 986 | GCC_C_LANGUAGE_STANDARD = gnu11; 987 | MACOSX_DEPLOYMENT_TARGET = 10.14; 988 | MTL_FAST_MATH = YES; 989 | PRODUCT_NAME = "$(TARGET_NAME)"; 990 | SDKROOT = macosx; 991 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 992 | SWIFT_VERSION = 5.0; 993 | }; 994 | name = Release; 995 | }; 996 | DD7502831C68FCFC006590AF /* Debug */ = { 997 | isa = XCBuildConfiguration; 998 | buildSettings = { 999 | CODE_SIGN_IDENTITY = "-"; 1000 | COMBINE_HIDPI_IMAGES = YES; 1001 | INFOPLIST_FILE = Configs/SwiftPublicIPTests.plist; 1002 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 1003 | MACOSX_DEPLOYMENT_TARGET = 10.11; 1004 | PRODUCT_BUNDLE_IDENTIFIER = "com.SwiftPublicIP.SwiftPublicIP-macOS-Tests"; 1005 | PRODUCT_NAME = "$(TARGET_NAME)"; 1006 | SDKROOT = macosx; 1007 | SWIFT_VERSION = 5.0; 1008 | }; 1009 | name = Debug; 1010 | }; 1011 | DD7502841C68FCFC006590AF /* Release */ = { 1012 | isa = XCBuildConfiguration; 1013 | buildSettings = { 1014 | CODE_SIGN_IDENTITY = "-"; 1015 | COMBINE_HIDPI_IMAGES = YES; 1016 | INFOPLIST_FILE = Configs/SwiftPublicIPTests.plist; 1017 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; 1018 | MACOSX_DEPLOYMENT_TARGET = 10.11; 1019 | PRODUCT_BUNDLE_IDENTIFIER = "com.SwiftPublicIP.SwiftPublicIP-macOS-Tests"; 1020 | PRODUCT_NAME = "$(TARGET_NAME)"; 1021 | SDKROOT = macosx; 1022 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 1023 | SWIFT_VERSION = 5.0; 1024 | }; 1025 | name = Release; 1026 | }; 1027 | DD7502961C690C7A006590AF /* Debug */ = { 1028 | isa = XCBuildConfiguration; 1029 | buildSettings = { 1030 | INFOPLIST_FILE = Configs/SwiftPublicIPTests.plist; 1031 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 1032 | PRODUCT_BUNDLE_IDENTIFIER = "com.SwiftPublicIP.SwiftPublicIP-tvOS-Tests"; 1033 | PRODUCT_NAME = "$(TARGET_NAME)"; 1034 | SDKROOT = appletvos; 1035 | SWIFT_VERSION = 5.0; 1036 | TVOS_DEPLOYMENT_TARGET = 9.1; 1037 | }; 1038 | name = Debug; 1039 | }; 1040 | DD7502971C690C7A006590AF /* Release */ = { 1041 | isa = XCBuildConfiguration; 1042 | buildSettings = { 1043 | INFOPLIST_FILE = Configs/SwiftPublicIPTests.plist; 1044 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 1045 | PRODUCT_BUNDLE_IDENTIFIER = "com.SwiftPublicIP.SwiftPublicIP-tvOS-Tests"; 1046 | PRODUCT_NAME = "$(TARGET_NAME)"; 1047 | SDKROOT = appletvos; 1048 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 1049 | SWIFT_VERSION = 5.0; 1050 | TVOS_DEPLOYMENT_TARGET = 9.1; 1051 | }; 1052 | name = Release; 1053 | }; 1054 | /* End XCBuildConfiguration section */ 1055 | 1056 | /* Begin XCConfigurationList section */ 1057 | 52D6D9761BEFF229002C0205 /* Build configuration list for PBXProject "SwiftPublicIP" */ = { 1058 | isa = XCConfigurationList; 1059 | buildConfigurations = ( 1060 | 52D6D98E1BEFF229002C0205 /* Debug */, 1061 | 52D6D98F1BEFF229002C0205 /* Release */, 1062 | ); 1063 | defaultConfigurationIsVisible = 0; 1064 | defaultConfigurationName = Release; 1065 | }; 1066 | 52D6D9901BEFF229002C0205 /* Build configuration list for PBXNativeTarget "SwiftPublicIP-iOS" */ = { 1067 | isa = XCConfigurationList; 1068 | buildConfigurations = ( 1069 | 52D6D9911BEFF229002C0205 /* Debug */, 1070 | 52D6D9921BEFF229002C0205 /* Release */, 1071 | ); 1072 | defaultConfigurationIsVisible = 0; 1073 | defaultConfigurationName = Release; 1074 | }; 1075 | 52D6D9931BEFF229002C0205 /* Build configuration list for PBXNativeTarget "SwiftPublicIP-iOS Tests" */ = { 1076 | isa = XCConfigurationList; 1077 | buildConfigurations = ( 1078 | 52D6D9941BEFF229002C0205 /* Debug */, 1079 | 52D6D9951BEFF229002C0205 /* Release */, 1080 | ); 1081 | defaultConfigurationIsVisible = 0; 1082 | defaultConfigurationName = Release; 1083 | }; 1084 | 52D6D9E71BEFFF6E002C0205 /* Build configuration list for PBXNativeTarget "SwiftPublicIP-watchOS" */ = { 1085 | isa = XCConfigurationList; 1086 | buildConfigurations = ( 1087 | 52D6D9E81BEFFF6E002C0205 /* Debug */, 1088 | 52D6D9E91BEFFF6E002C0205 /* Release */, 1089 | ); 1090 | defaultConfigurationIsVisible = 0; 1091 | defaultConfigurationName = Release; 1092 | }; 1093 | 52D6DA011BEFFFBE002C0205 /* Build configuration list for PBXNativeTarget "SwiftPublicIP-tvOS" */ = { 1094 | isa = XCConfigurationList; 1095 | buildConfigurations = ( 1096 | 52D6DA021BEFFFBE002C0205 /* Debug */, 1097 | 52D6DA031BEFFFBE002C0205 /* Release */, 1098 | ); 1099 | defaultConfigurationIsVisible = 0; 1100 | defaultConfigurationName = Release; 1101 | }; 1102 | 52D6DA201BF000BD002C0205 /* Build configuration list for PBXNativeTarget "SwiftPublicIP-macOS" */ = { 1103 | isa = XCConfigurationList; 1104 | buildConfigurations = ( 1105 | 52D6DA211BF000BD002C0205 /* Debug */, 1106 | 52D6DA221BF000BD002C0205 /* Release */, 1107 | ); 1108 | defaultConfigurationIsVisible = 0; 1109 | defaultConfigurationName = Release; 1110 | }; 1111 | 7609290222899825004CAE43 /* Build configuration list for PBXNativeTarget "SwiftPublicIP-CLI" */ = { 1112 | isa = XCConfigurationList; 1113 | buildConfigurations = ( 1114 | 7609290322899825004CAE43 /* Debug */, 1115 | 7609290422899825004CAE43 /* Release */, 1116 | ); 1117 | defaultConfigurationIsVisible = 0; 1118 | defaultConfigurationName = Release; 1119 | }; 1120 | DD7502821C68FCFC006590AF /* Build configuration list for PBXNativeTarget "SwiftPublicIP-macOS Tests" */ = { 1121 | isa = XCConfigurationList; 1122 | buildConfigurations = ( 1123 | DD7502831C68FCFC006590AF /* Debug */, 1124 | DD7502841C68FCFC006590AF /* Release */, 1125 | ); 1126 | defaultConfigurationIsVisible = 0; 1127 | defaultConfigurationName = Release; 1128 | }; 1129 | DD7502951C690C7A006590AF /* Build configuration list for PBXNativeTarget "SwiftPublicIP-tvOS Tests" */ = { 1130 | isa = XCConfigurationList; 1131 | buildConfigurations = ( 1132 | DD7502961C690C7A006590AF /* Debug */, 1133 | DD7502971C690C7A006590AF /* Release */, 1134 | ); 1135 | defaultConfigurationIsVisible = 0; 1136 | defaultConfigurationName = Release; 1137 | }; 1138 | /* End XCConfigurationList section */ 1139 | }; 1140 | rootObject = 52D6D9731BEFF229002C0205 /* Project object */; 1141 | } 1142 | -------------------------------------------------------------------------------- /SwiftPublicIP.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /SwiftPublicIP.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /SwiftPublicIP.xcodeproj/xcshareddata/xcschemes/SwiftPublicIP-iOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 34 | 40 | 41 | 42 | 43 | 44 | 50 | 51 | 52 | 53 | 54 | 55 | 65 | 66 | 72 | 73 | 74 | 75 | 76 | 77 | 83 | 84 | 90 | 91 | 92 | 93 | 95 | 96 | 99 | 100 | 101 | -------------------------------------------------------------------------------- /SwiftPublicIP.xcodeproj/xcshareddata/xcschemes/SwiftPublicIP-macOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 34 | 40 | 41 | 42 | 43 | 44 | 50 | 51 | 52 | 53 | 54 | 55 | 65 | 66 | 72 | 73 | 74 | 75 | 76 | 77 | 83 | 84 | 90 | 91 | 92 | 93 | 95 | 96 | 99 | 100 | 101 | -------------------------------------------------------------------------------- /SwiftPublicIP.xcodeproj/xcshareddata/xcschemes/SwiftPublicIP-tvOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 34 | 40 | 41 | 42 | 43 | 44 | 50 | 51 | 52 | 53 | 54 | 55 | 65 | 66 | 72 | 73 | 74 | 75 | 76 | 77 | 83 | 84 | 90 | 91 | 92 | 93 | 95 | 96 | 99 | 100 | 101 | -------------------------------------------------------------------------------- /SwiftPublicIP.xcodeproj/xcshareddata/xcschemes/SwiftPublicIP-watchOS.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 31 | 32 | 33 | 34 | 35 | 36 | 46 | 47 | 53 | 54 | 55 | 56 | 57 | 58 | 64 | 65 | 71 | 72 | 73 | 74 | 76 | 77 | 80 | 81 | 82 | -------------------------------------------------------------------------------- /Tests/LinuxMain.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | @testable import SwiftPublicIPTests 3 | 4 | XCTMain([ 5 | testCase(SwiftPublicIPTests.allTests) 6 | ]) 7 | -------------------------------------------------------------------------------- /Tests/SwiftPublicIPTests/SwiftPublicIPTests.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SwiftPublicIPTests.swift 3 | // SwiftPublicIP 4 | // 5 | // Created by HackingGate on 2019/05/13. 6 | // Copyright © 2019 SwiftPublicIP. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import XCTest 11 | import SwiftPublicIP 12 | 13 | class SwiftPublicIPTests: XCTestCase { 14 | func testPublicIP(_ url: String, _ exp: XCTestExpectation) { 15 | SwiftPublicIP.getPublicIP(url: url) { (string, error) in 16 | if let error = error { 17 | XCTAssertNil(error, error.localizedDescription) 18 | } else if let string = string { 19 | XCTAssert(string.count > 0) 20 | print(string) 21 | } 22 | exp.fulfill() 23 | } 24 | } 25 | 26 | // MARK: Hybrid 27 | 28 | func test_hybrid_icanhazip() { 29 | let exp = expectation(description: "\(#function)\(#line)") 30 | testPublicIP(PublicIPAPIURLs.Hybrid.icanhazip.rawValue, exp) 31 | waitForExpectations(timeout: 40, handler: nil) 32 | } 33 | 34 | func test_hybrid_ipv6test() { 35 | let exp = expectation(description: "\(#function)\(#line)") 36 | testPublicIP(PublicIPAPIURLs.Hybrid.ipv6test.rawValue, exp) 37 | waitForExpectations(timeout: 40, handler: nil) 38 | } 39 | 40 | func test_hybrid_seeip() { 41 | let exp = expectation(description: "\(#function)\(#line)") 42 | testPublicIP(PublicIPAPIURLs.Hybrid.seeip.rawValue, exp) 43 | waitForExpectations(timeout: 40, handler: nil) 44 | } 45 | 46 | func test_hybrid_whatismyipaddress() { 47 | let exp = expectation(description: "\(#function)\(#line)") 48 | testPublicIP(PublicIPAPIURLs.Hybrid.whatismyipaddress.rawValue, exp) 49 | waitForExpectations(timeout: 40, handler: nil) 50 | } 51 | 52 | func test_hybrid_ident() { 53 | let exp = expectation(description: "\(#function)\(#line)") 54 | testPublicIP(PublicIPAPIURLs.Hybrid.ident.rawValue, exp) 55 | waitForExpectations(timeout: 40, handler: nil) 56 | } 57 | 58 | // MARK: IPv4 59 | 60 | func test_ipv4_icanhazip() { 61 | let exp = expectation(description: "\(#function)\(#line)") 62 | testPublicIP(PublicIPAPIURLs.IPv4.icanhazip.rawValue, exp) 63 | waitForExpectations(timeout: 40, handler: nil) 64 | } 65 | 66 | func test_ipv4_ipv6test() { 67 | let exp = expectation(description: "\(#function)\(#line)") 68 | testPublicIP(PublicIPAPIURLs.IPv4.ipv6test.rawValue, exp) 69 | waitForExpectations(timeout: 40, handler: nil) 70 | } 71 | 72 | func test_ipv4_seeip() { 73 | let exp = expectation(description: "\(#function)\(#line)") 74 | testPublicIP(PublicIPAPIURLs.IPv4.seeip.rawValue, exp) 75 | waitForExpectations(timeout: 40, handler: nil) 76 | } 77 | 78 | func test_ipv4_whatismyipaddress() { 79 | let exp = expectation(description: "\(#function)\(#line)") 80 | testPublicIP(PublicIPAPIURLs.IPv4.whatismyipaddress.rawValue, exp) 81 | waitForExpectations(timeout: 40, handler: nil) 82 | } 83 | 84 | func test_ipv4_ident() { 85 | let exp = expectation(description: "\(#function)\(#line)") 86 | testPublicIP(PublicIPAPIURLs.IPv4.ident.rawValue, exp) 87 | waitForExpectations(timeout: 40, handler: nil) 88 | } 89 | 90 | func test_ipv4_ipify() { 91 | let exp = expectation(description: "\(#function)\(#line)") 92 | testPublicIP(PublicIPAPIURLs.IPv4.ipify.rawValue, exp) 93 | waitForExpectations(timeout: 40, handler: nil) 94 | } 95 | 96 | func test_ipv4_amazonaws() { 97 | let exp = expectation(description: "\(#function)\(#line)") 98 | testPublicIP(PublicIPAPIURLs.IPv4.amazonaws.rawValue, exp) 99 | waitForExpectations(timeout: 40, handler: nil) 100 | } 101 | 102 | func test_ipv4_ipecho() { 103 | let exp = expectation(description: "\(#function)\(#line)") 104 | testPublicIP(PublicIPAPIURLs.IPv4.ipecho.rawValue, exp) 105 | waitForExpectations(timeout: 40, handler: nil) 106 | } 107 | 108 | // MARK: IPv6 109 | 110 | func test_ipv6_icanhazip() { 111 | let exp = expectation(description: "\(#function)\(#line)") 112 | testPublicIP(PublicIPAPIURLs.IPv6.icanhazip.rawValue, exp) 113 | waitForExpectations(timeout: 40, handler: nil) 114 | } 115 | 116 | func test_ipv6_ipv6test() { 117 | let exp = expectation(description: "\(#function)\(#line)") 118 | testPublicIP(PublicIPAPIURLs.IPv6.ipv6test.rawValue, exp) 119 | waitForExpectations(timeout: 40, handler: nil) 120 | } 121 | 122 | func test_ipv6_seeip() { 123 | let exp = expectation(description: "\(#function)\(#line)") 124 | testPublicIP(PublicIPAPIURLs.IPv6.seeip.rawValue, exp) 125 | waitForExpectations(timeout: 40, handler: nil) 126 | } 127 | 128 | func test_ipv6_whatismyipaddress() { 129 | let exp = expectation(description: "\(#function)\(#line)") 130 | testPublicIP(PublicIPAPIURLs.IPv6.whatismyipaddress.rawValue, exp) 131 | waitForExpectations(timeout: 40, handler: nil) 132 | } 133 | 134 | func test_ipv6_ident() { 135 | let exp = expectation(description: "\(#function)\(#line)") 136 | testPublicIP(PublicIPAPIURLs.IPv6.ident.rawValue, exp) 137 | waitForExpectations(timeout: 40, handler: nil) 138 | } 139 | 140 | func test_ipv6_ipify() { 141 | let exp = expectation(description: "\(#function)\(#line)") 142 | testPublicIP(PublicIPAPIURLs.IPv6.ipify.rawValue, exp) 143 | waitForExpectations(timeout: 40, handler: nil) 144 | } 145 | 146 | static var allTests = [ 147 | // Hybrid 148 | ("test_hybrid_icanhazip", test_hybrid_icanhazip), 149 | ("test_hybrid_ipv6test", test_hybrid_ipv6test), 150 | ("test_hybrid_seeip", test_hybrid_seeip), 151 | ("test_hybrid_whatismyipaddress", test_hybrid_whatismyipaddress), 152 | ("test_hybrid_ident", test_hybrid_ident), 153 | 154 | // IPv4 155 | ("test_ipv4_icanhazip", test_ipv4_icanhazip), 156 | ("test_ipv4_ipv6test", test_ipv4_ipv6test), 157 | ("test_ipv4_seeip", test_ipv4_seeip), 158 | ("test_ipv4_whatismyipaddress", test_ipv4_whatismyipaddress), 159 | ("test_ipv4_ident", test_ipv4_ident), 160 | 161 | ("test_ipv4_ipify", test_ipv4_ipify), 162 | 163 | ("test_ipv4_amazonaws", test_ipv4_amazonaws), 164 | ("test_ipv4_ipecho", test_ipv4_ipecho), 165 | 166 | // IPv6 167 | ("test_ipv6_icanhazip", test_ipv6_icanhazip), 168 | ("test_ipv6_ipv6test", test_ipv6_ipv6test), 169 | ("test_ipv6_seeip", test_ipv6_seeip), 170 | ("test_ipv6_whatismyipaddress", test_ipv6_whatismyipaddress), 171 | ("test_ipv6_ident", test_ipv6_ident), 172 | 173 | ("test_ipv6_ipify", test_ipv6_ipify) 174 | ] 175 | } 176 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "config:base" 4 | ] 5 | } 6 | --------------------------------------------------------------------------------