{"id":16685945,"url":"https://github.com/adong666666/interfacekit","last_synced_at":"2025-04-10T00:15:55.743Z","repository":{"id":52486209,"uuid":"363152222","full_name":"adong666666/InterfaceKit","owner":"adong666666","description":"`One line of code` to implement interfaces of `UIKit,AppKit,and WatchKit` in `SwiftUI` interface! InterfaceKit sufficiently encapsulates UIViewRepresentable, UIViewControllerRepresentable,NSViewRepresentable,NSViewControllerRepresentable,and WKInterfaceObjectRepresentable. `一行代码`实现在`SwiftUI`界面使用`UIKit、AppKit和WatchKit`的接口！InterfaceKit充分封装了UIViewRepresentable， UIViewControllerRepresentable，NSViewRepresentable，NSViewControllerRepresentable和 WKInterfaceObjectRepresentable. ","archived":false,"fork":false,"pushed_at":"2021-04-30T16:57:49.000Z","size":8316,"stargazers_count":14,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-10T00:15:47.141Z","etag":null,"topics":["and","appkit","in","interface","interfacing","nsview","nsviewcontroller","nsviewrepresentable","representable","swiftui","uikit","uiview","uiviewcontroller","uiviewcontrollerrepresentable","uiviewrepresentable","view","viewcontroller","watchkit","with","wkinterfaceobject"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/adong666666.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-04-30T13:38:24.000Z","updated_at":"2024-10-22T13:30:39.000Z","dependencies_parsed_at":"2022-08-20T20:50:38.337Z","dependency_job_id":null,"html_url":"https://github.com/adong666666/InterfaceKit","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adong666666%2FInterfaceKit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adong666666%2FInterfaceKit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adong666666%2FInterfaceKit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adong666666%2FInterfaceKit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adong666666","download_url":"https://codeload.github.com/adong666666/InterfaceKit/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248131315,"owners_count":21052819,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["and","appkit","in","interface","interfacing","nsview","nsviewcontroller","nsviewrepresentable","representable","swiftui","uikit","uiview","uiviewcontroller","uiviewcontrollerrepresentable","uiviewrepresentable","view","viewcontroller","watchkit","with","wkinterfaceobject"],"created_at":"2024-10-12T15:03:55.140Z","updated_at":"2025-04-10T00:15:55.704Z","avatar_url":"https://github.com/adong666666.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"# InterfaceKit\n========================\n\n[![CocoaPods Compatible](https://img.shields.io/cocoapods/v/InterfaceKit.svg)](https://img.shields.io/cocoapods/v/InterfaceKit.svg)\n[![Carthage Compatible](https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat)](https://github.com/Carthage/Carthage)\n\u003ca href=\"https://github.com/apple/swift-package-manager\" alt=\"Swift Package Manager Compatible\" title=\"InterfaceKit on Swift Package Manager\"\u003e\u003cimg src=\"https://img.shields.io/badge/Swift%20Package%20Manager-compatible-brightgreen.svg\" /\u003e\u003c/a\u003e\n\u003cimg src=\"https://img.shields.io/badge/platforms-iOS%20%7C%20macOS%20%7C%20tvOS%20%7C%20watchOS%20%7C%20Linux-333333.svg\" alt=\"Supported Platforms: iOS, macOS, tvOS, watchOS \u0026 Linux\" /\u003e\n\u003ca href=\"https://zsd.name\" target=\"_blank\"\u003e\u003cimg src=\"https://github.com/adong666666/InterfaceKit/workflows/InterfaceKit%20CI/badge.svg?branch=master\" alt=\"Build Status\" /\u003e\u003c/a\u003e\n[![Language](http://img.shields.io/badge/language-Swift-brightgreen.svg?style=flat\n)](https://developer.apple.com/swift)\n[![License](http://img.shields.io/badge/license-MIT-lightgrey.svg?style=flat\n)](http://mit-license.org)\n[![Issues](https://img.shields.io/github/issues/adong666666/InterfaceKit.svg?style=flat\n)](https://github.com/adong666666/InterfaceKit/issues?state=open)\n[![QQ](https://img.shields.io/badge/QQ-3440217568-yellow.svg?style=flat)]()\n[![GitHub stars](https://img.shields.io/github/stars/adong666666/InterfaceKit.svg)](https://github.com/adong666666/InterfaceKit/stargazers)\n\n`One line of code` to implement interfaces of `UIKit,AppKit,and WatchKit` in `SwiftUI` interface!\n\n##### ![cn](https://github.com/adong666666/InterfaceKit/raw/master/Pictures/China.png) Chinese (Simplified): [中文文档](https://github.com/adong666666/InterfaceKit/blob/master/README.zh-Hans.md)\n##### Code interpretation document: [https://github.com/adong666666/InterfaceKitDoc](https://github.com/adong666666/InterfaceKitDoc)(or this repository's `Docs`)\n\nThe basic idea of InterfaceKit is that we want some user interface abstraction layer that sufficiently encapsulates actually calling UIKit,AppKit,and WatchKit directly. It should be simple enough that common things are easy, but comprehensive enough that complicated things are also easy.\n\nYou can check out more about the project direction in the [vision document](https://github.com/adong666666/InterfaceKit/blob/master/Vision.md).\n```none\n                    ┌──────────────┐\n                    │   SwiftUI    │\n                    └──────▲───────┘\n                           │        \n┌──────────────────────────┴───────────────────────────┐\n│                    InterfaceKit                      │\n└───────▲──────────────────▲───────────────────▲───────┘\n        │                  │                   │        \n┌───────┴──────┐    ┌──────┴───────┐    ┌──────┴───────┐\n│     UIKit    │    │    AppKit    │    │   WatchKit   │\n└──────────────┘    └──────────────┘    └──────────────┘\n```\n\n- [Features](#features)\n- [Usage](#usage)\n- [Requirements](#requirements)\n- [Communication](#communication)\n- [Status](#status)\n- [Installation](#installation)\n- [FAQ](#faq)\n- [Credits](#credits)\n- [Donations](#donations)\n- [Contributing](#contributing)\n- [License](#license)\n- [History](#history)\n\n## Features\n\n- [x] use interface of UIKit in SwiftUI interface \n- [x] use interface of AppKit in SwiftUI interface\n- [x] use interface of WatchKit in SwiftUI interface\n\n## Usage\n\n### Universal\n\n#### For iOS or tvOS:\n\n- To present UIView.\n```swift\nInterfaceView(MyUIView())\n```\n\n- To present UIViewController.\n```swift\nInterfaceViewController(MyUIViewController())\n```\n\n#### For macOS:\n\n- To present NSView.\n```swift\nNSInterfaceView(MyNSView())\n```\n\n- To present NSViewController.\n```swift\nNSInterfaceViewController(MyNSViewController())\n```\n\n#### For watchOS:\n\n- To present WKInterfaceObject. \n\n```swift\nWKInterfaceView(MyWKInterfaceObject())\n```\n\n#### eg.\n\n```swift\nimport SwiftUI\nimport InterfaceKit\n\nstruct MyInterfaceView: View {\n    var body: some View {\n        ZStack {\n            InterfaceViewController(MyViewController())\n            InterfaceView(MyView())\n            SwiftUIView()\n        }\n    }\n}\n\n#if DEBUG\nstruct MyInterfaceView_Previews: PreviewProvider {\n    static var previews: some View {\n        MyInterfaceView()\n    }\n}\n#endif\n```\n\n### With Closure\n\nYou can do something while presenting SwiftUI view.\n\n- For Example\n\n```swift\nInterfaceViewController(MyUIViewController.shared, {\n    print(\"Hello World\")\n    MyUIViewController.shared.delegate = SomeViewControler.shared\n    MyUIViewController.shared.view.alpha = 0.5\n    MyUIViewController.shared.view.backgroundColor = .white\n    MyUIViewController.someFunction()\n    networkRequest()\n    JSONParsing()\n    downloadFile()\n    showProgress()\n    makeToast()\n    databaseOperation()\n    //do something\n    ...\n})\n.navigationBarBackButtonHidden(false)\n.navigationBarHidden(false)\n.navigationBarTitle(I18n.localizedString(\"Title\"), displayMode: .large)\n```\n\n### Multiple platforms\n\nInterfaceKit makes it clearer for multiple platforms programming.\n- For Example\n\n```swift\nimport SwiftUI\nimport MapKit\nimport InterfaceKit\n\nlet kStr = \"Hello World\"\n#if os(iOS) || os(tvOS)\n    typealias OSViewController = UIViewController\n    typealias OSView = UILabel\n    typealias OSInterfaceView = InterfaceView\n    typealias OSInterfaceVC = InterfaceViewController\n    let kBounds = UIScreen.main.bounds as CGRect?\n#elseif os(macOS)\n    typealias OSViewController = NSViewController\n    typealias OSView = NSTextField\n    typealias OSInterfaceView = NSInterfaceView\n    typealias OSInterfaceVC = NSInterfaceViewController\n    let kBounds = NSScreen.main?.frame\n#endif\n\n@main\nstruct EApp: App {\n    var body: some Scene {\n        WindowGroup {\n            ZStack {\n                #if !os(watchOS)\n                    OSInterfaceView(MKMapView())\n                    OSInterfaceView(MyView(), { print(kStr) })\n                    OSInterfaceVC(MyVC())\n                #else\n                    WKInterfaceView(WKInterfaceMap(), { print(kStr) })\n                #endif\n                Text(kStr).foregroundColor(.purple)\n            }\n        }\n    }\n}\n\n#if !os(watchOS)\nclass MyVC: OSViewController {\n    #if os(iOS) || os(tvOS)\n        override func viewDidLoad() {\n            let lbl = MyView()\n            lbl.textAlignment = .right\n            view.addSubview(lbl)\n        }\n    #elseif os(macOS)\n        override func loadView() { view = MyView() }\n    #endif\n}\n\nclass MyView: OSView {\n    override init(frame: CGRect) {\n        super.init(frame: CGRect(x: 0, y: kBounds!.height / 2 - 60, width: kBounds!.width, height: 40))\n        #if os(iOS) || os(tvOS)\n            text = kStr\n        #elseif os(macOS)\n            stringValue = kStr\n        #endif\n    }\n    \n    required init?(coder: NSCoder) { fatalError() }\n}\n#endif\n```\n\n## Requirements\n\n- iOS 13.0+ / macOS 10.15+ / tvOS 13.0+ / watchOS 6.0+\n- Xcode 11+\n- Swift 5.1+\n\n## Communication\n\n- QQ Group: 1027277979\n- If you'd like to contact me, use mail:3440217568@qq.com or QQ:3440217568 or WeChat:adongenjoylife or telephone:15674119605.\n- If you found a bug, and can provide steps to reliably reproduce it, please open an issue.\n- If you have a feature request, please open an issue.\n- If you want to contribute, please submit a pull request.\n\n## Status\n\nThis project is actively under development. We consider it ready for production use.\n\n## Installation\n\nBelow is a table that shows which version of InterfaceKit you should use for your Swift version.\n\n| Swift | InterfaceKit   | \n| ----- | -------------- |\n| 5.X   | \u003e= 5.4.0       | \n\nInterfaceKit supports multiple methods for installing the library in a project.\n\n### Copy to your project\n\nClone the repository by running the following command:\n```\ngit clone https://github.com/adong666666/InterfaceKit.git --depth=1\n```\n\nCopy the Swift files in `InterfaceKit` folder to your project.\n\u003cdiv align=\"center\"\u003e\u003cimg src=\"https://github.com/adong666666/InterfaceKit/raw/master/Pictures/copy_files.png\" alt=\"Copy files\" /\u003e\u003c/div\u003e\n\n- If for iOS or tvOS project, you can copy the file `UIInterface.swift`.\n- If for macOS project, you can copy the file `NSInterface.swift`.\n- If for watchOS project, you can copy the file `WKInterface.swift`.\n\n### CocoaPods\n\n[CocoaPods](https://cocoapods.org) is a dependency manager for Cocoa projects. For usage and installation instructions, visit their website. If you have not installed CocoaPods, just install it with the following command:\n```\n$ gem install cocoapods\n```\n\n\u003cbr /\u003e\nYou need a `Podfile` to Integrate InterfaceKit into your Xcode project with CocoaPods. If you do not have a Podfile, just create one or use the Podfile provided in `PodfileExample` folder by this repository. Podfile is as follows.\n\n```ruby\n# Podfile\nsource 'https://github.com/CocoaPods/Specs.git'\n# platform:ios, '13.0'\nuse_frameworks!\ninhibit_all_warnings!\n\ntarget 'YOUR_TARGET_NAME' do\n    pod 'InterfaceKit'\nend\n\n# post_install do |installer_representation|\n#   installer_representation.pods_project.targets.each do |target|\n#     target.build_configurations.each do |config|\n#       config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '13.0'\n#     end\n#   end\n# end\n```\n\nReplace `YOUR_TARGET_NAME` with your project name.\nTo integrate InterfaceKit into your Xcode project using CocoaPods, specify it in your `Podfile`:\n\n```ruby\npod 'InterfaceKit'\n```\n\nMaybe you have not update CocoaPods, then `InterfaceKit` may not be found, you can run `pod update` to update CocoaPods, or just run the following command. \n\n```ruby\npod 'InterfaceKit', :git =\u003e 'https://github.com/adong666666/InterfaceKit.git'\n```\n\n- If just for iOS or tvOS project, you can specify it in your `Podfile`:\n```ruby\npod 'InterfaceKit/UIKit'\n``` \n\n- If just for mac project, you can specify it in your `Podfile`:\n```ruby\npod 'InterfaceKit/AppKit'\n``` \n\n- If just for watchOS project, you can specify it in your `Podfile`:\n```ruby\npod 'InterfaceKit/WatchKit'\n``` \n\n- If you want to use the newest release of the framework, you can specify it in your `Podfile`:\n```ruby\npod 'InterfaceKit', :git =\u003e 'https://github.com/adong666666/InterfaceKit.git'\n``` \n\n- If you want to use the `specific` release of the framework, you can specify it like following in your `Podfile`:\n```ruby\npod 'InterfaceKit', :git =\u003e 'https://github.com/adong666666/InterfaceKit.git', :branch =\u003e 'master'#, commit: \"b7e1facdedd8fe16d04ef5f47c4697e89bad9f27\", '~\u003e 5.4.0', :tag =\u003e '5.4.0'\n``` \n\nThen, in the `Podfile` directory(Make sure that your Podfile and your xcodeproj file are in the same directory), run the following command:\n```\n$ pod install\n```\n\n\u003cdiv align=\"center\"\u003e\u003cimg src=\"https://github.com/adong666666/InterfaceKit/raw/master/Pictures/PodfileLocation.png\" alt=\"Podfile Location\" /\u003e\u003c/div\u003e\n\n### Carthage\n\n[Carthage](https://github.com/Carthage/Carthage) is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks.\n1. To integrate InterfaceKit into your Xcode project using Carthage, specify it in your `Cartfile`(If you don't have Cartfile, just create one or use the Cartfile provided by this repository in `CartfileExample` folder):\n```ogdl\ngithub \"adong666666/InterfaceKit\" \"master\"\n```\n\n2. Then, in the `Cartfile` directory(Make sure that your Podfile and your xcodeproj file are in the same directory), run `carthage update --use-xcframeworks`. \n   OR\n   - For iOS project, Run `carthage update --platform iOS`.\n   - For macOS project, Run `carthage update --platform macOS`.\n   - For tvOS project, Run `carthage update --platform tvOS`.\n   - For watchOS project, Run `carthage update --platform watchOS`. \n\u003cdiv align=\"center\"\u003e\u003cimg src=\"https://github.com/adong666666/InterfaceKit/raw/master/Pictures/CartfileLocation.png\" alt=\"Cartfile Location\" /\u003e\u003c/div\u003e\n\n3. On your application targets’ `\"General\"` settings tab, in the `\"Frameworks,Libraries,and Embedded Content\"` section, drag and drop `InterfaceKit` xcframework (or just select the appropriate framework from xcframework) from the Carthage/Build folder on disk.\n\n#### Carthage as a Static Library\n\nCarthage defaults to building InterfaceKit as a Dynamic Library. \n\nIf you wish to build InterfaceKit as a Static Library using Carthage you may use the script below to manually modify the framework type before building with Carthage:\n\n```bash\ncarthage update InterfaceKit --platform iOS --no-build\nsed -i -e 's/MACH_O_TYPE = mh_dylib/MACH_O_TYPE = staticlib/g' Carthage/Checkouts/InterfaceKit/InterfaceKit/InterfaceKit.xcodeproj/project.pbxproj\ncarthage build InterfaceKit --platform iOS\n```\n\n### Swift Package Manager\n\nThe [Swift Package Manager](https://swift.org/package-manager/) is a tool for automating the distribution of Swift code and is integrated into the `swift` compiler. It is in early development, but InterfaceKit does support its use on supported platforms.\n\n1. Once you have your Swift package set up, adding InterfaceKit as a dependency is as easy as adding it to the `dependencies` value of your `Package.swift`. Then run `swift build`.\n\n```swift\ndependencies: [\n    .package(url: \"https://github.com/adong666666/InterfaceKit.git\", .upToNextMajor(from: \"5.4.0\"))\n]\n```\n\nOR\n\n1. In Xcode, select File \u003e Swift Packages \u003e Add Package Dependency.\n2. Follow the prompts using the URL(\"https://github.com/adong666666/InterfaceKit.git\") for this repository.\n\u003cdiv align=\"center\"\u003e\u003cimg src=\"https://github.com/adong666666/InterfaceKit/raw/master/Pictures/SwiftPackageManager.png\" alt=\"Swift Package Manager Configuration\" /\u003e\u003c/div\u003e\n\n### Manually\n\nIf you prefer not to use any of the aforementioned dependency managers, you can integrate InterfaceKit into your project manually.\n\n#### Embedded Framework\n\n- Open up Terminal, `cd` into your top-level project directory, and run the following command \"if\" your project is not initialized as a git repository:\n\n```bash\n$ git init\n```\n\n- Add InterfaceKit as a git [submodule](https://git-scm.com/docs/git-submodule) by running the following command:\n\n```bash\n$ git submodule add https://github.com/adong666666/InterfaceKit.git\n```\n\n- Open the `InterfaceKit` folder, and drag the `InterfaceKit.xcodeproj` into the Project Navigator of your application's Xcode project.\n\n    \u003e It should appear nested underneath your application's blue project icon. Whether it is above or below all the other Xcode groups does not matter.\n\n\u003cdiv align=\"center\"\u003e\u003cimg src=\"https://github.com/adong666666/InterfaceKit/raw/master/Pictures/drag_framework.png\" alt=\"Drag and drop xcodeproj\" /\u003e\u003c/div\u003e\n\n- Select the `InterfaceKit.xcodeproj` in the Project Navigator and verify the deployment target matches that of your application target.\n- Next, select your application project in the Project Navigator (blue project icon) to navigate to the target configuration window and select the application target under the \"Targets\" heading in the sidebar.\n- In the tab bar at the top of that window, open the `\"General\"` panel.\n- Click on the `+` button under the `\"Frameworks,Libraries,and Embedded Content\"` section.\n- You will see the `InterfaceKit` folder under `Workspace`. There are `InterfaceKit.framework` and  `InterfaceKitTests.xctest` in the `InterfaceKit` folder`\n\n    \u003e Click `InterfaceKit.framework`, and then click `Add`\n\n\u003cdiv align=\"center\"\u003e\u003cimg src=\"https://github.com/adong666666/InterfaceKit/raw/master/Pictures/add_framework.png\" alt=\"Add framework\" /\u003e\u003c/div\u003e\n\n- And that's it!\n\n    \u003e The `InterfaceKit.framework` is automagically added as a target dependency, linked framework and embedded framework in a copy files build phase which is all you need to build on the simulator and a device.\n\n### Unzip,drag and drop\n\n1. Unzip the `InterfaceKit.xcframework.zip` file provided by the repository.\n\u003cdiv align=\"center\"\u003e\u003cimg src=\"https://github.com/adong666666/InterfaceKit/raw/master/Pictures/unzip.png\" alt=\"Unzip\" /\u003e\u003c/div\u003e\n\n2. On your application targets’ `“General”` settings tab, in the `\"Frameworks,Libraries,and Embedded Content\"` section, drag and drop the unzipped file `InterfaceKit.xcframework` (or just select the appropriate framework from InterfaceKit.xcframework).\n- If you use `xcfameworks`, just drag and drop `InterfaceKit.xcframework`. `InterfaceKit.xcframework` supports all four platforms(`iOS, macOS, tvOS, watchOS`).\n\u003cdiv align=\"center\"\u003e\u003cimg src=\"https://github.com/adong666666/InterfaceKit/raw/master/Pictures/use_xcframeworks.png\" alt=\"Use xcframeworks\" /\u003e\u003c/div\u003e\n\n- If you use `frameworks`, select the appropriate framework from InterfaceKit.xcframework according to the folder name and the platform of your project.\n\u003cdiv align=\"center\"\u003e\u003cimg src=\"https://github.com/adong666666/InterfaceKit/raw/master/Pictures/use_frameworks.png\" alt=\"Use frameworks\" /\u003e\u003c/div\u003e\n\n## FAQ\n\n### Why use InterfaceKit?\n\n`One line of code` to implement interfaces of `UIKit,AppKit,and WatchKit` in `SwiftUI` interface! InterfaceKit supports for all four platforms(`iOS, macOS, tvOS, watchOS`). InterfaceKit is `constantly` updated.\n\n## Credits\n\nInterfaceKit is owned and maintained by [Saidong Zhang](https://zsd.name). You can follow him on github at [@Github](https://github.com/adong666666) for project updates and releases. \n\n### Security Disclosure\n\nIf you believe you have identified a security vulnerability with InterfaceKit, you should report it as soon as possible via email to 3440217568@qq.com. \n\n## Donations\n\nNo donation required, but thanks anyway.\n\n## Contributing\n\nHey! Do you like InterfaceKit? Awesome! We could actually really use your help!\n\nOpen source isn't just writing code. InterfaceKit could use your help with any of the following:\n\n- Finding (and reporting!) bugs.\n- New feature suggestions.\n- Answering questions on issues.\n- Documentation improvements.\n- Reviewing pull requests.\n- Helping to manage issue priorities.\n- Fixing bugs/new features.\n\nIf any of that sounds cool to you, send a pull request! After your first contribution, we will add you as a member to the repo so you can merge pull requests and help steer the ship :ship: You can read more details about that [in our contributor guidelines](https://github.com/adong666666/InterfaceKit/blob/master/CONTRIBUTING.md).\n\nInterfaceKit's community has a tremendous positive energy, and the maintainers are committed to keeping things awesome. Like [in the CocoaPods community](https://github.com/CocoaPods/CocoaPods/wiki/Communication-\u0026-Design-Rules), always assume positive intent; even if a comment sounds mean-spirited, give the person the benefit of the doubt.\n\nPlease note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by [its terms](https://github.com/adong666666/InterfaceKit/blob/master/Code%20of%20Conduct.md).\n\n### Adding new source files\n\nIf you add or remove a source file from InterfaceKIt, a corresponding change needs to be made to the `InterfaceKit.xcworkspace` project at the root of this repository. This project is used for Carthage. Don't worry, you'll get an automated warning when submitting a pull request if you forget.\n\n### Help us improve InterfaceKit documentation\n\nWhether you’re a core member or a user trying it out for the first time, you can make a valuable contribution to InterfaceKit by improving the documentation. Help us by:\n\n- sending us feedback about something you thought was confusing or simply missing\n- suggesting better wording or ways of explaining certain topics\n- sending us a pull request via GitHub\n- improving the [Chinese documentation](https://github.com/adong666666/InterfaceKit/blob/master/README.zh-Hans.md)\n\n### Too wordy about the above? Then just do it.\n\n* Fork the repository!\n* Create your feature branch: `git checkout -b my-new-feature`\n* Commit your changes: `git commit -am 'Add some feature'`\n* Push to the branch: `git push origin my-new-feature`\n* Submit a pull request\n* Other: \n[See CONTRIBUTING.md](https://github.com/adong666666/InterfaceKit/blob/master/CONTRIBUTING.md) for details.\n\n## License\n\nInterfaceKit is released under the MIT license. [See LICENSE](https://github.com/adong666666/InterfaceKit/blob/master/LICENSE.md) for details.\n\n## History\n\n[See CHANGELOG.md](https://github.com/adong666666/InterfaceKit/blob/master/CHANGELOG.md) for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadong666666%2Finterfacekit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadong666666%2Finterfacekit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadong666666%2Finterfacekit/lists"}