├── .gitignore ├── .swift-version ├── .travis.yml ├── Assets ├── 1.png ├── 2.png ├── 3.png ├── 4.png ├── EFIconFont.png ├── extend.png ├── fontawesome.png ├── headimage.psd └── iconfont.png ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── EFIconFont.podspec ├── EFIconFont ├── Assets │ ├── .gitkeep │ ├── AntDesign │ │ └── antdesign.ttf │ ├── ElusiveIcons │ │ └── elusiveicons.ttf │ ├── FontAwesome │ │ ├── fontawesomebrands.ttf │ │ ├── fontawesomeregular.ttf │ │ └── fontawesomesolid.ttf │ ├── IcoMoon │ │ └── icomoon.ttf │ ├── Ionicons │ │ └── ionicons.ttf │ ├── MaterialIcons │ │ └── Material Icons.ttf │ ├── Meteocons │ │ └── meteocons.ttf │ ├── MetrizeIcons │ │ └── metrizeicons.ttf │ ├── OpenIconic │ │ └── openiconic.ttf │ └── Typicons │ │ └── typicons.ttf └── Classes │ ├── .gitkeep │ ├── AntDesign │ └── EFIconFontAntDesign.swift │ ├── Core │ ├── EFIconFont.swift │ ├── EFIconFontCaseIterableProtocol.swift │ └── EFIconFontProtocol.swift │ ├── ElusiveIcons │ └── EFIconFontElusiveIcons.swift │ ├── FontAwesome │ ├── EFIconFontFontAwesomeBrands.swift │ ├── EFIconFontFontAwesomeRegular.swift │ └── EFIconFontFontAwesomeSolid.swift │ ├── IcoMoon │ └── EFIconIcoMoon.swift │ ├── Ionicons │ └── EFIconFontIonicons.swift │ ├── MaterialIcons │ └── EFIconFontMaterialIcons.swift │ ├── Meteocons │ └── EFIconFontMeteocons.swift │ ├── MetrizeIcons │ └── EFIconFontMetrizeIcons.swift │ ├── OpenIconic │ └── EFIconFontOpenIconic.swift │ └── Typicons │ └── EFIconFontTypicons.swift ├── Example ├── EFIconFont.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ └── xcschemes │ │ └── EFIconFont-Example.xcscheme ├── EFIconFont.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── EFIconFont │ ├── AppDelegate.swift │ ├── Base.lproj │ │ ├── LaunchScreen.xib │ │ └── Main.storyboard │ ├── CGFloat+.swift │ ├── DetailViewController.swift │ ├── EFIconFontOcticons.swift │ ├── GalleryViewController.swift │ ├── Images.xcassets │ │ └── AppIcon.appiconset │ │ │ ├── 120-1.png │ │ │ ├── 120.png │ │ │ ├── 180.png │ │ │ ├── 40.png │ │ │ ├── 58.png │ │ │ ├── 60.png │ │ │ ├── 80.png │ │ │ ├── 87.png │ │ │ └── Contents.json │ ├── Info.plist │ ├── SubViewController.swift │ ├── UIDevice+.swift │ ├── ViewController.swift │ └── octicons.ttf ├── Podfile ├── Podfile.lock ├── Pods │ ├── Local Podspecs │ │ └── EFIconFont.podspec.json │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ └── project.pbxproj │ └── Target Support Files │ │ ├── EFIconFont │ │ ├── EFIconFont-Info.plist │ │ ├── EFIconFont-dummy.m │ │ ├── EFIconFont-prefix.pch │ │ ├── EFIconFont-umbrella.h │ │ ├── EFIconFont.modulemap │ │ └── EFIconFont.xcconfig │ │ ├── Pods-EFIconFont_Example │ │ ├── Pods-EFIconFont_Example-Info.plist │ │ ├── Pods-EFIconFont_Example-acknowledgements.markdown │ │ ├── Pods-EFIconFont_Example-acknowledgements.plist │ │ ├── Pods-EFIconFont_Example-dummy.m │ │ ├── Pods-EFIconFont_Example-frameworks.sh │ │ ├── Pods-EFIconFont_Example-umbrella.h │ │ ├── Pods-EFIconFont_Example.debug.xcconfig │ │ ├── Pods-EFIconFont_Example.modulemap │ │ └── Pods-EFIconFont_Example.release.xcconfig │ │ └── Pods-EFIconFont_Tests │ │ ├── Pods-EFIconFont_Tests-Info.plist │ │ ├── Pods-EFIconFont_Tests-acknowledgements.markdown │ │ ├── Pods-EFIconFont_Tests-acknowledgements.plist │ │ ├── Pods-EFIconFont_Tests-dummy.m │ │ ├── Pods-EFIconFont_Tests-umbrella.h │ │ ├── Pods-EFIconFont_Tests.debug.xcconfig │ │ ├── Pods-EFIconFont_Tests.modulemap │ │ └── Pods-EFIconFont_Tests.release.xcconfig └── Tests │ ├── Info.plist │ └── Tests.swift ├── Extend ├── fontawesome.md ├── iconfont.md └── materialicons.md ├── ISSUE_TEMPLATE.md ├── LICENSE ├── README.md ├── README_CN.md ├── _Pods.xcodeproj └── _config.yml /.gitignore: -------------------------------------------------------------------------------- 1 | # OS X 2 | .DS_Store 3 | 4 | # Xcode 5 | xcuserdata/ 6 | 7 | # AppCode 8 | .idea/ 9 | 10 | # Bundler 11 | .bundle 12 | 13 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 14 | # Carthage/Checkouts 15 | 16 | Carthage/Build 17 | 18 | # We recommend against adding the Pods directory to your .gitignore. However 19 | # you should judge for yourself, the pros and cons are mentioned at: 20 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-ignore-the-pods-directory-in-source-control 21 | # 22 | # Note: if you ignore the Pods directory, make sure to uncomment 23 | # `pod install` in .travis.yml 24 | # 25 | # Pods/ 26 | -------------------------------------------------------------------------------- /.swift-version: -------------------------------------------------------------------------------- 1 | 5.0 2 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | language: objective-c 2 | osx_image: xcode10.2 3 | env: SWIFT_SNAPSHOT=5.0 4 | 5 | cache: cocoapods 6 | podfile: Example/Podfile 7 | 8 | env: 9 | global: 10 | - LANG=en_US.UTF-8 11 | - LC_ALL=en_US.UTF-8 12 | - XCODE_WORKSPACE=Example/EFIconFont.xcworkspace 13 | - DESTINATION="OS=12.0,name=iPhone XS" 14 | matrix: 15 | - SCHEME="EFIconFont-Example" 16 | 17 | before_install: 18 | - gem install xcpretty --no-document --quiet 19 | - gem install cocoapods --pre --no-document --quiet 20 | - pod install --project-directory=Example 21 | 22 | script: 23 | - set -o pipefail 24 | - pod repo update 25 | - xcodebuild -workspace "$XCODE_WORKSPACE" -scheme "$SCHEME" -destination "$DESTINATION" -configuration Debug ONLY_ACTIVE_ARCH=NO build | xcpretty -c; 26 | - xcodebuild -workspace "$XCODE_WORKSPACE" -scheme "$SCHEME" -destination "$DESTINATION" -configuration Release ONLY_ACTIVE_ARCH=NO build | xcpretty -c; 27 | - pod lib lint --allow-warnings 28 | 29 | after_success: 30 | - sleep 3 -------------------------------------------------------------------------------- /Assets/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/Assets/1.png -------------------------------------------------------------------------------- /Assets/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/Assets/2.png -------------------------------------------------------------------------------- /Assets/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/Assets/3.png -------------------------------------------------------------------------------- /Assets/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/Assets/4.png -------------------------------------------------------------------------------- /Assets/EFIconFont.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/Assets/EFIconFont.png -------------------------------------------------------------------------------- /Assets/extend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/Assets/extend.png -------------------------------------------------------------------------------- /Assets/fontawesome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/Assets/fontawesome.png -------------------------------------------------------------------------------- /Assets/headimage.psd: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/Assets/headimage.psd -------------------------------------------------------------------------------- /Assets/iconfont.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/Assets/iconfont.png -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | ----- 4 | 5 | ## [0.5.1](https://github.com/EFPrefix/EFIconFont/releases/tag/0.5.1) (2019-08-26) 6 | 7 | - Add IcoMoon. 8 | 9 | --- 10 | 11 | ## [0.5.0](https://github.com/EFPrefix/EFIconFont/releases/tag/0.5.0) (2019-03-30) 12 | 13 | - Update to Swift 5.0; 14 | - Fix some typos. 15 | 16 | --- 17 | 18 | ## [0.4.5](https://github.com/EFPrefix/EFIconFont/releases/tag/0.4.5) (2019-03-28) 19 | 20 | - Add Meteocons. 21 | 22 | --- 23 | 24 | ## [0.4.4](https://github.com/EFPrefix/EFIconFont/releases/tag/0.4.4) (2019-03-27) 25 | 26 | - Add MetrizeIcons. 27 | 28 | --- 29 | 30 | ## [0.4.3](https://github.com/EFPrefix/EFIconFont/releases/tag/0.4.3) (2019-03-26) 31 | 32 | - Add OpenIconic. 33 | 34 | --- 35 | 36 | ## [0.4.2](https://github.com/EFPrefix/EFIconFont/releases/tag/0.4.2) (2019-03-25) 37 | 38 | - Add Typicons. 39 | 40 | --- 41 | 42 | ## [0.4.1](https://github.com/EFPrefix/EFIconFont/releases/tag/0.4.1) (2019-03-24) 43 | 44 | - Add MaterialIcons. 45 | 46 | --- 47 | 48 | ## [0.4.0](https://github.com/EFPrefix/EFIconFont/releases/tag/0.4.0) (2019-03-24) 49 | 50 | - Add function to find icon by name; 51 | - Add `Complete` subspec; 52 | - Add `EFIconFontCaseIterableProtocol`; 53 | - Update FontAwesome with `iconfont.cn`; 54 | - Remove pack `Octicons`; 55 | - Remove dictionary from `EFIconFontProtocol`. 56 | 57 | --- 58 | 59 | ## [0.3.0](https://github.com/EFPrefix/EFIconFont/releases/tag/0.3.0) (2019-03-23) 60 | 61 | - Make EFIconFont public; 62 | - Change dictionary type. 63 | 64 | --- 65 | 66 | ## [0.2.4](https://github.com/EFPrefix/EFIconFont/releases/tag/0.2.4) (2019-03-22) 67 | 68 | - Add ElusiveIcons. 69 | 70 | --- 71 | 72 | ## [0.2.3](https://github.com/EFPrefix/EFIconFont/releases/tag/0.2.3) (2019-03-22) 73 | 74 | - Add dictionary. 75 | 76 | --- 77 | 78 | ## [0.2.2](https://github.com/EFPrefix/EFIconFont/releases/tag/0.2.2) (2019-03-22) 79 | 80 | - Add Ionicons; 81 | - Make style properties public. 82 | 83 | --- 84 | 85 | ## [0.2.1](https://github.com/EFPrefix/EFIconFont/releases/tag/0.2.1) (2019-03-21) 86 | 87 | - Add Octicons. 88 | 89 | --- 90 | 91 | ## [0.2.0](https://github.com/EFPrefix/EFIconFont/releases/tag/0.2.0) (2019-03-21) 92 | 93 | - Add backgroundColor. 94 | 95 | --- 96 | 97 | ## [0.1.1](https://github.com/EFPrefix/EFIconFont/releases/tag/0.1.1) (2019-03-21) 98 | 99 | - Add FontAwesome. 100 | 101 | --- 102 | 103 | ## [0.1.0](https://github.com/EFPrefix/EFIconFont/releases/tag/0.1.0) (2019-03-20) 104 | 105 | - First public release. 106 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. 6 | 7 | ## Our Standards 8 | 9 | Examples of behavior that contributes to creating a positive environment include: 10 | 11 | * Using welcoming and inclusive language 12 | * Being respectful of differing viewpoints and experiences 13 | * Gracefully accepting constructive criticism 14 | * Focusing on what is best for the community 15 | * Showing empathy towards other community members 16 | 17 | Examples of unacceptable behavior by participants include: 18 | 19 | * The use of sexualized language or imagery and unwelcome sexual attention or advances 20 | * Trolling, insulting/derogatory comments, and personal or political attacks 21 | * Public or private harassment 22 | * Publishing others' private information, such as a physical or electronic address, without explicit permission 23 | * Other conduct which could reasonably be considered inappropriate in a professional setting 24 | 25 | ## Our Responsibilities 26 | 27 | Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. 28 | 29 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. 30 | 31 | ## Scope 32 | 33 | This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. 34 | 35 | ## Enforcement 36 | 37 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at eyrefree@eyrefree.org. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. 38 | 39 | Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. 40 | 41 | ## Attribution 42 | 43 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [https://www.contributor-covenant.org/version/1/4][version] 44 | 45 | [homepage]: https://www.contributor-covenant.org 46 | [version]: https://www.contributor-covenant.org/version/1/4/ 47 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing Guidelines 2 | 3 | This document contains information and guidelines about contributing to this project. 4 | Please read it before you start participating. 5 | 6 | **Topics** 7 | 8 | * [Asking Questions](#asking-questions) 9 | * [Reporting Issues](#reporting-issues) 10 | * [Developers Certificate of Origin](#developers-certificate-of-origin) 11 | 12 | ## Asking Questions 13 | 14 | We don't use GitHub as a support forum. 15 | For any usage questions that are not specific to the project itself, 16 | please ask on [Stack Overflow](https://stackoverflow.com) instead. 17 | By doing so, you'll be more likely to quickly solve your problem, 18 | and you'll allow anyone else with the same question to find the answer. 19 | This also allows maintainers to focus on improving the project for others. 20 | 21 | ## Reporting Issues 22 | 23 | A great way to contribute to the project 24 | is to send a detailed issue when you encounter an problem. 25 | We always appreciate a well-written, thorough bug report. 26 | 27 | Check that the project issues database 28 | doesn't already include that problem or suggestion before submitting an issue. 29 | If you find a match, add a quick "+1" or "I have this problem too." 30 | Doing this helps prioritize the most common problems and requests. 31 | 32 | When reporting issues, please include the following: 33 | 34 | * The version of Xcode you're using 35 | * The version of iOS or macOS you're targeting 36 | * The full output of any stack trace or compiler error 37 | * A code snippet that reproduces the described behavior, if applicable 38 | * Any other details that would be useful in understanding the problem 39 | 40 | This information will help us review and fix your issue faster. 41 | 42 | ## Developer's Certificate of Origin 43 | 44 | By making a contribution to this project, I certify that: 45 | 46 | - (a) The contribution was created in whole or in part by me and I 47 | have the right to submit it under the open source license 48 | indicated in the file; or 49 | 50 | - (b) The contribution is based upon previous work that, to the best 51 | of my knowledge, is covered under an appropriate open source 52 | license and I have the right under that license to submit that 53 | work with modifications, whether created in whole or in part 54 | by me, under the same open source license (unless I am 55 | permitted to submit under a different license), as indicated 56 | in the file; or 57 | 58 | - (c) The contribution was provided directly to me by some other 59 | person who certified (a), (b) or (c) and I have not modified 60 | it. 61 | 62 | - (d) I understand and agree that this project and the contribution 63 | are public and that a record of the contribution (including all 64 | personal information I submit with it, including my sign-off) is 65 | maintained indefinitely and may be redistributed consistent with 66 | this project or the open source license(s) involved. 67 | 68 | --- 69 | 70 | *Some of the ideas and wording for the statements above were based on work by the [Alamofire](https://github.com/Alamofire/Alamofire/blob/master/CONTRIBUTING.md) communities. We commend them for their efforts to facilitate collaboration in their projects.* 71 | -------------------------------------------------------------------------------- /EFIconFont.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = 'EFIconFont' 3 | s.version = '0.5.1' 4 | s.summary = 'Yet another stupid wrapper of icon font.' 5 | 6 | s.description = <<-DESC 7 | An ordinary iconfont cocoapods package helps you to use iconfont more easily in your project, in Swift. 8 | DESC 9 | 10 | s.homepage = 'https://github.com/EyreFree/EFIconFont' 11 | s.screenshots = 'https://github.com/EFPrefix/EFIconFont/blob/master/Assets/EFIconFont.png?raw=true' 12 | s.license = { :type => 'MIT', :file => 'LICENSE' } 13 | s.author = { 'EyreFree' => 'eyrefree@eyrefree.org' } 14 | s.source = { :git => 'https://github.com/EyreFree/EFIconFont.git', :tag => s.version.to_s } 15 | s.social_media_url = 'https://twitter.com/EyreFree777' 16 | 17 | s.ios.deployment_target = '8.0' 18 | s.default_subspec = 'Core' 19 | 20 | s.subspec 'Core' do |core| 21 | core.source_files = 'EFIconFont/Classes/Core/**/*' 22 | end 23 | 24 | s.subspec 'AntDesign' do |antdesign| 25 | antdesign.source_files = 'EFIconFont/Classes/AntDesign/**/*' 26 | antdesign.resources = 'EFIconFont/Assets/AntDesign/**/*' 27 | antdesign.dependency 'EFIconFont/Core' 28 | end 29 | 30 | s.subspec 'ElusiveIcons' do |elusiveicons| 31 | elusiveicons.source_files = 'EFIconFont/Classes/ElusiveIcons/**/*' 32 | elusiveicons.resources = 'EFIconFont/Assets/ElusiveIcons/**/*' 33 | elusiveicons.dependency 'EFIconFont/Core' 34 | end 35 | 36 | s.subspec 'FontAwesome' do |fontawesome| 37 | fontawesome.source_files = 'EFIconFont/Classes/FontAwesome/**/*' 38 | fontawesome.resources = 'EFIconFont/Assets/FontAwesome/**/*' 39 | fontawesome.dependency 'EFIconFont/Core' 40 | end 41 | 42 | s.subspec 'IcoMoon' do |icomoon| 43 | icomoon.source_files = 'EFIconFont/Classes/IcoMoon/**/*' 44 | icomoon.resources = 'EFIconFont/Assets/IcoMoon/**/*' 45 | icomoon.dependency 'EFIconFont/Core' 46 | end 47 | 48 | s.subspec 'Ionicons' do |ionicons| 49 | ionicons.source_files = 'EFIconFont/Classes/Ionicons/**/*' 50 | ionicons.resources = 'EFIconFont/Assets/Ionicons/**/*' 51 | ionicons.dependency 'EFIconFont/Core' 52 | end 53 | 54 | s.subspec 'MaterialIcons' do |materialicons| 55 | materialicons.source_files = 'EFIconFont/Classes/MaterialIcons/**/*' 56 | materialicons.resources = 'EFIconFont/Assets/MaterialIcons/**/*' 57 | materialicons.dependency 'EFIconFont/Core' 58 | end 59 | 60 | s.subspec 'Meteocons' do |meteocons| 61 | meteocons.source_files = 'EFIconFont/Classes/Meteocons/**/*' 62 | meteocons.resources = 'EFIconFont/Assets/Meteocons/**/*' 63 | meteocons.dependency 'EFIconFont/Core' 64 | end 65 | 66 | s.subspec 'MetrizeIcons' do |metrizeicons| 67 | metrizeicons.source_files = 'EFIconFont/Classes/MetrizeIcons/**/*' 68 | metrizeicons.resources = 'EFIconFont/Assets/MetrizeIcons/**/*' 69 | metrizeicons.dependency 'EFIconFont/Core' 70 | end 71 | 72 | s.subspec 'OpenIconic' do |openiconic| 73 | openiconic.source_files = 'EFIconFont/Classes/OpenIconic/**/*' 74 | openiconic.resources = 'EFIconFont/Assets/OpenIconic/**/*' 75 | openiconic.dependency 'EFIconFont/Core' 76 | end 77 | 78 | s.subspec 'Typicons' do |typicons| 79 | typicons.source_files = 'EFIconFont/Classes/Typicons/**/*' 80 | typicons.resources = 'EFIconFont/Assets/Typicons/**/*' 81 | typicons.dependency 'EFIconFont/Core' 82 | end 83 | 84 | s.subspec 'Complete' do |complete| 85 | complete.dependency 'EFIconFont/Core' 86 | complete.dependency 'EFIconFont/AntDesign' 87 | complete.dependency 'EFIconFont/ElusiveIcons' 88 | complete.dependency 'EFIconFont/FontAwesome' 89 | complete.dependency 'EFIconFont/IcoMoon' 90 | complete.dependency 'EFIconFont/Ionicons' 91 | complete.dependency 'EFIconFont/MaterialIcons' 92 | complete.dependency 'EFIconFont/Meteocons' 93 | complete.dependency 'EFIconFont/MetrizeIcons' 94 | complete.dependency 'EFIconFont/OpenIconic' 95 | complete.dependency 'EFIconFont/Typicons' 96 | end 97 | end 98 | -------------------------------------------------------------------------------- /EFIconFont/Assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/EFIconFont/Assets/.gitkeep -------------------------------------------------------------------------------- /EFIconFont/Assets/AntDesign/antdesign.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/EFIconFont/Assets/AntDesign/antdesign.ttf -------------------------------------------------------------------------------- /EFIconFont/Assets/ElusiveIcons/elusiveicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/EFIconFont/Assets/ElusiveIcons/elusiveicons.ttf -------------------------------------------------------------------------------- /EFIconFont/Assets/FontAwesome/fontawesomebrands.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/EFIconFont/Assets/FontAwesome/fontawesomebrands.ttf -------------------------------------------------------------------------------- /EFIconFont/Assets/FontAwesome/fontawesomeregular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/EFIconFont/Assets/FontAwesome/fontawesomeregular.ttf -------------------------------------------------------------------------------- /EFIconFont/Assets/FontAwesome/fontawesomesolid.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/EFIconFont/Assets/FontAwesome/fontawesomesolid.ttf -------------------------------------------------------------------------------- /EFIconFont/Assets/IcoMoon/icomoon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/EFIconFont/Assets/IcoMoon/icomoon.ttf -------------------------------------------------------------------------------- /EFIconFont/Assets/Ionicons/ionicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/EFIconFont/Assets/Ionicons/ionicons.ttf -------------------------------------------------------------------------------- /EFIconFont/Assets/MaterialIcons/Material Icons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/EFIconFont/Assets/MaterialIcons/Material Icons.ttf -------------------------------------------------------------------------------- /EFIconFont/Assets/Meteocons/meteocons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/EFIconFont/Assets/Meteocons/meteocons.ttf -------------------------------------------------------------------------------- /EFIconFont/Assets/MetrizeIcons/metrizeicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/EFIconFont/Assets/MetrizeIcons/metrizeicons.ttf -------------------------------------------------------------------------------- /EFIconFont/Assets/OpenIconic/openiconic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/EFIconFont/Assets/OpenIconic/openiconic.ttf -------------------------------------------------------------------------------- /EFIconFont/Assets/Typicons/typicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/EFIconFont/Assets/Typicons/typicons.ttf -------------------------------------------------------------------------------- /EFIconFont/Classes/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/EFIconFont/Classes/.gitkeep -------------------------------------------------------------------------------- /EFIconFont/Classes/Core/EFIconFont.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EFIconFont.swift 3 | // EFIconFont 4 | // 5 | // Created by EyreFree on 2019/3/20. 6 | // 7 | // Copyright (c) 2019 EyreFree 8 | // 9 | // Permission is hereby granted, free of charge, to any person obtaining a copy 10 | // of this software and associated documentation files (the "Software"), to deal 11 | // in the Software without restriction, including without limitation the rights 12 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the Software is 14 | // furnished to do so, subject to the following conditions: 15 | // 16 | // The above copyright notice and this permission notice shall be included in 17 | // all copies or substantial portions of the Software. 18 | // 19 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 25 | // THE SOFTWARE. 26 | 27 | import Foundation 28 | 29 | public class EFIconFont: EFIconFontProtocol { 30 | 31 | public let icon: String 32 | public let name: String 33 | public let path: String 34 | public let unicode: String 35 | 36 | public init(name fontName: String, icon iconName: String, path filePath: String? = nil, unicode: String) { 37 | self.name = fontName 38 | self.unicode = unicode 39 | self.icon = iconName 40 | self.path = filePath ?? Bundle(for: EFIconFont.self).path(forResource: fontName, ofType: "ttf") ?? Bundle.main.path(forResource: fontName, ofType: "ttf") ?? "" 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /EFIconFont/Classes/Core/EFIconFontCaseIterableProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EFIconFontCaseIterableProtocol.swift 3 | // EFIconFont 4 | // 5 | // Created by EyreFree on 2019/3/24. 6 | // 7 | 8 | import Foundation 9 | import UIKit 10 | 11 | fileprivate struct Anchor { 12 | static var dictionaryDictionaries: [String: [String : EFIconFontProtocol]] = [:] 13 | static var attributesDictionaries: [String: [NSAttributedString.Key : Any]] = [:] 14 | } 15 | 16 | public protocol EFIconFontCaseIterableProtocol: EFIconFontProtocol, CaseIterable { 17 | 18 | // `dictionary` is all icons in [String : EFIconFontProtocol] 19 | static var dictionary: [String : EFIconFontProtocol] { get } 20 | 21 | // `icon` is used to find icon by name 22 | func icon(named name: String) -> EFIconFontProtocol? 23 | 24 | // `name` is not necessarily equal to .ttf file name 25 | static var name: String { get } 26 | 27 | // `path` is path of .ttf file 28 | static var path: String { get } 29 | 30 | // `attributes` is style of all icons 31 | static var attributes: [NSAttributedString.Key : Any] { set get } 32 | 33 | // `foregroundColor` is foregroundColor of all icons 34 | static var foregroundColor: UIColor? { set get } 35 | 36 | // `backgroundColor` is backgroundColor of all icons 37 | static var backgroundColor: UIColor? { set get } 38 | } 39 | 40 | public extension EFIconFontCaseIterableProtocol { 41 | 42 | static var dictionary: [String : EFIconFontProtocol] { 43 | get { 44 | let key: String = String(describing: Self.self) 45 | if let attributes = Anchor.dictionaryDictionaries[key] { 46 | return attributes 47 | } 48 | let newAttributes: [String : EFIconFontProtocol] = generateDictionary() 49 | Anchor.dictionaryDictionaries.updateValue(newAttributes, forKey: key) 50 | return newAttributes 51 | } 52 | } 53 | 54 | private static func generateDictionary() -> [String : EFIconFontProtocol] { 55 | var dictionary: [String : EFIconFontProtocol] = [String : EFIconFontProtocol]() 56 | for item in Self.allCases { 57 | dictionary.updateValue(item, forKey: "\(item)") 58 | } 59 | return dictionary 60 | } 61 | 62 | func icon(named name: String) -> EFIconFontProtocol? { 63 | return Self.dictionary[name] 64 | } 65 | 66 | static var path: String { 67 | return Bundle(for: EFIconFont.self).path(forResource: Self.name, ofType: "ttf") ?? Bundle.main.path(forResource: Self.name, ofType: "ttf") ?? "" 68 | } 69 | 70 | static var attributes: [NSAttributedString.Key : Any] { 71 | get { 72 | let key: String = String(describing: Self.self) 73 | return Anchor.attributesDictionaries[key] ?? [:] 74 | } 75 | set { 76 | let key: String = String(describing: Self.self) 77 | Anchor.attributesDictionaries.updateValue(newValue, forKey: key) 78 | } 79 | } 80 | 81 | static var foregroundColor: UIColor? { 82 | get { 83 | return Self.attributes[NSAttributedString.Key.foregroundColor] as? UIColor 84 | } 85 | set { 86 | if let newValue = newValue { 87 | Self.attributes.updateValue(newValue, forKey: NSAttributedString.Key.foregroundColor) 88 | } else { 89 | Self.attributes.removeValue(forKey: NSAttributedString.Key.foregroundColor) 90 | } 91 | } 92 | } 93 | 94 | static var backgroundColor: UIColor? { 95 | get { 96 | return Self.attributes[NSAttributedString.Key.backgroundColor] as? UIColor 97 | } 98 | set { 99 | if let newValue = newValue { 100 | Self.attributes.updateValue(newValue, forKey: NSAttributedString.Key.backgroundColor) 101 | } else { 102 | Self.attributes.removeValue(forKey: NSAttributedString.Key.backgroundColor) 103 | } 104 | } 105 | } 106 | 107 | // MARK:- EFIconFontProtocol 108 | var name: String { 109 | get { 110 | return Self.name 111 | } 112 | } 113 | 114 | var path: String { 115 | get { 116 | return Self.path 117 | } 118 | } 119 | 120 | var attributes: [NSAttributedString.Key : Any] { 121 | get { 122 | return Self.attributes 123 | } 124 | set { 125 | Self.attributes = newValue 126 | } 127 | } 128 | 129 | var foregroundColor: UIColor? { 130 | return Self.foregroundColor 131 | } 132 | 133 | var backgroundColor: UIColor? { 134 | return Self.backgroundColor 135 | } 136 | } 137 | -------------------------------------------------------------------------------- /EFIconFont/Classes/Core/EFIconFontProtocol.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EFIconFontProtocol.swift 3 | // EFIconFont 4 | // 5 | // Created by EyreFree on 2019/3/20. 6 | // 7 | // Copyright (c) 2019 EyreFree 8 | // 9 | // Permission is hereby granted, free of charge, to any person obtaining a copy 10 | // of this software and associated documentation files (the "Software"), to deal 11 | // in the Software without restriction, including without limitation the rights 12 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the Software is 14 | // furnished to do so, subject to the following conditions: 15 | // 16 | // The above copyright notice and this permission notice shall be included in 17 | // all copies or substantial portions of the Software. 18 | // 19 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 25 | // THE SOFTWARE. 26 | 27 | import Foundation 28 | import UIKit 29 | 30 | fileprivate struct AssociatedKeys { 31 | static var attributes = "attributes" 32 | } 33 | 34 | public protocol EFIconFontProtocol { 35 | 36 | // `name` is not necessarily equal to .ttf file name 37 | var name: String { get } 38 | 39 | // `path` is path of .ttf file 40 | var path: String { get } 41 | 42 | // `attributes` is style of icon 43 | var attributes: [NSAttributedString.Key : Any] { set get } 44 | 45 | // `unicode` is unique identifier of particular icon 46 | var unicode: String { get } 47 | } 48 | 49 | public extension EFIconFontProtocol { 50 | 51 | // MARK:- Default 52 | var path: String { 53 | return Bundle(for: EFIconFont.self).path(forResource: name, ofType: "ttf") ?? Bundle.main.path(forResource: name, ofType: "ttf") ?? "" 54 | } 55 | 56 | // MARK:- Private 57 | private func loaded() -> Bool { 58 | if UIFont.fontNames(forFamilyName: name).isEmpty == false { 59 | return true 60 | } 61 | if path.isEmpty { 62 | return false 63 | } 64 | guard let fontData = NSData(contentsOfFile: path), let dataProvider = CGDataProvider(data: fontData), let cgFont = CGFont(dataProvider) else { 65 | return false 66 | } 67 | var error: Unmanaged? 68 | if !CTFontManagerRegisterGraphicsFont(cgFont, &error) { 69 | var errorDescription: CFString = "Unknown" as CFString 70 | if let takeUnretainedValue = error?.takeUnretainedValue() { 71 | errorDescription = CFErrorCopyDescription(takeUnretainedValue) 72 | } 73 | print("Unable to load \(path): \(errorDescription)") 74 | return false 75 | } 76 | return true 77 | } 78 | 79 | private func attributesWith(size fontSize: CGFloat, attributes: [NSAttributedString.Key : Any]?) -> [NSAttributedString.Key : Any]? { 80 | guard let font = font(size: fontSize) else { return nil } 81 | var attributesCombine: [NSAttributedString.Key : Any] = self.attributes 82 | if let attributes = attributes { 83 | for attribute in attributes { 84 | attributesCombine.updateValue(attribute.value, forKey: attribute.key) 85 | } 86 | } 87 | attributesCombine.updateValue(font, forKey: NSAttributedString.Key.font) 88 | return attributesCombine 89 | } 90 | 91 | // MARK:- Style 92 | var attributes: [NSAttributedString.Key : Any] { 93 | get { 94 | if let attributes = objc_getAssociatedObject(self, &AssociatedKeys.attributes) as? [NSAttributedString.Key : Any] { 95 | return attributes 96 | } 97 | let newAttributes: [NSAttributedString.Key : Any] = [:] 98 | objc_setAssociatedObject(self, &AssociatedKeys.attributes, newAttributes, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) 99 | return newAttributes 100 | } 101 | set { 102 | objc_setAssociatedObject(self, &AssociatedKeys.attributes, newValue, objc_AssociationPolicy.OBJC_ASSOCIATION_RETAIN_NONATOMIC) 103 | } 104 | } 105 | 106 | var foregroundColor: UIColor? { 107 | get { 108 | return attributes[NSAttributedString.Key.foregroundColor] as? UIColor 109 | } 110 | set { 111 | if let newValue = newValue { 112 | attributes.updateValue(newValue, forKey: NSAttributedString.Key.foregroundColor) 113 | } else { 114 | attributes.removeValue(forKey: NSAttributedString.Key.foregroundColor) 115 | } 116 | } 117 | } 118 | 119 | var backgroundColor: UIColor? { 120 | get { 121 | return attributes[NSAttributedString.Key.backgroundColor] as? UIColor 122 | } 123 | set { 124 | if let newValue = newValue { 125 | attributes.updateValue(newValue, forKey: NSAttributedString.Key.backgroundColor) 126 | } else { 127 | attributes.removeValue(forKey: NSAttributedString.Key.backgroundColor) 128 | } 129 | } 130 | } 131 | 132 | // Mark:- Font 133 | func font(size fontSize: CGFloat) -> UIFont? { 134 | if !loaded() { return nil } 135 | return UIFont(name: self.name, size: fontSize) 136 | } 137 | 138 | // MARK:- String 139 | func attributedString(size fontSize: CGFloat, attributes: [NSAttributedString.Key : Any]?) -> NSAttributedString? { 140 | guard let attributes = attributesWith(size: fontSize, attributes: attributes) else { return nil } 141 | return NSAttributedString(string: self.unicode, attributes: attributes) 142 | } 143 | 144 | func attributedString(size fontSize: CGFloat, foregroundColor: UIColor? = nil, backgroundColor: UIColor? = nil) -> NSAttributedString? { 145 | var attributesCombine: [NSAttributedString.Key : Any] = [:] 146 | if let foregroundColor = foregroundColor { 147 | attributesCombine.updateValue(foregroundColor, forKey: NSAttributedString.Key.foregroundColor) 148 | } 149 | if let backgroundColor = backgroundColor { 150 | attributesCombine.updateValue(backgroundColor, forKey: NSAttributedString.Key.backgroundColor) 151 | } 152 | return attributedString(size: fontSize, attributes: attributesCombine) 153 | } 154 | 155 | // MARK:- Image 156 | func image(size fontSize: CGFloat, attributes: [NSAttributedString.Key : Any]?) -> UIImage? { 157 | guard let imageString: NSAttributedString = attributedString(size: fontSize, attributes: attributes) else { return nil } 158 | let rect = imageString.boundingRect(with: CGSize(width: CGFloat(MAXFLOAT), height: fontSize), options: .usesLineFragmentOrigin, context: nil) 159 | let imageSize: CGSize = rect.size 160 | UIGraphicsBeginImageContextWithOptions(imageSize, false, UIScreen.main.scale) 161 | imageString.draw(in: rect) 162 | let image: UIImage? = UIGraphicsGetImageFromCurrentImageContext() 163 | UIGraphicsEndImageContext() 164 | return image 165 | } 166 | 167 | func image(size fontSize: CGFloat, foregroundColor: UIColor? = nil, backgroundColor: UIColor? = nil) -> UIImage? { 168 | var attributesCombine: [NSAttributedString.Key : Any] = [:] 169 | if let foregroundColor = foregroundColor { 170 | attributesCombine.updateValue(foregroundColor, forKey: NSAttributedString.Key.foregroundColor) 171 | } 172 | if let backgroundColor = backgroundColor { 173 | attributesCombine.updateValue(backgroundColor, forKey: NSAttributedString.Key.backgroundColor) 174 | } 175 | return image(size: fontSize, attributes: attributesCombine) 176 | } 177 | 178 | func image(size imageSize: CGSize, attributes: [NSAttributedString.Key : Any]?) -> UIImage? { 179 | guard let imageString: NSAttributedString = attributedString(size: 1, attributes: attributes) else { return nil } 180 | let rect = imageString.boundingRect(with: CGSize(width: CGFloat(MAXFLOAT), height: 1), options: .usesLineFragmentOrigin, context: nil) 181 | let widthScale = imageSize.width / rect.width 182 | let heightScale = imageSize.height / rect.height 183 | let scale = (widthScale < heightScale) ? widthScale : heightScale 184 | let scaledWidth = rect.width * scale 185 | let scaledHeight = rect.height * scale 186 | var anchorPoint = CGPoint.zero 187 | if widthScale < heightScale { 188 | anchorPoint.y = (imageSize.height - scaledHeight) / 2 189 | } else if widthScale > heightScale { 190 | anchorPoint.x = (imageSize.width - scaledWidth) / 2 191 | } 192 | var anchorRect = CGRect.zero 193 | anchorRect.origin = anchorPoint 194 | anchorRect.size.width = scaledWidth 195 | anchorRect.size.height = scaledHeight 196 | guard let imageStringScale: NSAttributedString = attributedString(size: scale, attributes: attributes) else { return nil } 197 | UIGraphicsBeginImageContextWithOptions(imageSize, false, UIScreen.main.scale) 198 | imageStringScale.draw(in: anchorRect) 199 | let image: UIImage? = UIGraphicsGetImageFromCurrentImageContext() 200 | UIGraphicsEndImageContext() 201 | return image 202 | } 203 | 204 | func image(size imageSize: CGSize, foregroundColor: UIColor? = nil, backgroundColor: UIColor? = nil) -> UIImage? { 205 | var attributesCombine: [NSAttributedString.Key : Any] = [:] 206 | if let foregroundColor = foregroundColor { 207 | attributesCombine.updateValue(foregroundColor, forKey: NSAttributedString.Key.foregroundColor) 208 | } 209 | if let backgroundColor = backgroundColor { 210 | attributesCombine.updateValue(backgroundColor, forKey: NSAttributedString.Key.backgroundColor) 211 | } 212 | return image(size: imageSize, attributes: attributesCombine) 213 | } 214 | } 215 | -------------------------------------------------------------------------------- /EFIconFont/Classes/ElusiveIcons/EFIconFontElusiveIcons.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EFIconFontElusiveIcons.swift 3 | // EFIconFont 4 | // 5 | // Created by EyreFree on 2019/3/20. 6 | // 7 | // Copyright (c) 2019 EyreFree 8 | // 9 | // Permission is hereby granted, free of charge, to any person obtaining a copy 10 | // of this software and associated documentation files (the "Software"), to deal 11 | // in the Software without restriction, including without limitation the rights 12 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the Software is 14 | // furnished to do so, subject to the following conditions: 15 | // 16 | // The above copyright notice and this permission notice shall be included in 17 | // all copies or substantial portions of the Software. 18 | // 19 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 25 | // THE SOFTWARE. 26 | 27 | import Foundation 28 | 29 | public extension EFIconFont { 30 | 31 | static let elusiveIcons = EFIconFontElusiveIcons.self 32 | } 33 | 34 | extension EFIconFontElusiveIcons: EFIconFontCaseIterableProtocol { 35 | 36 | public static var name: String { 37 | return "elusiveicons" 38 | } 39 | 40 | public var unicode: String { 41 | return self.rawValue 42 | } 43 | } 44 | 45 | public enum EFIconFontElusiveIcons: String { 46 | case zoomOut = "\u{e844}" 47 | case volumeOff = "\u{e843}" 48 | case zoomIn = "\u{e842}" 49 | case wrench = "\u{e841}" 50 | case wheelchair = "\u{e840}" 51 | case wordpress = "\u{e83f}" 52 | case wrenchAlt = "\u{e83e}" 53 | case youtube = "\u{e83d}" 54 | case warningSign = "\u{e83c}" 55 | case w3c = "\u{e83b}" 56 | case website = "\u{e83a}" 57 | case websiteAlt = "\u{e839}" 58 | case volumeUp = "\u{e838}" 59 | case volumeDown = "\u{e837}" 60 | case vkontakte = "\u{e836}" 61 | case vimeo = "\u{e835}" 62 | case viewMode = "\u{e834}" 63 | case viadeo = "\u{e833}" 64 | case videoAlt = "\u{e832}" 65 | case video = "\u{e831}" 66 | case videoChat = "\u{e830}" 67 | case user = "\u{e82f}" 68 | case usd = "\u{e82e}" 69 | case unlock = "\u{e82d}" 70 | case upload = "\u{e82c}" 71 | case universalAccess = "\u{e82b}" 72 | case twitter = "\u{e82a}" 73 | case unlockAlt = "\u{e829}" 74 | case tumblr = "\u{e828}" 75 | case trashAlt = "\u{e827}" 76 | case trash = "\u{e826}" 77 | case torso = "\u{e825}" 78 | case tint = "\u{e824}" 79 | case thumbsDown = "\u{e823}" 80 | case time = "\u{e822}" 81 | case thumbsUp = "\u{e821}" 82 | case timeAlt = "\u{e820}" 83 | case thList = "\u{e81f}" 84 | case textHeight = "\u{e81e}" 85 | case th = "\u{e81d}" 86 | case soundcloud = "\u{e81c}" 87 | case star = "\u{e81b}" 88 | case tasks = "\u{e81a}" 89 | case tag = "\u{e819}" 90 | case stumbleupon = "\u{e818}" 91 | case thLarge = "\u{e817}" 92 | case textWidth = "\u{e816}" 93 | case spotify = "\u{e815}" 94 | case stepForward = "\u{e814}" 95 | case starAlt = "\u{e813}" 96 | case tags = "\u{e812}" 97 | case starEmpty = "\u{e811}" 98 | case stopAlt = "\u{e810}" 99 | case skype = "\u{e80f}" 100 | case stackoverflow = "\u{e80e}" 101 | case removeCircle = "\u{e80d}" 102 | case slideshare = "\u{e80c}" 103 | case stop = "\u{e80b}" 104 | case shoppingCart = "\u{e80a}" 105 | case qrcode = "\u{e809}" 106 | case resizeVertical = "\u{e808}" 107 | case smiley = "\u{e807}" 108 | case stepBackward = "\u{e806}" 109 | case speaker = "\u{e805}" 110 | case smileyAlt = "\u{e804}" 111 | case quoteRight = "\u{e803}" 112 | case searchAlt = "\u{e802}" 113 | case search = "\u{e801}" 114 | case shoppingCartSign = "\u{e800}" 115 | case playCircle = "\u{e7ff}" 116 | case rss = "\u{e7fe}" 117 | case signal = "\u{e7fd}" 118 | case pinterest = "\u{e7fc}" 119 | case share = "\u{e7fb}" 120 | case road = "\u{e7fa}" 121 | case shareAlt = "\u{e7f9}" 122 | case scissors = "\u{e7f8}" 123 | case repeatAlt = "\u{e7f7}" 124 | case screenshot = "\u{e7f6}" 125 | case screen = "\u{e7f5}" 126 | case plusSign = "\u{e7f4}" 127 | case screenAlt = "\u{e7f3}" 128 | case reddit = "\u{e7f2}" 129 | case reverseAlt = "\u{e7f1}" 130 | case returnKey = "\u{e7f0}" 131 | case resizeSmall = "\u{e7ef}" 132 | case `repeat` = "\u{e7ee}" 133 | case quotes = "\u{e7ed}" 134 | case resizeHorizontal = "\u{e7ec}" 135 | case resizeFull = "\u{e7eb}" 136 | case retweet = "\u{e7ea}" 137 | case redux = "\u{e7e9}" 138 | case removeSign = "\u{e7e8}" 139 | case plurk = "\u{e7e7}" 140 | case paperClipAlt = "\u{e7e6}" 141 | case podcast = "\u{e7e5}" 142 | case hourglass = "\u{e7e4}" 143 | case photo = "\u{e7e3}" 144 | case quoteAlt = "\u{e7e2}" 145 | case remove = "\u{e7e1}" 146 | case picasa = "\u{e7e0}" 147 | case random = "\u{e7df}" 148 | case refresh = "\u{e7de}" 149 | case phoneAlt = "\u{e7dd}" 150 | case plurkAlt = "\u{e7dc}" 151 | case record = "\u{e7db}" 152 | case lock = "\u{e7da}" 153 | case mic = "\u{e7d9}" 154 | case pencilAlt = "\u{e7d8}" 155 | case path = "\u{e7d7}" 156 | case leaf = "\u{e7d6}" 157 | case questionSign = "\u{e7d5}" 158 | case hearingImpaired = "\u{e7d4}" 159 | case opensource = "\u{e7d3}" 160 | case okCircle = "\u{e7d2}" 161 | case question = "\u{e7d1}" 162 | case quoteRightAlt = "\u{e7d0}" 163 | case male = "\u{e7cf}" 164 | case plus = "\u{e7ce}" 165 | case heartAlt = "\u{e7cd}" 166 | case puzzle = "\u{e7cc}" 167 | case print = "\u{e7cb}" 168 | case playAlt = "\u{e7ca}" 169 | case myspace = "\u{e7c9}" 170 | case list = "\u{e7c8}" 171 | case play = "\u{e7c7}" 172 | case paperClip = "\u{e7c6}" 173 | case plane = "\u{e7c5}" 174 | case photoAlt = "\u{e7c4}" 175 | case person = "\u{e7c3}" 176 | case picture = "\u{e7c2}" 177 | case lastfm = "\u{e7c1}" 178 | case network = "\u{e7c0}" 179 | case phone = "\u{e7bf}" 180 | case off = "\u{e7be}" 181 | case minus = "\u{e7bd}" 182 | case pauseAlt = "\u{e7bc}" 183 | case laptop = "\u{e7bb}" 184 | case pencil = "\u{e7ba}" 185 | case pause = "\u{e7b9}" 186 | case mapMarker = "\u{e7b8}" 187 | case music = "\u{e7b7}" 188 | case okSign = "\u{e7b6}" 189 | case magic = "\u{e7b5}" 190 | case move = "\u{e7b4}" 191 | case handLeft = "\u{e7b3}" 192 | case ok = "\u{e7b2}" 193 | case italic = "\u{e7b1}" 194 | case livejournal = "\u{e7b0}" 195 | case micAlt = "\u{e7af}" 196 | case minusSign = "\u{e7ae}" 197 | case home = "\u{e7ad}" 198 | case lockAlt = "\u{e7ac}" 199 | case idea = "\u{e7ab}" 200 | case linkedin = "\u{e7aa}" 201 | case indentRight = "\u{e7a9}" 202 | case magnet = "\u{e7a8}" 203 | case guidedog = "\u{e7a7}" 204 | case mapMarkerAlt = "\u{e7a6}" 205 | case listAlt = "\u{e7a5}" 206 | case link = "\u{e7a4}" 207 | case inboxBox = "\u{e7a3}" 208 | case laptopAlt = "\u{e7a2}" 209 | case inbox = "\u{e7a1}" 210 | case instagram = "\u{e7a0}" 211 | case iphoneHome = "\u{e79f}" 212 | case lines = "\u{e79e}" 213 | case ideaAlt = "\u{e79d}" 214 | case key = "\u{e79c}" 215 | case handRight = "\u{e79b}" 216 | case globeAlt = "\u{e79a}" 217 | case hdd = "\u{e799}" 218 | case infoCircle = "\u{e798}" 219 | case homeAlt = "\u{e797}" 220 | case inboxAlt = "\u{e796}" 221 | case gbp = "\u{e795}" 222 | case indentLeft = "\u{e794}" 223 | case group = "\u{e793}" 224 | case graphAlt = "\u{e792}" 225 | case heart = "\u{e791}" 226 | case handDown = "\u{e790}" 227 | case heartEmpty = "\u{e78f}" 228 | case headphones = "\u{e78e}" 229 | case handUp = "\u{e78d}" 230 | case folderOpen = "\u{e78c}" 231 | case googleplus = "\u{e78b}" 232 | case groupAlt = "\u{e78a}" 233 | case github = "\u{e789}" 234 | case graph = "\u{e788}" 235 | case globe = "\u{e787}" 236 | case friendfeedRect = "\u{e786}" 237 | case cogs = "\u{e785}" 238 | case forwardAlt = "\u{e784}" 239 | case githubText = "\u{e783}" 240 | case flag = "\u{e782}" 241 | case glasses = "\u{e781}" 242 | case glass = "\u{e780}" 243 | case fileNew = "\u{e77f}" 244 | case fileEditAlt = "\u{e77e}" 245 | case friendfeed = "\u{e77d}" 246 | case fastForward = "\u{e77c}" 247 | case foursquare = "\u{e77b}" 248 | case gift = "\u{e77a}" 249 | case fullscreen = "\u{e779}" 250 | case facebook = "\u{e778}" 251 | case fontsize = "\u{e777}" 252 | case fork = "\u{e776}" 253 | case folderSign = "\u{e775}" 254 | case forward = "\u{e774}" 255 | case exclamationSign = "\u{e773}" 256 | case flickr = "\u{e772}" 257 | case font = "\u{e771}" 258 | case folder = "\u{e770}" 259 | case download = "\u{e76f}" 260 | case eyeClose = "\u{e76e}" 261 | case errorAlt = "\u{e76d}" 262 | case fire = "\u{e76c}" 263 | case folderClose = "\u{e76b}" 264 | case flagAlt = "\u{e76a}" 265 | case child = "\u{e769}" 266 | case circleArrowRight = "\u{e768}" 267 | case eject = "\u{e767}" 268 | case filter = "\u{e766}" 269 | case fileNewAlt = "\u{e765}" 270 | case fileEdit = "\u{e764}" 271 | case film = "\u{e763}" 272 | case file = "\u{e762}" 273 | case deviantart = "\u{e761}" 274 | case error = "\u{e760}" 275 | case compassAlt = "\u{e75f}" 276 | case fastBackward = "\u{e75e}" 277 | case female = "\u{e75d}" 278 | case dribbble = "\u{e75c}" 279 | case fileAlt = "\u{e75b}" 280 | case bulb = "\u{e75a}" 281 | case digg = "\u{e759}" 282 | case facetimeVideo = "\u{e758}" 283 | case eyeOpen = "\u{e757}" 284 | case css = "\u{e756}" 285 | case eur = "\u{e755}" 286 | case bookmarkEmpty = "\u{e754}" 287 | case envelopeAlt = "\u{e753}" 288 | case edit = "\u{e752}" 289 | case envelope = "\u{e751}" 290 | case behance = "\u{e750}" 291 | case cloud = "\u{e74f}" 292 | case commentAlt = "\u{e74e}" 293 | case cogAlt = "\u{e74d}" 294 | case compass = "\u{e74c}" 295 | case downloadAlt = "\u{e74b}" 296 | case cc = "\u{e74a}" 297 | case delicious = "\u{e749}" 298 | case chevronLeft = "\u{e748}" 299 | case dashboard = "\u{e747}" 300 | case comment = "\u{e746}" 301 | case creditCard = "\u{e745}" 302 | case caretDown = "\u{e744}" 303 | case circleArrowUp = "\u{e743}" 304 | case cog = "\u{e742}" 305 | case chevronRight = "\u{e741}" 306 | case circleArrowLeft = "\u{e740}" 307 | case cloudAlt = "\u{e73f}" 308 | case checkEmpty = "\u{e73e}" 309 | case chevronDown = "\u{e73d}" 310 | case caretRight = "\u{e73c}" 311 | case circleArrowDown = "\u{e73b}" 312 | case chevronUp = "\u{e73a}" 313 | case bullhorn = "\u{e739}" 314 | case broom = "\u{e738}" 315 | case barcode = "\u{e737}" 316 | case blogger = "\u{e736}" 317 | case calendarSign = "\u{e735}" 318 | case calendar = "\u{e734}" 319 | case check = "\u{e733}" 320 | case caretUp = "\u{e732}" 321 | case certificate = "\u{e731}" 322 | case car = "\u{e730}" 323 | case camera = "\u{e72f}" 324 | case braille = "\u{e72e}" 325 | case caretLeft = "\u{e72d}" 326 | case alignRight = "\u{e72c}" 327 | case briefcase = "\u{e72b}" 328 | case bold = "\u{e72a}" 329 | case banCircle = "\u{e729}" 330 | case book = "\u{e728}" 331 | case brush = "\u{e727}" 332 | case blind = "\u{e726}" 333 | case alignJustify = "\u{e725}" 334 | case bookmark = "\u{e724}" 335 | case arrowRight = "\u{e723}" 336 | case asl = "\u{e722}" 337 | case arrowUp = "\u{e721}" 338 | case backward = "\u{e720}" 339 | case bell = "\u{e71f}" 340 | case arrowDown = "\u{e71e}" 341 | case asterisk = "\u{e71d}" 342 | case alignLeft = "\u{e71c}" 343 | case addressBookAlt = "\u{e71b}" 344 | case adjust = "\u{e71a}" 345 | case alignCenter = "\u{e719}" 346 | case arrowLeft = "\u{e718}" 347 | case adjustAlt = "\u{e717}" 348 | case adult = "\u{e716}" 349 | case addressBook = "\u{e715}" 350 | } 351 | -------------------------------------------------------------------------------- /EFIconFont/Classes/FontAwesome/EFIconFontFontAwesomeBrands.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EFIconFontFontAwesomeBrands.swift 3 | // EFIconFont 4 | // 5 | // Created by EyreFree on 2019/3/20. 6 | // 7 | // Copyright (c) 2019 EyreFree 8 | // 9 | // Permission is hereby granted, free of charge, to any person obtaining a copy 10 | // of this software and associated documentation files (the "Software"), to deal 11 | // in the Software without restriction, including without limitation the rights 12 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the Software is 14 | // furnished to do so, subject to the following conditions: 15 | // 16 | // The above copyright notice and this permission notice shall be included in 17 | // all copies or substantial portions of the Software. 18 | // 19 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 25 | // THE SOFTWARE. 26 | 27 | import Foundation 28 | 29 | public extension EFIconFont { 30 | 31 | static let awesomeBrands = EFIconFontFontAwesomeBrands.self 32 | } 33 | 34 | extension EFIconFontFontAwesomeBrands: EFIconFontCaseIterableProtocol { 35 | 36 | public static var name: String { 37 | return "fontawesomebrands" 38 | } 39 | 40 | public var unicode: String { 41 | return self.rawValue 42 | } 43 | } 44 | 45 | public enum EFIconFontFontAwesomeBrands: String { 46 | case youtube = "\u{e8fb}" 47 | case zhihu = "\u{e8fa}" 48 | case youtubeSquare = "\u{e8f9}" 49 | case yarn = "\u{e8f8}" 50 | case yahoo = "\u{e8f7}" 51 | case yoast = "\u{e8f6}" 52 | case wpbeginner = "\u{e8f5}" 53 | case yelp = "\u{e8f4}" 54 | case wizardsOfTheCoast = "\u{e8f3}" 55 | case yammer = "\u{e8f2}" 56 | case yandex = "\u{e8f1}" 57 | case weibo = "\u{e8f0}" 58 | case yandexInternational = "\u{e8ef}" 59 | case xing = "\u{e8ee}" 60 | case wpressr = "\u{e8ed}" 61 | case xingSquare = "\u{e8ec}" 62 | case yCombinator = "\u{e8eb}" 63 | case wordpress = "\u{e8ea}" 64 | case wpforms = "\u{e8e9}" 65 | case wolfPackBattalion = "\u{e8e8}" 66 | case xbox = "\u{e8e7}" 67 | case wordpressSimple = "\u{e8e6}" 68 | case wpexplorer = "\u{e8e5}" 69 | case whatsapp = "\u{e8e4}" 70 | case wix = "\u{e8e3}" 71 | case windows = "\u{e8e2}" 72 | case wikipediaW = "\u{e8e1}" 73 | case whatsappSquare = "\u{e8e0}" 74 | case whmcs = "\u{e8df}" 75 | case weixin = "\u{e8de}" 76 | case weebly = "\u{e8dd}" 77 | case waze = "\u{e8dc}" 78 | case vuejs = "\u{e8db}" 79 | case vnv = "\u{e8da}" 80 | case vine = "\u{e8d9}" 81 | case vk = "\u{e8d8}" 82 | case vimeo = "\u{e8d7}" 83 | case vimeoV = "\u{e8d6}" 84 | case viber = "\u{e8d5}" 85 | case vimeoSquare = "\u{e8d4}" 86 | case ussunnah = "\u{e8d3}" 87 | case viadeoSquare = "\u{e8d2}" 88 | case viadeo = "\u{e8d1}" 89 | case viacoin = "\u{e8d0}" 90 | case usps = "\u{e8cf}" 91 | case thinkPeaks = "\u{e8ce}" 92 | case vaadin = "\u{e8cd}" 93 | case typo3 = "\u{e8cc}" 94 | case ups = "\u{e8cb}" 95 | case usb = "\u{e8ca}" 96 | case untappd = "\u{e8c9}" 97 | case uikit = "\u{e8c8}" 98 | case theRedYeti = "\u{e8c7}" 99 | case ubuntu = "\u{e8c6}" 100 | case uniregistry = "\u{e8c5}" 101 | case themeisle = "\u{e8c4}" 102 | case uber = "\u{e8c3}" 103 | case twitter = "\u{e8c2}" 104 | case tripadvisor = "\u{e8c1}" 105 | case twitch = "\u{e8c0}" 106 | case tumblr = "\u{e8bf}" 107 | case twitterSquare = "\u{e8be}" 108 | case tumblrSquare = "\u{e8bd}" 109 | case stripe = "\u{e8bc}" 110 | case trello = "\u{e8bb}" 111 | case tradeFederation = "\u{e8ba}" 112 | case tencentWeibo = "\u{e8b9}" 113 | case themeco = "\u{e8b8}" 114 | case speakerDeck = "\u{e8b7}" 115 | case stumbleuponCircle = "\u{e8b6}" 116 | case shopware = "\u{e8b5}" 117 | case telegramPlane = "\u{e8b4}" 118 | case teamspeak = "\u{e8b3}" 119 | case staylinked = "\u{e8b2}" 120 | case supple = "\u{e8b1}" 121 | case suse = "\u{e8b0}" 122 | case telegram = "\u{e8af}" 123 | case symfony = "\u{e8ae}" 124 | case salesforce = "\u{e8ad}" 125 | case snapchat = "\u{e8ac}" 126 | case stripeS = "\u{e8ab}" 127 | case stumbleupon = "\u{e8aa}" 128 | case superpowers = "\u{e8a9}" 129 | case stickerMule = "\u{e8a8}" 130 | case studiovinari = "\u{e8a7}" 131 | case steam = "\u{e8a6}" 132 | case speakap = "\u{e8a5}" 133 | case skype = "\u{e8a4}" 134 | case strava = "\u{e8a3}" 135 | case researchgate = "\u{e8a2}" 136 | case steamSquare = "\u{e8a1}" 137 | case steamSymbol = "\u{e8a0}" 138 | case sellsy = "\u{e89f}" 139 | case squarespace = "\u{e89e}" 140 | case stackExchange = "\u{e89d}" 141 | case readme = "\u{e89c}" 142 | case spotify = "\u{e89b}" 143 | case stackOverflow = "\u{e89a}" 144 | case soundcloud = "\u{e899}" 145 | case snapchatGhost = "\u{e898}" 146 | case slideshare = "\u{e897}" 147 | case skyatlas = "\u{e896}" 148 | case slackHash = "\u{e895}" 149 | case sourcetree = "\u{e894}" 150 | case snapchatSquare = "\u{e893}" 151 | case slack = "\u{e892}" 152 | case sketch = "\u{e891}" 153 | case simplybuilt = "\u{e890}" 154 | case sith = "\u{e88f}" 155 | case patreon = "\u{e88e}" 156 | case schlix = "\u{e88d}" 157 | case rocketchat = "\u{e88c}" 158 | case servicestack = "\u{e88b}" 159 | case shirtsinbulk = "\u{e88a}" 160 | case sistrix = "\u{e889}" 161 | case sass = "\u{e888}" 162 | case searchengin = "\u{e887}" 163 | case scribd = "\u{e886}" 164 | case redditAlien = "\u{e885}" 165 | case sellcast = "\u{e884}" 166 | case redhat = "\u{e883}" 167 | case resolving = "\u{e882}" 168 | case safari = "\u{e881}" 169 | case quora = "\u{e880}" 170 | case periscope = "\u{e87f}" 171 | case rev = "\u{e87e}" 172 | case rockrms = "\u{e87d}" 173 | case renren = "\u{e87c}" 174 | case replyd = "\u{e87b}" 175 | case reacteurope = "\u{e87a}" 176 | case playstation = "\u{e879}" 177 | case rebel = "\u{e878}" 178 | case redditSquare = "\u{e877}" 179 | case reddit = "\u{e876}" 180 | case opera = "\u{e875}" 181 | case redRiver = "\u{e874}" 182 | case piedPiperHat = "\u{e873}" 183 | case ravelry = "\u{e872}" 184 | case react = "\u{e871}" 185 | case rProject = "\u{e870}" 186 | case oldRepublic = "\u{e86f}" 187 | case page4 = "\u{e86e}" 188 | case pagelines = "\u{e86d}" 189 | case raspberryPi = "\u{e86c}" 190 | case pinterestSquare = "\u{e86b}" 191 | case qq = "\u{e86a}" 192 | case python = "\u{e869}" 193 | case pinterestP = "\u{e868}" 194 | case phabricator = "\u{e867}" 195 | case nutritionix = "\u{e866}" 196 | case productHunt = "\u{e865}" 197 | case piedPiperPp = "\u{e864}" 198 | case quinscape = "\u{e863}" 199 | case pushed = "\u{e862}" 200 | case piedPiper = "\u{e861}" 201 | case pinterest = "\u{e860}" 202 | case php = "\u{e85f}" 203 | case npm = "\u{e85e}" 204 | case node = "\u{e85d}" 205 | case phoenixSquadron = "\u{e85c}" 206 | case optinMonster = "\u{e85b}" 207 | case piedPiperAlt = "\u{e85a}" 208 | case phoenixFramework = "\u{e859}" 209 | case pennyArcade = "\u{e858}" 210 | case meetup = "\u{e857}" 211 | case hireAHelper = "\u{e856}" 212 | case paypal = "\u{e855}" 213 | case palfed = "\u{e854}" 214 | case osi = "\u{e853}" 215 | case mendeley = "\u{e852}" 216 | case mixcloud = "\u{e851}" 217 | case mailchimp = "\u{e850}" 218 | case medapps = "\u{e84f}" 219 | case opencart = "\u{e84e}" 220 | case markdown = "\u{e84d}" 221 | case keycdn = "\u{e84c}" 222 | case openid = "\u{e84b}" 223 | case odnoklassnikiSquare = "\u{e84a}" 224 | case magento = "\u{e849}" 225 | case odnoklassniki = "\u{e848}" 226 | case nimblr = "\u{e847}" 227 | case monero = "\u{e846}" 228 | case linode = "\u{e845}" 229 | case line = "\u{e844}" 230 | case joomla = "\u{e843}" 231 | case nintendoSwitch = "\u{e842}" 232 | case ns8 = "\u{e841}" 233 | case medrt = "\u{e840}" 234 | case napster = "\u{e83f}" 235 | case neos = "\u{e83e}" 236 | case nodeJs = "\u{e83d}" 237 | case itunes = "\u{e83c}" 238 | case korvue = "\u{e83b}" 239 | case microsoft = "\u{e83a}" 240 | case mizuni = "\u{e839}" 241 | case modx = "\u{e838}" 242 | case megaport = "\u{e837}" 243 | case mix = "\u{e836}" 244 | case medium = "\u{e835}" 245 | case mandalorian = "\u{e834}" 246 | case galacticSenate = "\u{e833}" 247 | case lastfm = "\u{e832}" 248 | case mediumM = "\u{e831}" 249 | case mastodon = "\u{e830}" 250 | case hotjar = "\u{e82f}" 251 | case maxcdn = "\u{e82e}" 252 | case jsfiddle = "\u{e82d}" 253 | case linux = "\u{e82c}" 254 | case lyft = "\u{e82b}" 255 | case linkedinIn = "\u{e82a}" 256 | case laravel = "\u{e829}" 257 | case leanpub = "\u{e828}" 258 | case jenkins = "\u{e827}" 259 | case linkedin = "\u{e826}" 260 | case less = "\u{e825}" 261 | case lastfmSquare = "\u{e824}" 262 | case kickstarterK = "\u{e823}" 263 | case kickstarter = "\u{e822}" 264 | case kaggle = "\u{e821}" 265 | case keybase = "\u{e820}" 266 | case jsSquare = "\u{e81f}" 267 | case js = "\u{e81e}" 268 | case ioxhost = "\u{e81d}" 269 | case html5 = "\u{e81c}" 270 | case jira = "\u{e81b}" 271 | case joget = "\u{e81a}" 272 | case java = "\u{e819}" 273 | case itchIo = "\u{e818}" 274 | case grunt = "\u{e817}" 275 | case jediOrder = "\u{e816}" 276 | case intercom = "\u{e815}" 277 | case itunesNote = "\u{e814}" 278 | case internetExplorer = "\u{e813}" 279 | case imdb = "\u{e812}" 280 | case invision = "\u{e811}" 281 | case hubspot = "\u{e810}" 282 | case instagram = "\u{e80f}" 283 | case hooli = "\u{e80e}" 284 | case gulp = "\u{e80d}" 285 | case houzz = "\u{e80c}" 286 | case hackerNews = "\u{e80b}" 287 | case hips = "\u{e80a}" 288 | case hornbill = "\u{e809}" 289 | case hackerrank = "\u{e808}" 290 | case grav = "\u{e807}" 291 | case hackerNewsSquare = "\u{e806}" 292 | case gripfire = "\u{e805}" 293 | case googlePlay = "\u{e804}" 294 | case gratipay = "\u{e803}" 295 | case googleWallet = "\u{e802}" 296 | case googlePlus = "\u{e801}" 297 | case googlePlusG = "\u{e800}" 298 | case google = "\u{e7ff}" 299 | case goodreads = "\u{e7fe}" 300 | case gitkraken = "\u{e7fd}" 301 | case googlePlusSquare = "\u{e7fc}" 302 | case glide = "\u{e7fb}" 303 | case ggCircle = "\u{e7fa}" 304 | case gitlab = "\u{e7f9}" 305 | case googleDrive = "\u{e7f8}" 306 | case freeCodeCamp = "\u{e7f7}" 307 | case goodreadsG = "\u{e7f6}" 308 | case gofore = "\u{e7f5}" 309 | case githubSquare = "\u{e7f4}" 310 | case glideG = "\u{e7f3}" 311 | case gitter = "\u{e7f2}" 312 | case getPocket = "\u{e7f1}" 313 | case creativeCommonsShare = "\u{e7f0}" 314 | case github = "\u{e7ef}" 315 | case githubAlt = "\u{e7ee}" 316 | case fortAwesome = "\u{e7ed}" 317 | case git = "\u{e7ec}" 318 | case etsy = "\u{e7eb}" 319 | case forumbee = "\u{e7ea}" 320 | case fulcrum = "\u{e7e9}" 321 | case gitSquare = "\u{e7e8}" 322 | case fortAwesomeAlt = "\u{e7e7}" 323 | case galacticRepublic = "\u{e7e6}" 324 | case gg = "\u{e7e5}" 325 | case fontAwesomeLogoFull = "\u{e7e4}" 326 | case fontAwesomeFlag = "\u{e7e3}" 327 | case freebsd = "\u{e7e2}" 328 | case criticalRole = "\u{e7e1}" 329 | case foursquare = "\u{e7e0}" 330 | case fontAwesomeAlt = "\u{e7df}" 331 | case fonticons = "\u{e7de}" 332 | case fontAwesome = "\u{e7dd}" 333 | case flickr = "\u{e7dc}" 334 | case facebookMessenger = "\u{e7db}" 335 | case fonticonsFi = "\u{e7da}" 336 | case fly = "\u{e7d9}" 337 | case fedora = "\u{e7d8}" 338 | case firefox = "\u{e7d7}" 339 | case firstOrderAlt = "\u{e7d6}" 340 | case firstdraft = "\u{e7d5}" 341 | case flipboard = "\u{e7d4}" 342 | case firstOrder = "\u{e7d3}" 343 | case empire = "\u{e7d2}" 344 | case fedex = "\u{e7d1}" 345 | case ello = "\u{e7d0}" 346 | case facebook = "\u{e7cf}" 347 | case figma = "\u{e7ce}" 348 | case facebookF = "\u{e7cd}" 349 | case expeditedssl = "\u{e7cc}" 350 | case fantasyFlightGames = "\u{e7cb}" 351 | case facebookSquare = "\u{e7ca}" 352 | case discord = "\u{e7c9}" 353 | case envira = "\u{e7c8}" 354 | case ethereum = "\u{e7c7}" 355 | case drupal = "\u{e7c6}" 356 | case evernote = "\u{e7c5}" 357 | case erlang = "\u{e7c4}" 358 | case earlybirds = "\u{e7c3}" 359 | case elementor = "\u{e7c2}" 360 | case discourse = "\u{e7c1}" 361 | case ember = "\u{e7c0}" 362 | case dAndDBeyond = "\u{e7bf}" 363 | case ebay = "\u{e7be}" 364 | case edge = "\u{e7bd}" 365 | case dribbbleSquare = "\u{e7bc}" 366 | case creativeCommonsPdAlt = "\u{e7bb}" 367 | case dAndD = "\u{e7ba}" 368 | case dyalog = "\u{e7b9}" 369 | case dropbox = "\u{e7b8}" 370 | case dochub = "\u{e7b7}" 371 | case dribbble = "\u{e7b6}" 372 | case draft2digital = "\u{e7b5}" 373 | case centercode = "\u{e7b4}" 374 | case deviantart = "\u{e7b3}" 375 | case digitalOcean = "\u{e7b2}" 376 | case docker = "\u{e7b1}" 377 | case dhl = "\u{e7b0}" 378 | case digg = "\u{e7af}" 379 | case creativeCommons = "\u{e7ae}" 380 | case deploydog = "\u{e7ad}" 381 | case deskpro = "\u{e7ac}" 382 | case dev = "\u{e7ab}" 383 | case diaspora = "\u{e7aa}" 384 | case css3 = "\u{e7a9}" 385 | case dashcube = "\u{e7a8}" 386 | case delicious = "\u{e7a7}" 387 | case creativeCommonsRemix = "\u{e7a6}" 388 | case ccDinersClub = "\u{e7a5}" 389 | case chrome = "\u{e7a4}" 390 | case creativeCommonsSampling = "\u{e7a3}" 391 | case bootstrap = "\u{e7a2}" 392 | case contao = "\u{e7a1}" 393 | case creativeCommonsNd = "\u{e7a0}" 394 | case cuttlefish = "\u{e79f}" 395 | case ccAmazonPay = "\u{e79e}" 396 | case css3Alt = "\u{e79d}" 397 | case creativeCommonsSa = "\u{e79c}" 398 | case creativeCommonsZero = "\u{e79b}" 399 | case connectdevelop = "\u{e79a}" 400 | case creativeCommonsNcJp = "\u{e799}" 401 | case cloudversify = "\u{e798}" 402 | case creativeCommonsNcEu = "\u{e797}" 403 | case creativeCommonsSamplingPlus = "\u{e796}" 404 | case cpanel = "\u{e795}" 405 | case creativeCommonsPd = "\u{e794}" 406 | case cloudsmith = "\u{e793}" 407 | case confluence = "\u{e792}" 408 | case creativeCommonsNc = "\u{e791}" 409 | case codiepie = "\u{e790}" 410 | case ccPaypal = "\u{e78f}" 411 | case ccMastercard = "\u{e78e}" 412 | case creativeCommonsBy = "\u{e78d}" 413 | case chromecast = "\u{e78c}" 414 | case ccAmex = "\u{e78b}" 415 | case codepen = "\u{e78a}" 416 | case ccDiscover = "\u{e789}" 417 | case centos = "\u{e788}" 418 | case ccVisa = "\u{e787}" 419 | case cloudscale = "\u{e786}" 420 | case buysellads = "\u{e785}" 421 | case ccStripe = "\u{e784}" 422 | case btc = "\u{e783}" 423 | case blogger = "\u{e782}" 424 | case bitcoin = "\u{e781}" 425 | case buromobelexperte = "\u{e780}" 426 | case ccJcb = "\u{e77f}" 427 | case blackTie = "\u{e77e}" 428 | case ccApplePay = "\u{e77d}" 429 | case canadianMapleLeaf = "\u{e77c}" 430 | case bluetoothB = "\u{e77b}" 431 | case bluetooth = "\u{e77a}" 432 | case bloggerB = "\u{e779}" 433 | case aws = "\u{e778}" 434 | case avianex = "\u{e777}" 435 | case buffer = "\u{e776}" 436 | case behanceSquare = "\u{e775}" 437 | case battleNet = "\u{e774}" 438 | case bitbucket = "\u{e773}" 439 | case blackberry = "\u{e772}" 440 | case behance = "\u{e771}" 441 | case bity = "\u{e770}" 442 | case angrycreative = "\u{e76f}" 443 | case atlassian = "\u{e76e}" 444 | case bimobject = "\u{e76d}" 445 | case aviato = "\u{e76c}" 446 | case autoprefixer = "\u{e76b}" 447 | case asymmetrik = "\u{e76a}" 448 | case bandcamp = "\u{e769}" 449 | case applePay = "\u{e768}" 450 | case audible = "\u{e767}" 451 | case appStore = "\u{e766}" 452 | case apple = "\u{e765}" 453 | case artstation = "\u{e764}" 454 | case angellist = "\u{e763}" 455 | case apper = "\u{e762}" 456 | case appStoreIos = "\u{e761}" 457 | case amazonPay = "\u{e760}" 458 | case angular = "\u{e75f}" 459 | case amazon = "\u{e75e}" 460 | case algolia = "\u{e75d}" 461 | case alipay = "\u{e75c}" 462 | case amilia = "\u{e75b}" 463 | case android = "\u{e75a}" 464 | case adversal = "\u{e759}" 465 | case acquisitionsIncorporated = "\u{e758}" 466 | case affiliatetheme = "\u{e757}" 467 | case _500px = "\u{e756}" 468 | case airbnb = "\u{e755}" 469 | case accessibleIcon = "\u{e754}" 470 | case adn = "\u{e753}" 471 | case adobe = "\u{e752}" 472 | case accusoft = "\u{e751}" 473 | } 474 | -------------------------------------------------------------------------------- /EFIconFont/Classes/FontAwesome/EFIconFontFontAwesomeRegular.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EFIconFontFontAwesomeRegular.swift 3 | // EFIconFont 4 | // 5 | // Created by EyreFree on 2019/3/20. 6 | // 7 | // Copyright (c) 2019 EyreFree 8 | // 9 | // Permission is hereby granted, free of charge, to any person obtaining a copy 10 | // of this software and associated documentation files (the "Software"), to deal 11 | // in the Software without restriction, including without limitation the rights 12 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the Software is 14 | // furnished to do so, subject to the following conditions: 15 | // 16 | // The above copyright notice and this permission notice shall be included in 17 | // all copies or substantial portions of the Software. 18 | // 19 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 25 | // THE SOFTWARE. 26 | 27 | import Foundation 28 | 29 | public extension EFIconFont { 30 | 31 | static let awesomeRegular = EFIconFontFontAwesomeRegular.self 32 | } 33 | 34 | extension EFIconFontFontAwesomeRegular: EFIconFontCaseIterableProtocol { 35 | 36 | public static var name: String { 37 | return "fontawesomeregular" 38 | } 39 | 40 | public var unicode: String { 41 | return self.rawValue 42 | } 43 | } 44 | 45 | public enum EFIconFontFontAwesomeRegular: String { 46 | case windowRestore = "\u{e847}" 47 | case smileBeam = "\u{e846}" 48 | case snowflake = "\u{e845}" 49 | case trashAlt = "\u{e844}" 50 | case sun = "\u{e843}" 51 | case windowClose = "\u{e842}" 52 | case sadTear = "\u{e841}" 53 | case questionCircle = "\u{e840}" 54 | case idBadge = "\u{e83f}" 55 | case windowMaximize = "\u{e83e}" 56 | case windowMinimize = "\u{e83d}" 57 | case thumbsUp = "\u{e83c}" 58 | case timesCircle = "\u{e83b}" 59 | case star = "\u{e83a}" 60 | case userCircle = "\u{e839}" 61 | case handPointLeft = "\u{e838}" 62 | case objectGroup = "\u{e837}" 63 | case surprise = "\u{e836}" 64 | case user = "\u{e835}" 65 | case tired = "\u{e834}" 66 | case thumbsDown = "\u{e833}" 67 | case pauseCircle = "\u{e832}" 68 | case mehRollingEyes = "\u{e831}" 69 | case smileWink = "\u{e830}" 70 | case stickyNote = "\u{e82f}" 71 | case stopCircle = "\u{e82e}" 72 | case lemon = "\u{e82d}" 73 | case square = "\u{e82c}" 74 | case plusSquare = "\u{e82b}" 75 | case save = "\u{e82a}" 76 | case smile = "\u{e829}" 77 | case starHalf = "\u{e828}" 78 | case minusSquare = "\u{e827}" 79 | case shareSquare = "\u{e826}" 80 | case registered = "\u{e825}" 81 | case objectUngroup = "\u{e824}" 82 | case moneyBillAlt = "\u{e823}" 83 | case kissWinkHeart = "\u{e822}" 84 | case playCircle = "\u{e821}" 85 | case sadCry = "\u{e820}" 86 | case listAlt = "\u{e81f}" 87 | case paperPlane = "\u{e81e}" 88 | case grinTongueSquint = "\u{e81d}" 89 | case newspaper = "\u{e81c}" 90 | case images = "\u{e81b}" 91 | case moon = "\u{e81a}" 92 | case flag = "\u{e819}" 93 | case meh = "\u{e818}" 94 | case map = "\u{e817}" 95 | case lifeRing = "\u{e816}" 96 | case lightbulb = "\u{e815}" 97 | case mehBlank = "\u{e814}" 98 | case handSpock = "\u{e813}" 99 | case handScissors = "\u{e812}" 100 | case heart = "\u{e811}" 101 | case kiss = "\u{e810}" 102 | case idCard = "\u{e80f}" 103 | case laughWink = "\u{e80e}" 104 | case keyboard = "\u{e80d}" 105 | case fileAudio = "\u{e80c}" 106 | case laughSquint = "\u{e80b}" 107 | case laugh = "\u{e80a}" 108 | case laughBeam = "\u{e809}" 109 | case kissBeam = "\u{e808}" 110 | case handshake = "\u{e807}" 111 | case handRock = "\u{e806}" 112 | case hospital = "\u{e805}" 113 | case handPointer = "\u{e804}" 114 | case handPaper = "\u{e803}" 115 | case image = "\u{e802}" 116 | case hourglass = "\u{e801}" 117 | case hdd = "\u{e800}" 118 | case handPointRight = "\u{e7ff}" 119 | case handPeace = "\u{e7fe}" 120 | case handPointUp = "\u{e7fd}" 121 | case handPointDown = "\u{e7fc}" 122 | case grinTongueWink = "\u{e7fb}" 123 | case grinWink = "\u{e7fa}" 124 | case grinSquint = "\u{e7f9}" 125 | case grinStars = "\u{e7f8}" 126 | case handLizard = "\u{e7f7}" 127 | case grinTongue = "\u{e7f6}" 128 | case grin = "\u{e7f5}" 129 | case grinTears = "\u{e7f4}" 130 | case grinHearts = "\u{e7f3}" 131 | case grimace = "\u{e7f2}" 132 | case frown = "\u{e7f1}" 133 | case fontAwesomeLogoFull = "\u{e7f0}" 134 | case grinBeam = "\u{e7ef}" 135 | case grinBeamSweat = "\u{e7ee}" 136 | case grinAlt = "\u{e7ed}" 137 | case grinSquintTears = "\u{e7ec}" 138 | case futbol = "\u{e7eb}" 139 | case gem = "\u{e7ea}" 140 | case folder = "\u{e7e9}" 141 | case frownOpen = "\u{e7e8}" 142 | case fileImage = "\u{e7e7}" 143 | case flushed = "\u{e7e6}" 144 | case envelope = "\u{e7e5}" 145 | case folderOpen = "\u{e7e4}" 146 | case fileWord = "\u{e7e3}" 147 | case envelopeOpen = "\u{e7e2}" 148 | case fileVideo = "\u{e7e1}" 149 | case fileCode = "\u{e7e0}" 150 | case filePdf = "\u{e7df}" 151 | case copy = "\u{e7de}" 152 | case file = "\u{e7dd}" 153 | case filePowerpoint = "\u{e7dc}" 154 | case fileExcel = "\u{e7db}" 155 | case fileAlt = "\u{e7da}" 156 | case eye = "\u{e7d9}" 157 | case eyeSlash = "\u{e7d8}" 158 | case comments = "\u{e7d7}" 159 | case closedCaptioning = "\u{e7d6}" 160 | case fileArchive = "\u{e7d5}" 161 | case dotCircle = "\u{e7d4}" 162 | case checkCircle = "\u{e7d3}" 163 | case copyright = "\u{e7d2}" 164 | case dizzy = "\u{e7d1}" 165 | case comment = "\u{e7d0}" 166 | case edit = "\u{e7cf}" 167 | case creditCard = "\u{e7ce}" 168 | case commentAlt = "\u{e7cd}" 169 | case compass = "\u{e7cc}" 170 | case caretSquareDown = "\u{e7cb}" 171 | case commentDots = "\u{e7ca}" 172 | case checkSquare = "\u{e7c9}" 173 | case caretSquareRight = "\u{e7c8}" 174 | case clipboard = "\u{e7c7}" 175 | case caretSquareUp = "\u{e7c6}" 176 | case clone = "\u{e7c5}" 177 | case clock = "\u{e7c4}" 178 | case calendarAlt = "\u{e7c3}" 179 | case calendar = "\u{e7c2}" 180 | case building = "\u{e7c1}" 181 | case circle = "\u{e7c0}" 182 | case caretSquareLeft = "\u{e7bf}" 183 | case chartBar = "\u{e7be}" 184 | case calendarPlus = "\u{e7bd}" 185 | case bellSlash = "\u{e7bc}" 186 | case calendarMinus = "\u{e7bb}" 187 | case calendarCheck = "\u{e7ba}" 188 | case arrowAltCircleRight = "\u{e7b9}" 189 | case calendarTimes = "\u{e7b8}" 190 | case bell = "\u{e7b7}" 191 | case arrowAltCircleUp = "\u{e7b6}" 192 | case bookmark = "\u{e7b5}" 193 | case angry = "\u{e7b4}" 194 | case addressCard = "\u{e7b3}" 195 | case arrowAltCircleLeft = "\u{e7b2}" 196 | case arrowAltCircleDown = "\u{e7b1}" 197 | case addressBook = "\u{e7b0}" 198 | } 199 | -------------------------------------------------------------------------------- /EFIconFont/Classes/Meteocons/EFIconFontMeteocons.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EFIconFontMeteocons.swift 3 | // EFIconFont 4 | // 5 | // Created by EyreFree on 2019/3/20. 6 | // 7 | // Copyright (c) 2019 EyreFree 8 | // 9 | // Permission is hereby granted, free of charge, to any person obtaining a copy 10 | // of this software and associated documentation files (the "Software"), to deal 11 | // in the Software without restriction, including without limitation the rights 12 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the Software is 14 | // furnished to do so, subject to the following conditions: 15 | // 16 | // The above copyright notice and this permission notice shall be included in 17 | // all copies or substantial portions of the Software. 18 | // 19 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 25 | // THE SOFTWARE. 26 | 27 | import Foundation 28 | 29 | public extension EFIconFont { 30 | 31 | static let meteocons = EFIconFontMeteocons.self 32 | } 33 | 34 | extension EFIconFontMeteocons: EFIconFontCaseIterableProtocol { 35 | 36 | public static var name: String { 37 | return "meteocons" 38 | } 39 | 40 | public var unicode: String { 41 | return self.rawValue 42 | } 43 | } 44 | 45 | public enum EFIconFontMeteocons: String { 46 | case _38 = "\u{eac1}" 47 | case _35 = "\u{eac0}" 48 | case _44 = "\u{eabf}" 49 | case _46 = "\u{eabe}" 50 | case _39 = "\u{eabd}" 51 | case _40 = "\u{eabc}" 52 | case _47 = "\u{eabb}" 53 | case _24 = "\u{eaba}" 54 | case _28 = "\u{eab9}" 55 | case _32 = "\u{eab8}" 56 | case _45 = "\u{eab7}" 57 | case _26 = "\u{eab6}" 58 | case _42 = "\u{eab5}" 59 | case _41 = "\u{eab4}" 60 | case _29 = "\u{eab3}" 61 | case _36 = "\u{eab2}" 62 | case _43 = "\u{eab1}" 63 | case _37 = "\u{eab0}" 64 | case _23 = "\u{eaaf}" 65 | case _21 = "\u{eaae}" 66 | case _25 = "\u{eaad}" 67 | case _34 = "\u{eaac}" 68 | case _30 = "\u{eaab}" 69 | case _17 = "\u{eaaa}" 70 | case _22 = "\u{eaa9}" 71 | case _33 = "\u{eaa8}" 72 | case _27 = "\u{eaa7}" 73 | case _11 = "\u{eaa6}" 74 | case _31 = "\u{eaa5}" 75 | case _15 = "\u{eaa4}" 76 | case _13 = "\u{eaa3}" 77 | case _14 = "\u{eaa2}" 78 | case _19 = "\u{eaa1}" 79 | case _8 = "\u{eaa0}" 80 | case _4 = "\u{ea9f}" 81 | case _9 = "\u{ea9e}" 82 | case _20 = "\u{ea9d}" 83 | case _16 = "\u{ea9c}" 84 | case _18 = "\u{ea9b}" 85 | case _5 = "\u{ea9a}" 86 | case _2 = "\u{ea99}" 87 | case _7 = "\u{ea98}" 88 | case _12 = "\u{ea97}" 89 | case _10 = "\u{ea96}" 90 | case _3 = "\u{ea95}" 91 | case _1 = "\u{ea94}" 92 | case _6 = "\u{ea93}" 93 | } 94 | -------------------------------------------------------------------------------- /EFIconFont/Classes/MetrizeIcons/EFIconFontMetrizeIcons.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EFIconFontMetrizeIcons.swift 3 | // EFIconFont 4 | // 5 | // Created by EyreFree on 2019/3/20. 6 | // 7 | // Copyright (c) 2019 EyreFree 8 | // 9 | // Permission is hereby granted, free of charge, to any person obtaining a copy 10 | // of this software and associated documentation files (the "Software"), to deal 11 | // in the Software without restriction, including without limitation the rights 12 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the Software is 14 | // furnished to do so, subject to the following conditions: 15 | // 16 | // The above copyright notice and this permission notice shall be included in 17 | // all copies or substantial portions of the Software. 18 | // 19 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 25 | // THE SOFTWARE. 26 | 27 | import Foundation 28 | 29 | public extension EFIconFont { 30 | 31 | static let metrizeIcons = EFIconFontMetrizeIcons.self 32 | } 33 | 34 | extension EFIconFontMetrizeIcons: EFIconFontCaseIterableProtocol { 35 | 36 | public static var name: String { 37 | return "metrizeicons" 38 | } 39 | 40 | public var unicode: String { 41 | return self.rawValue 42 | } 43 | } 44 | 45 | public enum EFIconFontMetrizeIcons: String { 46 | case yen = "\u{eb8a}" 47 | case wind = "\u{eb89}" 48 | case threePoints = "\u{eb88}" 49 | case wireframeGlobe = "\u{eb87}" 50 | case textCenter = "\u{eb86}" 51 | case waves = "\u{eb85}" 52 | case userRemove = "\u{eb84}" 53 | case sos = "\u{eb83}" 54 | case wifi = "\u{eb82}" 55 | case viewport = "\u{eb81}" 56 | case upload = "\u{eb80}" 57 | case user = "\u{eb7f}" 58 | case uploadSelectionCircle = "\u{eb7e}" 59 | case threePointsTop = "\u{eb7d}" 60 | case userAdd = "\u{eb7c}" 61 | case viewportVideo = "\u{eb7b}" 62 | case userBan = "\u{eb7a}" 63 | case underline = "\u{eb79}" 64 | case textWidth = "\u{eb78}" 65 | case uploadSelection = "\u{eb77}" 66 | case textNormal = "\u{eb76}" 67 | case triplePoints = "\u{eb75}" 68 | case topBottom = "\u{eb74}" 69 | case textSizeReduce = "\u{eb73}" 70 | case textSizeUpper = "\u{eb72}" 71 | case threePointsBottom = "\u{eb71}" 72 | case telephone = "\u{eb70}" 73 | case sunshine = "\u{eb6f}" 74 | case textJustifyRight = "\u{eb6e}" 75 | case textJustifyLeft = "\u{eb6d}" 76 | case textParagraph = "\u{eb6c}" 77 | case textJustifyCenter = "\u{eb6b}" 78 | case textAlignRight = "\u{eb6a}" 79 | case socialWordpress = "\u{eb69}" 80 | case textBold = "\u{eb68}" 81 | case textHeight = "\u{eb67}" 82 | case sun = "\u{eb66}" 83 | case textAlignLeft = "\u{eb65}" 84 | case socialYoutube = "\u{eb64}" 85 | case socialLastFm = "\u{eb63}" 86 | case speed = "\u{eb62}" 87 | case stop = "\u{eb61}" 88 | case soundOn = "\u{eb60}" 89 | case socialVirb = "\u{eb5f}" 90 | case socialGooglePlus = "\u{eb5e}" 91 | case star = "\u{eb5d}" 92 | case socialYelp = "\u{eb5c}" 93 | case soundOff = "\u{eb5b}" 94 | case socialYahoo = "\u{eb5a}" 95 | case socialVimeo = "\u{eb59}" 96 | case socialZerply = "\u{eb58}" 97 | case socialGithub = "\u{eb57}" 98 | case socialTwitter = "\u{eb56}" 99 | case socialPinterest = "\u{eb55}" 100 | case socialPhotobucket = "\u{eb54}" 101 | case socialSoundcloud = "\u{eb53}" 102 | case socialSkype = "\u{eb52}" 103 | case socialBebo = "\u{eb51}" 104 | case socialViddler = "\u{eb50}" 105 | case socialPaypal = "\u{eb4f}" 106 | case socialStumbleupon = "\u{eb4e}" 107 | case socialTumblr = "\u{eb4d}" 108 | case socialQuora = "\u{eb4c}" 109 | case settings = "\u{eb4b}" 110 | case socialDribbble = "\u{eb4a}" 111 | case socialSharethis = "\u{eb49}" 112 | case socialLinkedin = "\u{eb48}" 113 | case socialEmail = "\u{eb47}" 114 | case socialMyspace = "\u{eb46}" 115 | case socialDigg = "\u{eb45}" 116 | case socialFlickr = "\u{eb44}" 117 | case socialEnvato = "\u{eb43}" 118 | case socialGrooveshark = "\u{eb42}" 119 | case socialFacebook = "\u{eb41}" 120 | case social500px = "\u{eb40}" 121 | case socialForrst = "\u{eb3f}" 122 | case socialBehance = "\u{eb3e}" 123 | case slidersVertical = "\u{eb3d}" 124 | case socialEvernote = "\u{eb3c}" 125 | case socialDeviantart = "\u{eb3b}" 126 | case signMale = "\u{eb3a}" 127 | case shield = "\u{eb39}" 128 | case socialBlogger = "\u{eb38}" 129 | case snow = "\u{eb37}" 130 | case podcast = "\u{eb36}" 131 | case selectSquare = "\u{eb35}" 132 | case selectCircle = "\u{eb34}" 133 | case socialAddthis = "\u{eb33}" 134 | case retweet = "\u{eb32}" 135 | case sliders = "\u{eb31}" 136 | case numberTwo = "\u{eb30}" 137 | case signFemale = "\u{eb2f}" 138 | case setting = "\u{eb2e}" 139 | case scale = "\u{eb2d}" 140 | case pigMoney = "\u{eb2c}" 141 | case locked = "\u{eb2b}" 142 | case previousFastStep = "\u{eb2a}" 143 | case rec = "\u{eb29}" 144 | case rules = "\u{eb28}" 145 | case reportComment = "\u{eb27}" 146 | case markerPoints = "\u{eb26}" 147 | case search = "\u{eb25}" 148 | case refresh = "\u{eb24}" 149 | case question = "\u{eb23}" 150 | case nextFastStep = "\u{eb22}" 151 | case pin = "\u{eb21}" 152 | case numberZero = "\u{eb20}" 153 | case pounds = "\u{eb1f}" 154 | case rss = "\u{eb1e}" 155 | case random = "\u{eb1d}" 156 | case lineThrough = "\u{eb1c}" 157 | case quote = "\u{eb1b}" 158 | case pause = "\u{eb1a}" 159 | case numberThree = "\u{eb19}" 160 | case prevStep = "\u{eb18}" 161 | case paperclipOblique = "\u{eb17}" 162 | case plus = "\u{eb16}" 163 | case play = "\u{eb15}" 164 | case optionsSettings = "\u{eb14}" 165 | case numberFour = "\u{eb13}" 166 | case pinMap = "\u{eb12}" 167 | case off = "\u{eb11}" 168 | case officine = "\u{eb10}" 169 | case paperclip = "\u{eb0f}" 170 | case officine2 = "\u{eb0e}" 171 | case numberFive = "\u{eb0d}" 172 | case numberSix = "\u{eb0c}" 173 | case numberNine = "\u{eb0b}" 174 | case numberOne = "\u{eb0a}" 175 | case nextStep = "\u{eb09}" 176 | case numberSeven = "\u{eb08}" 177 | case markerAdd = "\u{eb07}" 178 | case numberEight = "\u{eb06}" 179 | case minus = "\u{eb05}" 180 | case map = "\u{eb04}" 181 | case locationMaps = "\u{eb03}" 182 | case markerMinus = "\u{eb02}" 183 | case music = "\u{eb01}" 184 | case multiBorders = "\u{eb00}" 185 | case magnet = "\u{eaff}" 186 | case marker = "\u{eafe}" 187 | case maleSymbol = "\u{eafd}" 188 | case chartDown = "\u{eafc}" 189 | case loginLockRefresh = "\u{eafb}" 190 | case mailbox = "\u{eafa}" 191 | case linkUrl = "\u{eaf9}" 192 | case listSquare = "\u{eaf8}" 193 | case likeUpload = "\u{eaf7}" 194 | case magicWand = "\u{eaf6}" 195 | case mail = "\u{eaf5}" 196 | case location = "\u{eaf4}" 197 | case likeRemove = "\u{eaf3}" 198 | case info = "\u{eaf2}" 199 | case listCircle = "\u{eaf1}" 200 | case leaf = "\u{eaf0}" 201 | case likeClose = "\u{eaef}" 202 | case likeBan = "\u{eaee}" 203 | case limitDirections = "\u{eaed}" 204 | case likeAdd = "\u{eaec}" 205 | case likeDownload = "\u{eaeb}" 206 | case leftRight = "\u{eaea}" 207 | case hdd = "\u{eae9}" 208 | case landscape = "\u{eae8}" 209 | case italic = "\u{eae7}" 210 | case graphs = "\u{eae6}" 211 | case key = "\u{eae5}" 212 | case hddNet = "\u{eae4}" 213 | case homeWifi = "\u{eae3}" 214 | case idea = "\u{eae2}" 215 | case layers = "\u{eae1}" 216 | case heart = "\u{eae0}" 217 | case grids = "\u{eadf}" 218 | case exclamation = "\u{eade}" 219 | case hddRaid = "\u{eadd}" 220 | case eye = "\u{eadc}" 221 | case femaleSymbol = "\u{eadb}" 222 | case emailUpload = "\u{eada}" 223 | case gridBig = "\u{ead9}" 224 | case eject = "\u{ead8}" 225 | case forward = "\u{ead7}" 226 | case expand = "\u{ead6}" 227 | case expandDirections = "\u{ead5}" 228 | case fire = "\u{ead4}" 229 | case expandVertical = "\u{ead3}" 230 | case eyeDisabled = "\u{ead2}" 231 | case emailSpam = "\u{ead1}" 232 | case dotCircle = "\u{ead0}" 233 | case expandHorizontal = "\u{eacf}" 234 | case euro = "\u{eace}" 235 | case emailLuminosity = "\u{eacd}" 236 | case emailRemove = "\u{eacc}" 237 | case drops = "\u{eacb}" 238 | case emailDownload = "\u{eaca}" 239 | case emailAdd = "\u{eac9}" 240 | case downloadSelectionCircle = "\u{eac8}" 241 | case downloadSelection = "\u{eac7}" 242 | case drop = "\u{eac6}" 243 | case emailClose = "\u{eac5}" 244 | case download = "\u{eac4}" 245 | case copyDocument = "\u{eac3}" 246 | case copyPasteDocument = "\u{eac2}" 247 | case doubleDiamonds = "\u{eac1}" 248 | case comments = "\u{eac0}" 249 | case dollar = "\u{eabf}" 250 | case dotLine = "\u{eabe}" 251 | case document = "\u{eabd}" 252 | case coins = "\u{eabc}" 253 | case dotSquare = "\u{eabb}" 254 | case directions = "\u{eaba}" 255 | case documents = "\u{eab9}" 256 | case cross = "\u{eab8}" 257 | case documentFill = "\u{eab7}" 258 | case creditCard = "\u{eab6}" 259 | case contractVertical = "\u{eab5}" 260 | case cloudDownload = "\u{eab4}" 261 | case contractHorizontal = "\u{eab3}" 262 | case circles = "\u{eab2}" 263 | case chat = "\u{eab1}" 264 | case contractDirections = "\u{eab0}" 265 | case compass2 = "\u{eaaf}" 266 | case cloud = "\u{eaae}" 267 | case comment = "\u{eaad}" 268 | case compass = "\u{eaac}" 269 | case buttonEmail = "\u{eaab}" 270 | case cloudUpload = "\u{eaaa}" 271 | case clock = "\u{eaa9}" 272 | case cloudRemove = "\u{eaa8}" 273 | case cloudAdd = "\u{eaa7}" 274 | case check = "\u{eaa6}" 275 | case camera = "\u{eaa5}" 276 | case buttonQuestion = "\u{eaa4}" 277 | case buttonExclamation = "\u{eaa3}" 278 | case cdDvdRom = "\u{eaa2}" 279 | case buttonClose = "\u{eaa1}" 280 | case arrowCurveLeft = "\u{eaa0}" 281 | case buttonMinus = "\u{ea9f}" 282 | case arrowRight = "\u{ea9e}" 283 | case buttonCheck = "\u{ea9d}" 284 | case buttonAdd = "\u{ea9c}" 285 | case boxClose = "\u{ea9b}" 286 | case boxBlank = "\u{ea9a}" 287 | case brush = "\u{ea99}" 288 | case browserSizes = "\u{ea98}" 289 | case boxRemove = "\u{ea97}" 290 | case atom = "\u{ea96}" 291 | case boxAdd = "\u{ea95}" 292 | case bolt = "\u{ea94}" 293 | case bezier = "\u{ea93}" 294 | case banCircle = "\u{ea92}" 295 | case blockMenu = "\u{ea91}" 296 | case bars = "\u{ea90}" 297 | case blank = "\u{ea8f}" 298 | case axisRules = "\u{ea8e}" 299 | case backward = "\u{ea8d}" 300 | case bag = "\u{ea8c}" 301 | case arrowUp = "\u{ea8b}" 302 | case arrowUpThin = "\u{ea8a}" 303 | case arrowUpBoldRound = "\u{ea89}" 304 | case arrowUpLight = "\u{ea88}" 305 | case arrowUpBold = "\u{ea87}" 306 | case arrowUpBig = "\u{ea86}" 307 | case arrowRightThin = "\u{ea85}" 308 | case arrowRightLight = "\u{ea84}" 309 | case arrowMultiLineUp = "\u{ea83}" 310 | case arrowRightBoldRound = "\u{ea82}" 311 | case arrowMultiLineLeft = "\u{ea81}" 312 | case arrowRightBold = "\u{ea80}" 313 | case arrowRightBig = "\u{ea7f}" 314 | case arrowObliqueExpandDirections = "\u{ea7e}" 315 | case arrowObliqueExpand = "\u{ea7d}" 316 | case arrowObliqueContractDirections = "\u{ea7c}" 317 | case arrowObliqueContract = "\u{ea7b}" 318 | case arrowMultiLineDown = "\u{ea7a}" 319 | case arrowMultiLineRight = "\u{ea79}" 320 | case arrowLeftLight = "\u{ea78}" 321 | case arrowLeftBoldRound = "\u{ea77}" 322 | case arrowLeftThin = "\u{ea76}" 323 | case arrowDownThin = "\u{ea75}" 324 | case arrowFillRight = "\u{ea74}" 325 | case arrowLeft = "\u{ea73}" 326 | case arrowLeftBig = "\u{ea72}" 327 | case arrowFillLeft = "\u{ea71}" 328 | case arrowLeftBold = "\u{ea70}" 329 | case arrowFillUp = "\u{ea6f}" 330 | case arrowCycling = "\u{ea6e}" 331 | case arrowCycle = "\u{ea6d}" 332 | case arrowDownBold = "\u{ea6c}" 333 | case arrowDown = "\u{ea6b}" 334 | case arrowFillDown = "\u{ea6a}" 335 | case arrowDownLight = "\u{ea69}" 336 | case arrowDownBoldRound = "\u{ea68}" 337 | case arrowCurveRecycle = "\u{ea67}" 338 | case alarmClock = "\u{ea66}" 339 | case _3dCube = "\u{ea65}" 340 | case arrowDownBig = "\u{ea64}" 341 | case animalFootprint = "\u{ea63}" 342 | case arrowCurveRight = "\u{ea62}" 343 | case airPlane = "\u{ea61}" 344 | case adjust = "\u{ea60}" 345 | } 346 | -------------------------------------------------------------------------------- /EFIconFont/Classes/OpenIconic/EFIconFontOpenIconic.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EFIconFontOpenIconic.swift 3 | // EFIconFont 4 | // 5 | // Created by EyreFree on 2019/3/20. 6 | // 7 | // Copyright (c) 2019 EyreFree 8 | // 9 | // Permission is hereby granted, free of charge, to any person obtaining a copy 10 | // of this software and associated documentation files (the "Software"), to deal 11 | // in the Software without restriction, including without limitation the rights 12 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the Software is 14 | // furnished to do so, subject to the following conditions: 15 | // 16 | // The above copyright notice and this permission notice shall be included in 17 | // all copies or substantial portions of the Software. 18 | // 19 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 25 | // THE SOFTWARE. 26 | 27 | import Foundation 28 | 29 | public extension EFIconFont { 30 | 31 | static let openIconic = EFIconFontOpenIconic.self 32 | } 33 | 34 | extension EFIconFontOpenIconic: EFIconFontCaseIterableProtocol { 35 | 36 | public static var name: String { 37 | return "openiconic" 38 | } 39 | 40 | public var unicode: String { 41 | return self.rawValue 42 | } 43 | } 44 | 45 | public enum EFIconFontOpenIconic: String { 46 | case zoomOut = "\u{eb13}" 47 | case wrench = "\u{eb12}" 48 | case zoomIn = "\u{eb11}" 49 | case wifi = "\u{eb10}" 50 | case yen = "\u{eb0f}" 51 | case warning = "\u{eb0e}" 52 | case x = "\u{eb0d}" 53 | case volumeOff = "\u{eb0c}" 54 | case verticalAlignCenter = "\u{eb0b}" 55 | case volumeLow = "\u{eb0a}" 56 | case verticalAlignTop = "\u{eb09}" 57 | case volumeHigh = "\u{eb08}" 58 | case video = "\u{eb07}" 59 | case verticalAlignBottom = "\u{eb06}" 60 | case underline = "\u{eb05}" 61 | case trash = "\u{eb04}" 62 | case thumbUp = "\u{eb03}" 63 | case timer = "\u{eb02}" 64 | case transfer = "\u{eb01}" 65 | case text = "\u{eb00}" 66 | case tags = "\u{eaff}" 67 | case thumbDown = "\u{eafe}" 68 | case terminal = "\u{eafd}" 69 | case target = "\u{eafc}" 70 | case tablet = "\u{eafb}" 71 | case task = "\u{eafa}" 72 | case sun = "\u{eaf9}" 73 | case spreadsheet = "\u{eaf8}" 74 | case tag = "\u{eaf7}" 75 | case sortDescending = "\u{eaf6}" 76 | case star = "\u{eaf5}" 77 | case signal = "\u{eaf4}" 78 | case signpost = "\u{eaf3}" 79 | case shield = "\u{eaf2}" 80 | case sortAscending = "\u{eaf1}" 81 | case rss = "\u{eaf0}" 82 | case shareBoxed = "\u{eaef}" 83 | case share = "\u{eaee}" 84 | case rssAlt = "\u{eaed}" 85 | case script = "\u{eaec}" 86 | case rain = "\u{eaeb}" 87 | case resizeHeight = "\u{eaea}" 88 | case resizeWidth = "\u{eae9}" 89 | case resizeBoth = "\u{eae8}" 90 | case random = "\u{eae7}" 91 | case pulse = "\u{eae6}" 92 | case puzzlePiece = "\u{eae5}" 93 | case reload = "\u{eae4}" 94 | case powerStandby = "\u{eae3}" 95 | case questionMark = "\u{eae2}" 96 | case print = "\u{eae1}" 97 | case project = "\u{eae0}" 98 | case paperclip = "\u{eadf}" 99 | case loopSquare = "\u{eade}" 100 | case playCircle = "\u{eadd}" 101 | case pin = "\u{eadc}" 102 | case plus = "\u{eadb}" 103 | case person = "\u{eada}" 104 | case pieChart = "\u{ead9}" 105 | case phone = "\u{ead8}" 106 | case people = "\u{ead7}" 107 | case pencil = "\u{ead6}" 108 | case move = "\u{ead5}" 109 | case microphone = "\u{ead4}" 110 | case moon = "\u{ead3}" 111 | case monitor = "\u{ead2}" 112 | case musicalNote = "\u{ead1}" 113 | case minus = "\u{ead0}" 114 | case medicalCross = "\u{eacf}" 115 | case mediaStepBackward = "\u{eace}" 116 | case mediaStop = "\u{eacd}" 117 | case menu = "\u{eacc}" 118 | case mediaRecord = "\u{eacb}" 119 | case mediaStepForward = "\u{eaca}" 120 | case mediaSkipForward = "\u{eac9}" 121 | case mediaPlay = "\u{eac8}" 122 | case mediaSkipBackward = "\u{eac7}" 123 | case map = "\u{eac6}" 124 | case mapMarker = "\u{eac5}" 125 | case mediaPause = "\u{eac4}" 126 | case magnifyingGlass = "\u{eac3}" 127 | case lockLocked = "\u{eac2}" 128 | case loop = "\u{eac1}" 129 | case list = "\u{eac0}" 130 | case lockUnlocked = "\u{eabf}" 131 | case loopCircular = "\u{eabe}" 132 | case linkBroken = "\u{eabd}" 133 | case listRich = "\u{eabc}" 134 | case info = "\u{eabb}" 135 | case linkIntact = "\u{eaba}" 136 | case location = "\u{eab9}" 137 | case italic = "\u{eab8}" 138 | case lightbulb = "\u{eab7}" 139 | case layers = "\u{eab6}" 140 | case laptop = "\u{eab5}" 141 | case eyedropper = "\u{eab4}" 142 | case key = "\u{eab3}" 143 | case infinity = "\u{eab2}" 144 | case justifyCenter = "\u{eab1}" 145 | case justifyRight = "\u{eab0}" 146 | case home = "\u{eaaf}" 147 | case justifyLeft = "\u{eaae}" 148 | case headphones = "\u{eaad}" 149 | case image = "\u{eaac}" 150 | case gridThreeUp = "\u{eaab}" 151 | case inbox = "\u{eaaa}" 152 | case heart = "\u{eaa9}" 153 | case header = "\u{eaa8}" 154 | case gridTwoUp = "\u{eaa7}" 155 | case globe = "\u{eaa6}" 156 | case gridFourUp = "\u{eaa5}" 157 | case hardDrive = "\u{eaa4}" 158 | case fullscreenEnter = "\u{eaa3}" 159 | case graph = "\u{eaa2}" 160 | case fullscreenExit = "\u{eaa1}" 161 | case fork = "\u{eaa0}" 162 | case flash = "\u{ea9f}" 163 | case folder = "\u{ea9e}" 164 | case flag = "\u{ea9d}" 165 | case file = "\u{ea9c}" 166 | case fire = "\u{ea9b}" 167 | case externalLink = "\u{ea9a}" 168 | case eye = "\u{ea99}" 169 | case expandUp = "\u{ea98}" 170 | case euro = "\u{ea97}" 171 | case expandRight = "\u{ea96}" 172 | case expandLeft = "\u{ea95}" 173 | case expandDown = "\u{ea94}" 174 | case ellipses = "\u{ea93}" 175 | case excerpt = "\u{ea92}" 176 | case droplet = "\u{ea91}" 177 | case envelopeOpen = "\u{ea90}" 178 | case envelopeClosed = "\u{ea8f}" 179 | case elevator = "\u{ea8e}" 180 | case eject = "\u{ea8d}" 181 | case document = "\u{ea8c}" 182 | case delete = "\u{ea8b}" 183 | case doubleQuoteSansRight = "\u{ea8a}" 184 | case doubleQuoteSerifRight = "\u{ea89}" 185 | case doubleQuoteSerifLeft = "\u{ea88}" 186 | case doubleQuoteSansLeft = "\u{ea87}" 187 | case dollar = "\u{ea86}" 188 | case dial = "\u{ea85}" 189 | case dataTransferUpload = "\u{ea84}" 190 | case dataTransferDownload = "\u{ea83}" 191 | case crop = "\u{ea82}" 192 | case compass = "\u{ea81}" 193 | case creditCard = "\u{ea80}" 194 | case dashboard = "\u{ea7f}" 195 | case command = "\u{ea7e}" 196 | case contrast = "\u{ea7d}" 197 | case commentSquare = "\u{ea7c}" 198 | case copywriting = "\u{ea7b}" 199 | case caretBottom = "\u{ea7a}" 200 | case collapseUp = "\u{ea79}" 201 | case collapseLeft = "\u{ea78}" 202 | case collapseDown = "\u{ea77}" 203 | case collapseRight = "\u{ea76}" 204 | case cloudy = "\u{ea75}" 205 | case cloudDownload = "\u{ea74}" 206 | case code = "\u{ea73}" 207 | case cog = "\u{ea72}" 208 | case cloudUpload = "\u{ea71}" 209 | case cloud = "\u{ea70}" 210 | case clipboard = "\u{ea6f}" 211 | case circleX = "\u{ea6e}" 212 | case clock = "\u{ea6d}" 213 | case circleCheck = "\u{ea6c}" 214 | case chevronTop = "\u{ea6b}" 215 | case cameraSlr = "\u{ea6a}" 216 | case chevronRight = "\u{ea69}" 217 | case chevronLeft = "\u{ea68}" 218 | case chevronBottom = "\u{ea67}" 219 | case check = "\u{ea66}" 220 | case box = "\u{ea65}" 221 | case cart = "\u{ea64}" 222 | case chat = "\u{ea63}" 223 | case caretTop = "\u{ea62}" 224 | case caretRight = "\u{ea61}" 225 | case caretLeft = "\u{ea60}" 226 | case bug = "\u{ea5f}" 227 | case calendar = "\u{ea5e}" 228 | case calculator = "\u{ea5d}" 229 | case britishPound = "\u{ea5c}" 230 | case brush = "\u{ea5b}" 231 | case bullhorn = "\u{ea5a}" 232 | case briefcase = "\u{ea59}" 233 | case browser = "\u{ea58}" 234 | case book = "\u{ea57}" 235 | case bookmark = "\u{ea56}" 236 | case bluetooth = "\u{ea55}" 237 | case bold = "\u{ea54}" 238 | case bolt = "\u{ea53}" 239 | case beaker = "\u{ea52}" 240 | case batteryFull = "\u{ea51}" 241 | case basket = "\u{ea50}" 242 | case bell = "\u{ea4f}" 243 | case batteryEmpty = "\u{ea4e}" 244 | case barChart = "\u{ea4d}" 245 | case ban = "\u{ea4c}" 246 | case audio = "\u{ea4b}" 247 | case badge = "\u{ea4a}" 248 | case arrowThickLeft = "\u{ea49}" 249 | case arrowTop = "\u{ea48}" 250 | case arrowThickTop = "\u{ea47}" 251 | case audioSpectrum = "\u{ea46}" 252 | case arrowThickBottom = "\u{ea45}" 253 | case arrowThickRight = "\u{ea44}" 254 | case arrowLeft = "\u{ea43}" 255 | case aperture = "\u{ea42}" 256 | case arrowRight = "\u{ea41}" 257 | case arrowCircleTop = "\u{ea40}" 258 | case arrowCircleLeft = "\u{ea3f}" 259 | case arrowCircleBottom = "\u{ea3e}" 260 | case arrowCircleRight = "\u{ea3d}" 261 | case alignRight = "\u{ea3c}" 262 | case alignCenter = "\u{ea3b}" 263 | case actionUndo = "\u{ea3a}" 264 | case arrowBottom = "\u{ea39}" 265 | case accountLogout = "\u{ea38}" 266 | case alignLeft = "\u{ea37}" 267 | case accountLogin = "\u{ea36}" 268 | case actionRedo = "\u{ea35}" 269 | } 270 | -------------------------------------------------------------------------------- /EFIconFont/Classes/Typicons/EFIconFontTypicons.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EFIconFontTypicons.swift 3 | // EFIconFont 4 | // 5 | // Created by EyreFree on 2019/3/20. 6 | // 7 | // Copyright (c) 2019 EyreFree 8 | // 9 | // Permission is hereby granted, free of charge, to any person obtaining a copy 10 | // of this software and associated documentation files (the "Software"), to deal 11 | // in the Software without restriction, including without limitation the rights 12 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the Software is 14 | // furnished to do so, subject to the following conditions: 15 | // 16 | // The above copyright notice and this permission notice shall be included in 17 | // all copies or substantial portions of the Software. 18 | // 19 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 25 | // THE SOFTWARE. 26 | 27 | import Foundation 28 | 29 | public extension EFIconFont { 30 | 31 | static let typicons = EFIconFontTypicons.self 32 | } 33 | 34 | extension EFIconFontTypicons: EFIconFontCaseIterableProtocol { 35 | 36 | public static var name: String { 37 | return "typicons" 38 | } 39 | 40 | public var unicode: String { 41 | return self.rawValue 42 | } 43 | } 44 | 45 | public enum EFIconFontTypicons: String { 46 | case weatherSunny = "\u{eb55}" 47 | case volumeMute = "\u{eb54}" 48 | case zoomOutline = "\u{eb53}" 49 | case videoOutline = "\u{eb52}" 50 | case weatherShower = "\u{eb51}" 51 | case zoomIn = "\u{eb50}" 52 | case userDelete = "\u{eb4f}" 53 | case wiFiOutline = "\u{eb4e}" 54 | case volumeUp = "\u{eb4d}" 55 | case video = "\u{eb4c}" 56 | case zoomOutOutline = "\u{eb4b}" 57 | case weatherDownpour = "\u{eb4a}" 58 | case timesOutline = "\u{eb49}" 59 | case userAddOutline = "\u{eb48}" 60 | case tree = "\u{eb47}" 61 | case vendorAndroid = "\u{eb46}" 62 | case world = "\u{eb45}" 63 | case worldOutline = "\u{eb44}" 64 | case weatherWindyCloudy = "\u{eb43}" 65 | case socialGithubCircular = "\u{eb42}" 66 | case thSmall = "\u{eb41}" 67 | case vendorApple = "\u{eb40}" 68 | case times = "\u{eb3f}" 69 | case thMenuOutline = "\u{eb3e}" 70 | case uploadOutline = "\u{eb3d}" 71 | case zoom = "\u{eb3c}" 72 | case weatherSnow = "\u{eb3b}" 73 | case wavesOutline = "\u{eb3a}" 74 | case tick = "\u{eb39}" 75 | case zoomOut = "\u{eb38}" 76 | case thMenu = "\u{eb37}" 77 | case wiFi = "\u{eb36}" 78 | case zoomInOutline = "\u{eb35}" 79 | case thLarge = "\u{eb34}" 80 | case wine = "\u{eb33}" 81 | case warningOutline = "\u{eb32}" 82 | case weatherWindy = "\u{eb31}" 83 | case starburstOutline = "\u{eb30}" 84 | case weatherNight = "\u{eb2f}" 85 | case socialSkypeOutline = "\u{eb2e}" 86 | case stopwatch = "\u{eb2d}" 87 | case starHalfOutline = "\u{eb2c}" 88 | case star = "\u{eb2b}" 89 | case weatherStormy = "\u{eb2a}" 90 | case weatherPartlySunny = "\u{eb29}" 91 | case waves = "\u{eb28}" 92 | case thumbsOk = "\u{eb27}" 93 | case weatherCloudy = "\u{eb26}" 94 | case socialTumbler = "\u{eb25}" 95 | case warning = "\u{eb24}" 96 | case watch = "\u{eb23}" 97 | case userOutline = "\u{eb22}" 98 | case volume = "\u{eb21}" 99 | case volumeDown = "\u{eb20}" 100 | case userAdd = "\u{eb1f}" 101 | case tag = "\u{eb1e}" 102 | case ticket = "\u{eb1d}" 103 | case vendorMicrosoft = "\u{eb1c}" 104 | case userDeleteOutline = "\u{eb1b}" 105 | case upload = "\u{eb1a}" 106 | case user = "\u{eb19}" 107 | case sortNumericallyOutline = "\u{eb18}" 108 | case thermometer = "\u{eb17}" 109 | case thumbsUp = "\u{eb16}" 110 | case spanner = "\u{eb15}" 111 | case trash = "\u{eb14}" 112 | case thListOutline = "\u{eb13}" 113 | case tickOutline = "\u{eb12}" 114 | case time = "\u{eb11}" 115 | case thumbsDown = "\u{eb10}" 116 | case support = "\u{eb0f}" 117 | case socialLastFmCircular = "\u{eb0e}" 118 | case thList = "\u{eb0d}" 119 | case thSmallOutline = "\u{eb0c}" 120 | case tags = "\u{eb0b}" 121 | case starFullOutline = "\u{eb0a}" 122 | case socialVimeo = "\u{eb09}" 123 | case sortNumerically = "\u{eb08}" 124 | case spiral = "\u{eb07}" 125 | case thLargeOutline = "\u{eb06}" 126 | case socialYoutubeCircular = "\u{eb05}" 127 | case socialYoutube = "\u{eb04}" 128 | case starburst = "\u{eb03}" 129 | case tabsOutline = "\u{eb02}" 130 | case socialDribbbleCircular = "\u{eb01}" 131 | case socialVimeoCircular = "\u{eb00}" 132 | case starHalf = "\u{eaff}" 133 | case socialSkype = "\u{eafe}" 134 | case spannerOutline = "\u{eafd}" 135 | case sortAlphabeticallyOutline = "\u{eafc}" 136 | case socialPinterestCircular = "\u{eafb}" 137 | case starOutline = "\u{eafa}" 138 | case shoppingCart = "\u{eaf9}" 139 | case socialFacebook = "\u{eaf8}" 140 | case socialTwitterCircular = "\u{eaf7}" 141 | case socialLastFm = "\u{eaf6}" 142 | case scissorsOutline = "\u{eaf5}" 143 | case sortAlphabetically = "\u{eaf4}" 144 | case refreshOutline = "\u{eaf3}" 145 | case socialTwitter = "\u{eaf2}" 146 | case socialLinkedin = "\u{eaf1}" 147 | case socialTumblerCircular = "\u{eaf0}" 148 | case socialPinterest = "\u{eaef}" 149 | case socialGithub = "\u{eaee}" 150 | case socialLinkedinCircular = "\u{eaed}" 151 | case socialGooglePlus = "\u{eaec}" 152 | case socialInstagramCircular = "\u{eaeb}" 153 | case socialInstagram = "\u{eaea}" 154 | case socialGooglePlusCircular = "\u{eae9}" 155 | case socialDribbble = "\u{eae8}" 156 | case shoppingBag = "\u{eae7}" 157 | case socialFlickr = "\u{eae6}" 158 | case pointOfInterestOutline = "\u{eae5}" 159 | case plusOutline = "\u{eae4}" 160 | case socialFlickrCircular = "\u{eae3}" 161 | case scissors = "\u{eae2}" 162 | case socialFacebookCircular = "\u{eae1}" 163 | case socialAtCircular = "\u{eae0}" 164 | case mediaPlay = "\u{eadf}" 165 | case radarOutline = "\u{eade}" 166 | case pipette = "\u{eadd}" 167 | case lockOpenOutline = "\u{eadc}" 168 | case planeOutline = "\u{eadb}" 169 | case printer = "\u{eada}" 170 | case refresh = "\u{ead9}" 171 | case rssOutline = "\u{ead8}" 172 | case rss = "\u{ead7}" 173 | case puzzle = "\u{ead6}" 174 | case puzzleOutline = "\u{ead5}" 175 | case radar = "\u{ead4}" 176 | case pinOutline = "\u{ead3}" 177 | case pointOfInterest = "\u{ead2}" 178 | case power = "\u{ead1}" 179 | case plug = "\u{ead0}" 180 | case powerOutline = "\u{eacf}" 181 | case plane = "\u{eace}" 182 | case plus = "\u{eacd}" 183 | case phoneOutline = "\u{eacc}" 184 | case pen = "\u{eacb}" 185 | case locationArrowOutline = "\u{eaca}" 186 | case pi = "\u{eac9}" 187 | case infinity = "\u{eac8}" 188 | case phone = "\u{eac7}" 189 | case piOutline = "\u{eac6}" 190 | case mediaEjectOutline = "\u{eac5}" 191 | case pencil = "\u{eac4}" 192 | case pin = "\u{eac3}" 193 | case microphone = "\u{eac2}" 194 | case minusOutline = "\u{eac1}" 195 | case notes = "\u{eac0}" 196 | case news = "\u{eabf}" 197 | case messages = "\u{eabe}" 198 | case mortarBoard = "\u{eabd}" 199 | case message = "\u{eabc}" 200 | case notesOutline = "\u{eabb}" 201 | case infoLarge = "\u{eaba}" 202 | case mediaPause = "\u{eab9}" 203 | case group = "\u{eab8}" 204 | case microphoneOutline = "\u{eab7}" 205 | case minus = "\u{eab6}" 206 | case mediaStop = "\u{eab5}" 207 | case mediaRewindOutline = "\u{eab4}" 208 | case mediaRecord = "\u{eab3}" 209 | case mediaStopOutline = "\u{eab2}" 210 | case mediaPlayOutline = "\u{eab1}" 211 | case mediaFastForwardOutline = "\u{eab0}" 212 | case mediaPlayReverse = "\u{eaaf}" 213 | case linkOutline = "\u{eaae}" 214 | case messageTyping = "\u{eaad}" 215 | case mediaRewind = "\u{eaac}" 216 | case mediaPlayReverseOutline = "\u{eaab}" 217 | case mediaRecordOutline = "\u{eaaa}" 218 | case mediaFastForward = "\u{eaa9}" 219 | case location = "\u{eaa8}" 220 | case mediaPauseOutline = "\u{eaa7}" 221 | case lightbulb = "\u{eaa6}" 222 | case lockOpen = "\u{eaa5}" 223 | case map = "\u{eaa4}" 224 | case infinityOutline = "\u{eaa3}" 225 | case lockClosed = "\u{eaa2}" 226 | case mail = "\u{eaa1}" 227 | case locationOutline = "\u{eaa0}" 228 | case lockClosedOutline = "\u{ea9f}" 229 | case mediaEject = "\u{ea9e}" 230 | case flowChildren = "\u{ea9d}" 231 | case key = "\u{ea9c}" 232 | case leaf = "\u{ea9b}" 233 | case locationArrow = "\u{ea9a}" 234 | case link = "\u{ea99}" 235 | case keyboard = "\u{ea98}" 236 | case inputChecked = "\u{ea97}" 237 | case keyOutline = "\u{ea96}" 238 | case inputCheckedOutline = "\u{ea95}" 239 | case infoOutline = "\u{ea94}" 240 | case infoLargeOutline = "\u{ea93}" 241 | case heartFullOutline = "\u{ea92}" 242 | case info = "\u{ea91}" 243 | case groupOutline = "\u{ea90}" 244 | case imageOutline = "\u{ea8f}" 245 | case image = "\u{ea8e}" 246 | case html5 = "\u{ea8d}" 247 | case heart = "\u{ea8c}" 248 | case headphones = "\u{ea8b}" 249 | case heartHalfOutline = "\u{ea8a}" 250 | case gift = "\u{ea89}" 251 | case home = "\u{ea88}" 252 | case homeOutline = "\u{ea87}" 253 | case heartOutline = "\u{ea86}" 254 | case globeOutline = "\u{ea85}" 255 | case folderDelete = "\u{ea84}" 256 | case feather = "\u{ea83}" 257 | case flowParallel = "\u{ea82}" 258 | case flowSwitch = "\u{ea81}" 259 | case globe = "\u{ea80}" 260 | case folderOpen = "\u{ea7f}" 261 | case flowMerge = "\u{ea7e}" 262 | case folderAdd = "\u{ea7d}" 263 | case folder = "\u{ea7c}" 264 | case film = "\u{ea7b}" 265 | case flash = "\u{ea7a}" 266 | case flagOutline = "\u{ea79}" 267 | case flashOutline = "\u{ea78}" 268 | case flag = "\u{ea77}" 269 | case edit = "\u{ea76}" 270 | case download = "\u{ea75}" 271 | case filter = "\u{ea74}" 272 | case ejectOutline = "\u{ea73}" 273 | case eye = "\u{ea72}" 274 | case eyeOutline = "\u{ea71}" 275 | case downloadOutline = "\u{ea70}" 276 | case equalsOutline = "\u{ea6f}" 277 | case exportOutline = "\u{ea6e}" 278 | case export = "\u{ea6d}" 279 | case eject = "\u{ea6c}" 280 | case equals = "\u{ea6b}" 281 | case dropbox = "\u{ea6a}" 282 | case deviceTablet = "\u{ea69}" 283 | case deviceDesktop = "\u{ea68}" 284 | case divide = "\u{ea67}" 285 | case documentDelete = "\u{ea66}" 286 | case devicePhone = "\u{ea65}" 287 | case documentText = "\u{ea64}" 288 | case chartPieOutline = "\u{ea63}" 289 | case directions = "\u{ea62}" 290 | case delete = "\u{ea61}" 291 | case divideOutline = "\u{ea60}" 292 | case document = "\u{ea5f}" 293 | case codeOutline = "\u{ea5e}" 294 | case contacts = "\u{ea5d}" 295 | case documentAdd = "\u{ea5c}" 296 | case cogOutline = "\u{ea5b}" 297 | case compass = "\u{ea5a}" 298 | case cog = "\u{ea59}" 299 | case deviceLaptop = "\u{ea58}" 300 | case css3 = "\u{ea57}" 301 | case chartBarOutline = "\u{ea56}" 302 | case coffee = "\u{ea55}" 303 | case database = "\u{ea54}" 304 | case deleteOutline = "\u{ea53}" 305 | case chevronRight = "\u{ea52}" 306 | case calculator = "\u{ea51}" 307 | case creditCard = "\u{ea50}" 308 | case chevronLeft = "\u{ea4f}" 309 | case code = "\u{ea4e}" 310 | case cloudStorage = "\u{ea4d}" 311 | case chevronLeftOutline = "\u{ea4c}" 312 | case chartLine = "\u{ea4b}" 313 | case clipboard = "\u{ea4a}" 314 | case chartAreaOutline = "\u{ea49}" 315 | case cloudStorageOutline = "\u{ea48}" 316 | case chartLineOutline = "\u{ea47}" 317 | case chartPie = "\u{ea46}" 318 | case chevronRightOutline = "\u{ea45}" 319 | case chartBar = "\u{ea44}" 320 | case cancel = "\u{ea43}" 321 | case cameraOutline = "\u{ea42}" 322 | case batteryHigh = "\u{ea41}" 323 | case brush = "\u{ea40}" 324 | case arrowSyncOutline = "\u{ea3f}" 325 | case calendarOutline = "\u{ea3e}" 326 | case briefcase = "\u{ea3d}" 327 | case camera = "\u{ea3c}" 328 | case cancelOutline = "\u{ea3b}" 329 | case bell = "\u{ea3a}" 330 | case batteryMid = "\u{ea39}" 331 | case businessCard = "\u{ea38}" 332 | case calendar = "\u{ea37}" 333 | case attachmentOutline = "\u{ea36}" 334 | case book = "\u{ea35}" 335 | case batteryFull = "\u{ea34}" 336 | case chartArea = "\u{ea33}" 337 | case beaker = "\u{ea32}" 338 | case beer = "\u{ea31}" 339 | case arrowSync = "\u{ea30}" 340 | case bookmark = "\u{ea2f}" 341 | case arrowUpThick = "\u{ea2e}" 342 | case batteryLow = "\u{ea2d}" 343 | case batteryCharge = "\u{ea2c}" 344 | case at = "\u{ea2b}" 345 | case arrowUpOutline = "\u{ea2a}" 346 | case backspaceOutline = "\u{ea29}" 347 | case backspace = "\u{ea28}" 348 | case arrowRepeatOutline = "\u{ea27}" 349 | case attachment = "\u{ea26}" 350 | case arrowUnsorted = "\u{ea25}" 351 | case arrowShuffle = "\u{ea24}" 352 | case arrowUp = "\u{ea23}" 353 | case arrowMove = "\u{ea22}" 354 | case arrowRightOutline = "\u{ea21}" 355 | case arrowSortedDown = "\u{ea20}" 356 | case arrowRight = "\u{ea1f}" 357 | case arrowRepeat = "\u{ea1e}" 358 | case arrowRightThick = "\u{ea1d}" 359 | case arrowSortedUp = "\u{ea1c}" 360 | case arrowMinimiseOutline = "\u{ea1b}" 361 | case arrowMaximise = "\u{ea1a}" 362 | case arrowBack = "\u{ea19}" 363 | case arrowMaximiseOutline = "\u{ea18}" 364 | case arrowMoveOutline = "\u{ea17}" 365 | case arrowMinimise = "\u{ea16}" 366 | case arrowLeftThick = "\u{ea15}" 367 | case arrowLoop = "\u{ea14}" 368 | case arrowForwardOutline = "\u{ea13}" 369 | case arrowLoopOutline = "\u{ea12}" 370 | case arrowBackOutline = "\u{ea11}" 371 | case arrowDownOutline = "\u{ea10}" 372 | case anchorOutline = "\u{ea0f}" 373 | case arrowLeft = "\u{ea0e}" 374 | case arrowLeftOutline = "\u{ea0d}" 375 | case arrowForward = "\u{ea0c}" 376 | case archive = "\u{ea0b}" 377 | case arrowDownThick = "\u{ea0a}" 378 | case arrowDown = "\u{ea09}" 379 | case adjustContrast = "\u{ea08}" 380 | case anchor = "\u{ea07}" 381 | case adjustBrightness = "\u{ea06}" 382 | } 383 | -------------------------------------------------------------------------------- /Example/EFIconFont.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/EFIconFont.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/EFIconFont.xcodeproj/xcshareddata/xcschemes/EFIconFont-Example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 44 | 45 | 47 | 53 | 54 | 55 | 56 | 57 | 63 | 64 | 65 | 66 | 67 | 68 | 78 | 80 | 86 | 87 | 88 | 89 | 90 | 91 | 97 | 99 | 105 | 106 | 107 | 108 | 110 | 111 | 114 | 115 | 116 | -------------------------------------------------------------------------------- /Example/EFIconFont.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/EFIconFont.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/EFIconFont/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // EFIconFont 4 | // 5 | // Created by EyreFree on 03/19/2019. 6 | // Copyright (c) 2019 EyreFree. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { return true } 17 | 18 | func applicationWillResignActive(_ application: UIApplication) { } 19 | 20 | func applicationDidEnterBackground(_ application: UIApplication) { } 21 | 22 | func applicationWillEnterForeground(_ application: UIApplication) { } 23 | 24 | func applicationDidBecomeActive(_ application: UIApplication) { } 25 | 26 | func applicationWillTerminate(_ application: UIApplication) { } 27 | } 28 | -------------------------------------------------------------------------------- /Example/EFIconFont/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 25 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /Example/EFIconFont/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /Example/EFIconFont/CGFloat+.swift: -------------------------------------------------------------------------------- 1 | // 2 | // CGFloat+.swift 3 | // EFIconFont_Example 4 | // 5 | // Created by EyreFree on 2019/3/23. 6 | // Copyright © 2019年 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | extension CGFloat { 12 | 13 | static let screenWidth = UIScreen.main.bounds.size.width 14 | static let screenHeight = UIScreen.main.bounds.size.height 15 | 16 | static let statusBarHeight: CGFloat = 20 + topSafeAreaHeight 17 | static let navigationBarHeight: CGFloat = 44 18 | static let statusAndNavigationHeight: CGFloat = statusBarHeight + navigationBarHeight 19 | 20 | static let topSafeAreaHeight: CGFloat = UIDevice.isiPhoneX ? 22 : 0 21 | static let bottomSafeAreaHeight: CGFloat = UIDevice.isiPhoneX ? 34 : 0 22 | } 23 | -------------------------------------------------------------------------------- /Example/EFIconFont/DetailViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DetailViewController.swift 3 | // EFIconFont_Example 4 | // 5 | // Created by EyreFree on 2019/3/24. 6 | // Copyright © 2019年 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import EFIconFont 11 | 12 | class DetailViewController: UIViewController { 13 | 14 | let icon: EFIconFontProtocol 15 | 16 | init(title: String, icon: EFIconFontProtocol) { 17 | self.icon = icon 18 | super.init(nibName: nil, bundle: nil) 19 | self.navigationItem.title = title 20 | } 21 | 22 | required init?(coder aDecoder: NSCoder) { 23 | fatalError("init(coder:) has not been implemented") 24 | } 25 | 26 | override func viewDidLoad() { 27 | super.viewDidLoad() 28 | 29 | setupControls() 30 | } 31 | 32 | func setupControls() { 33 | self.view.backgroundColor = UIColor.white 34 | 35 | let imageView = UIImageView() 36 | imageView.frame = CGRect( 37 | x: 12, 38 | y: CGFloat.statusAndNavigationHeight, 39 | width: CGFloat.screenWidth - 24, 40 | height: CGFloat.screenHeight - CGFloat.statusAndNavigationHeight * 2 41 | ) 42 | imageView.image = icon.image(size: imageView.frame.size, foregroundColor: UIColor.black) 43 | imageView.contentMode = .scaleAspectFit 44 | self.view.addSubview(imageView) 45 | } 46 | } 47 | -------------------------------------------------------------------------------- /Example/EFIconFont/EFIconFontOcticons.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EFIconFontOcticons.swift 3 | // EFIconFont 4 | // 5 | // Created by EyreFree on 2019/3/20. 6 | // 7 | // Copyright (c) 2019 EyreFree 8 | // 9 | // Permission is hereby granted, free of charge, to any person obtaining a copy 10 | // of this software and associated documentation files (the "Software"), to deal 11 | // in the Software without restriction, including without limitation the rights 12 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 13 | // copies of the Software, and to permit persons to whom the Software is 14 | // furnished to do so, subject to the following conditions: 15 | // 16 | // The above copyright notice and this permission notice shall be included in 17 | // all copies or substantial portions of the Software. 18 | // 19 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 20 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 21 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 22 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 23 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 24 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 25 | // THE SOFTWARE. 26 | 27 | import Foundation 28 | import EFIconFont 29 | 30 | public extension EFIconFont { 31 | 32 | static let octicons = EFIconFontOcticons.self 33 | } 34 | 35 | extension EFIconFontOcticons: EFIconFontCaseIterableProtocol { 36 | 37 | public static var name: String { 38 | return "octicons" 39 | } 40 | 41 | public var unicode: String { 42 | return self.rawValue 43 | } 44 | } 45 | 46 | public enum EFIconFontOcticons: String { 47 | case thumbsup = "\u{e6d7}" 48 | case unverified = "\u{e6d6}" 49 | case unfold = "\u{e6d5}" 50 | case verified = "\u{e6d4}" 51 | case triangleLeft = "\u{e6d3}" 52 | case telescope = "\u{e6d2}" 53 | case x = "\u{e6d1}" 54 | case server = "\u{e6d0}" 55 | case watch = "\u{e6cf}" 56 | case zap = "\u{e6ce}" 57 | case smiley = "\u{e6cd}" 58 | case versions = "\u{e6cc}" 59 | case unmute = "\u{e6cb}" 60 | case stop = "\u{e6ca}" 61 | case triangleDown = "\u{e6c9}" 62 | case triangleUp = "\u{e6c8}" 63 | case signIn = "\u{e6c7}" 64 | case tools = "\u{e6c6}" 65 | case radioTower = "\u{e6c5}" 66 | case shield = "\u{e6c4}" 67 | case triangleRight = "\u{e6c3}" 68 | case threeBars = "\u{e6c2}" 69 | case repo = "\u{e6c1}" 70 | case trashcan = "\u{e6c0}" 71 | case tasklist = "\u{e6bf}" 72 | case search = "\u{e6be}" 73 | case thumbsdown = "\u{e6bd}" 74 | case terminal = "\u{e6bc}" 75 | case tag = "\u{e6bb}" 76 | case textSize = "\u{e6ba}" 77 | case paintcan = "\u{e6b9}" 78 | case italic = "\u{e6b8}" 79 | case sync = "\u{e6b7}" 80 | case repoForked = "\u{e6b6}" 81 | case grabber = "\u{e6b5}" 82 | case ruby = "\u{e6b4}" 83 | case star = "\u{e6b3}" 84 | case screenNormal = "\u{e6b2}" 85 | case signOut = "\u{e6b1}" 86 | case requestChanges = "\u{e6b0}" 87 | case squirrel = "\u{e6af}" 88 | case settings = "\u{e6ae}" 89 | case repoPush = "\u{e6ad}" 90 | case repoPull = "\u{e6ac}" 91 | case repoForcePush = "\u{e6ab}" 92 | case pin = "\u{e6aa}" 93 | case rss = "\u{e6a9}" 94 | case fold = "\u{e6a8}" 95 | case milestone = "\u{e6a7}" 96 | case report = "\u{e6a6}" 97 | case screenFull = "\u{e6a5}" 98 | case rocket = "\u{e6a4}" 99 | case pulse = "\u{e6a3}" 100 | case person = "\u{e6a2}" 101 | case repoClone = "\u{e6a1}" 102 | case project = "\u{e6a0}" 103 | case quote = "\u{e69f}" 104 | case lock = "\u{e69e}" 105 | case mute = "\u{e69d}" 106 | case organization = "\u{e69c}" 107 | case note = "\u{e69b}" 108 | case pencil = "\u{e69a}" 109 | case reply = "\u{e699}" 110 | case primitiveDot = "\u{e698}" 111 | case mirror = "\u{e697}" 112 | case plug = "\u{e696}" 113 | case home = "\u{e695}" 114 | case question = "\u{e694}" 115 | case mortarBoard = "\u{e693}" 116 | case primitiveSquare = "\u{e692}" 117 | case plus = "\u{e691}" 118 | case listOrdered = "\u{e690}" 119 | case play = "\u{e68f}" 120 | case markGithub = "\u{e68e}" 121 | case listUnordered = "\u{e68d}" 122 | case octoface = "\u{e68c}" 123 | case horizontalRule = "\u{e68b}" 124 | case gitCompare = "\u{e68a}" 125 | case logoGithub = "\u{e689}" 126 | case plusSmall = "\u{e688}" 127 | case noNewline = "\u{e687}" 128 | case foldUp = "\u{e686}" 129 | case markdown = "\u{e685}" 130 | case lightBulb = "\u{e684}" 131 | case megaphone = "\u{e683}" 132 | case kebabHorizontal = "\u{e682}" 133 | case package = "\u{e681}" 134 | case jersey = "\u{e680}" 135 | case info = "\u{e67f}" 136 | case logoGist = "\u{e67e}" 137 | case mailRead = "\u{e67d}" 138 | case mention = "\u{e67c}" 139 | case mail = "\u{e67b}" 140 | case gear = "\u{e67a}" 141 | case fileDirectory = "\u{e679}" 142 | case key = "\u{e678}" 143 | case inbox = "\u{e677}" 144 | case law = "\u{e676}" 145 | case gitMerge = "\u{e675}" 146 | case location = "\u{e674}" 147 | case link = "\u{e673}" 148 | case linkExternal = "\u{e672}" 149 | case issueOpened = "\u{e671}" 150 | case gist = "\u{e670}" 151 | case keyboard = "\u{e66f}" 152 | case kebabVertical = "\u{e66e}" 153 | case issueReopened = "\u{e66d}" 154 | case eye = "\u{e66c}" 155 | case fileSubmodule = "\u{e66b}" 156 | case hubot = "\u{e66a}" 157 | case fileZip = "\u{e669}" 158 | case issueClosed = "\u{e668}" 159 | case heart = "\u{e667}" 160 | case graph = "\u{e666}" 161 | case history = "\u{e665}" 162 | case gitBranch = "\u{e664}" 163 | case globe = "\u{e663}" 164 | case file = "\u{e662}" 165 | case diff = "\u{e661}" 166 | case dashboard = "\u{e660}" 167 | case gitPullRequest = "\u{e65f}" 168 | case githubAction = "\u{e65e}" 169 | case gistSecret = "\u{e65d}" 170 | case gitCommit = "\u{e65c}" 171 | case flame = "\u{e65b}" 172 | case gift = "\u{e65a}" 173 | case foldDown = "\u{e659}" 174 | case filePdf = "\u{e658}" 175 | case fileCode = "\u{e657}" 176 | case fileBinary = "\u{e656}" 177 | case eyeClosed = "\u{e655}" 178 | case fileSymlinkFile = "\u{e654}" 179 | case diffModified = "\u{e653}" 180 | case fileSymlinkDirectory = "\u{e652}" 181 | case ellipsis = "\u{e651}" 182 | case clippy = "\u{e650}" 183 | case deviceMobile = "\u{e64f}" 184 | case fileMedia = "\u{e64e}" 185 | case commentDiscussion = "\u{e64d}" 186 | case diffIgnored = "\u{e64c}" 187 | case diffRenamed = "\u{e64b}" 188 | case deviceCameraVideo = "\u{e64a}" 189 | case diffRemoved = "\u{e649}" 190 | case dash = "\u{e648}" 191 | case comment = "\u{e647}" 192 | case creditCard = "\u{e646}" 193 | case cloudUpload = "\u{e645}" 194 | case deviceDesktop = "\u{e644}" 195 | case deviceCamera = "\u{e643}" 196 | case database = "\u{e642}" 197 | case desktopDownload = "\u{e641}" 198 | case cloudDownload = "\u{e640}" 199 | case diffAdded = "\u{e63f}" 200 | case code = "\u{e63e}" 201 | case broadcast = "\u{e63d}" 202 | case circuitBoard = "\u{e63c}" 203 | case chevronUp = "\u{e63b}" 204 | case chevronLeft = "\u{e63a}" 205 | case clock = "\u{e639}" 206 | case circleSlash = "\u{e638}" 207 | case chevronRight = "\u{e637}" 208 | case bold = "\u{e636}" 209 | case checklist = "\u{e635}" 210 | case chevronDown = "\u{e634}" 211 | case calendar = "\u{e633}" 212 | case bug = "\u{e632}" 213 | case check = "\u{e631}" 214 | case browser = "\u{e630}" 215 | case arrowSmallUp = "\u{e62f}" 216 | case book = "\u{e62e}" 217 | case briefcase = "\u{e62d}" 218 | case bell = "\u{e62c}" 219 | case bookmark = "\u{e62b}" 220 | case beaker = "\u{e62a}" 221 | case arrowUp = "\u{e629}" 222 | case arrowSmallLeft = "\u{e628}" 223 | case arrowSmallRight = "\u{e627}" 224 | case arrowSmallDown = "\u{e626}" 225 | case arrowDown = "\u{e625}" 226 | case arrowRight = "\u{e624}" 227 | case arrowLeft = "\u{e623}" 228 | case arrowBoth = "\u{e622}" 229 | case archive = "\u{e621}" 230 | case alert = "\u{e620}" 231 | } 232 | -------------------------------------------------------------------------------- /Example/EFIconFont/GalleryViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // GalleryViewController.swift 3 | // EFIconFont_Example 4 | // 5 | // Created by EyreFree on 2019/3/24. 6 | // Copyright © 2019年 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import EFIconFont 11 | 12 | class GalleryViewController: UIViewController { 13 | 14 | let icons: [(key: String, value: EFIconFontProtocol)] 15 | 16 | init(title: String, dictionary: [(key: String, value: EFIconFontProtocol)]) { 17 | self.icons = dictionary 18 | super.init(nibName: nil, bundle: nil) 19 | self.navigationItem.title = title 20 | } 21 | 22 | required init?(coder aDecoder: NSCoder) { 23 | fatalError("init(coder:) has not been implemented") 24 | } 25 | 26 | override func viewDidLoad() { 27 | super.viewDidLoad() 28 | 29 | setupControls() 30 | } 31 | 32 | func setupControls() { 33 | let textView = UITextView() 34 | if #available(iOS 11.0, *) { 35 | textView.contentInsetAdjustmentBehavior = .never 36 | } 37 | textView.contentInset = UIEdgeInsets(top: CGFloat.statusAndNavigationHeight, left: 0, bottom: 0, right: 0) 38 | textView.contentOffset = CGPoint(x: 0, y: -CGFloat.statusAndNavigationHeight) 39 | textView.isEditable = false 40 | let content: NSMutableAttributedString = NSMutableAttributedString() 41 | for item in icons { 42 | if let attributedString = item.value.attributedString(size: 24) { 43 | content.append(attributedString) 44 | } 45 | } 46 | textView.attributedText = content 47 | textView.frame = CGRect(origin: CGPoint.zero, size: UIScreen.main.bounds.size) 48 | self.view.addSubview(textView) 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /Example/EFIconFont/Images.xcassets/AppIcon.appiconset/120-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/Example/EFIconFont/Images.xcassets/AppIcon.appiconset/120-1.png -------------------------------------------------------------------------------- /Example/EFIconFont/Images.xcassets/AppIcon.appiconset/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/Example/EFIconFont/Images.xcassets/AppIcon.appiconset/120.png -------------------------------------------------------------------------------- /Example/EFIconFont/Images.xcassets/AppIcon.appiconset/180.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/Example/EFIconFont/Images.xcassets/AppIcon.appiconset/180.png -------------------------------------------------------------------------------- /Example/EFIconFont/Images.xcassets/AppIcon.appiconset/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/Example/EFIconFont/Images.xcassets/AppIcon.appiconset/40.png -------------------------------------------------------------------------------- /Example/EFIconFont/Images.xcassets/AppIcon.appiconset/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/Example/EFIconFont/Images.xcassets/AppIcon.appiconset/58.png -------------------------------------------------------------------------------- /Example/EFIconFont/Images.xcassets/AppIcon.appiconset/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/Example/EFIconFont/Images.xcassets/AppIcon.appiconset/60.png -------------------------------------------------------------------------------- /Example/EFIconFont/Images.xcassets/AppIcon.appiconset/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/Example/EFIconFont/Images.xcassets/AppIcon.appiconset/80.png -------------------------------------------------------------------------------- /Example/EFIconFont/Images.xcassets/AppIcon.appiconset/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/Example/EFIconFont/Images.xcassets/AppIcon.appiconset/87.png -------------------------------------------------------------------------------- /Example/EFIconFont/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "20x20", 5 | "idiom" : "iphone", 6 | "filename" : "40.png", 7 | "scale" : "2x" 8 | }, 9 | { 10 | "size" : "20x20", 11 | "idiom" : "iphone", 12 | "filename" : "60.png", 13 | "scale" : "3x" 14 | }, 15 | { 16 | "size" : "29x29", 17 | "idiom" : "iphone", 18 | "filename" : "58.png", 19 | "scale" : "2x" 20 | }, 21 | { 22 | "size" : "29x29", 23 | "idiom" : "iphone", 24 | "filename" : "87.png", 25 | "scale" : "3x" 26 | }, 27 | { 28 | "size" : "40x40", 29 | "idiom" : "iphone", 30 | "filename" : "80.png", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "size" : "40x40", 35 | "idiom" : "iphone", 36 | "filename" : "120-1.png", 37 | "scale" : "3x" 38 | }, 39 | { 40 | "size" : "60x60", 41 | "idiom" : "iphone", 42 | "filename" : "120.png", 43 | "scale" : "2x" 44 | }, 45 | { 46 | "size" : "60x60", 47 | "idiom" : "iphone", 48 | "filename" : "180.png", 49 | "scale" : "3x" 50 | }, 51 | { 52 | "idiom" : "ios-marketing", 53 | "size" : "1024x1024", 54 | "scale" : "1x" 55 | } 56 | ], 57 | "info" : { 58 | "version" : 1, 59 | "author" : "xcode" 60 | } 61 | } -------------------------------------------------------------------------------- /Example/EFIconFont/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /Example/EFIconFont/SubViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SubViewController.swift 3 | // EFIconFont 4 | // 5 | // Created by EyreFree on 03/19/2019. 6 | // Copyright (c) 2019 EyreFree. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import EFIconFont 11 | 12 | class SubViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 13 | 14 | let tableView: UITableView = UITableView() 15 | let icons: [(key: String, value: EFIconFontProtocol)] 16 | 17 | init(title: String, dictionary: [String : EFIconFontProtocol]) { 18 | self.icons = Array(dictionary).sorted(by: { (left, right) -> Bool in 19 | return left.key < right.key 20 | }) 21 | super.init(nibName: nil, bundle: nil) 22 | self.navigationItem.title = title 23 | } 24 | 25 | required init?(coder aDecoder: NSCoder) { 26 | fatalError("init(coder:) has not been implemented") 27 | } 28 | 29 | override func viewDidLoad() { 30 | super.viewDidLoad() 31 | 32 | setupControls() 33 | } 34 | 35 | func setupControls() { 36 | self.navigationItem.rightBarButtonItem = UIBarButtonItem( 37 | image: EFIconFontFontAwesomeSolid.th.image(size: CGSize(width: 24, height: 24)), 38 | style: UIBarButtonItem.Style.plain, 39 | target: self, 40 | action: #selector(rightBarButtonClicked) 41 | ) 42 | 43 | if #available(iOS 11.0, *) { 44 | tableView.contentInsetAdjustmentBehavior = .never 45 | } 46 | tableView.contentInset = UIEdgeInsets(top: CGFloat.statusAndNavigationHeight, left: 0, bottom: 0, right: 0) 47 | tableView.contentOffset = CGPoint(x: 0, y: -CGFloat.statusAndNavigationHeight) 48 | tableView.estimatedRowHeight = 0 49 | tableView.estimatedSectionHeaderHeight = 0 50 | tableView.estimatedSectionFooterHeight = 0 51 | tableView.delegate = self 52 | tableView.dataSource = self 53 | tableView.frame = CGRect(x: 0, y: 0, width: CGFloat.screenWidth, height: CGFloat.screenHeight) 54 | self.view.addSubview(tableView) 55 | } 56 | 57 | @objc func rightBarButtonClicked() { 58 | let galleryViewController: GalleryViewController = GalleryViewController( 59 | title: navigationItem.title ?? "", 60 | dictionary: icons 61 | ) 62 | self.navigationController?.pushViewController(galleryViewController, animated: true) 63 | } 64 | 65 | // MARK:- UITableView 66 | func numberOfSections(in tableView: UITableView) -> Int { 67 | return 1 68 | } 69 | 70 | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 71 | return icons.count 72 | } 73 | 74 | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 75 | let reuseIdentifier: String = "subTitle" 76 | let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier) ?? UITableViewCell(style: UITableViewCell.CellStyle.value1, reuseIdentifier: reuseIdentifier) 77 | cell.detailTextLabel?.font = icons[indexPath.row].value.font(size: 24) 78 | cell.textLabel?.text = ".\(icons[indexPath.row].key)" 79 | cell.detailTextLabel?.text = icons[indexPath.row].value.unicode 80 | return cell 81 | } 82 | 83 | func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 84 | return 45 85 | } 86 | 87 | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 88 | tableView.deselectRow(at: indexPath, animated: true) 89 | 90 | let item = icons[indexPath.row] 91 | let detailViewController: DetailViewController = DetailViewController(title: item.key, icon: item.value) 92 | self.navigationController?.pushViewController(detailViewController, animated: true) 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /Example/EFIconFont/UIDevice+.swift: -------------------------------------------------------------------------------- 1 | // 2 | // UIDevice+.swift 3 | // EFIconFont_Example 4 | // 5 | // Created by EyreFree on 2019/3/23. 6 | // Copyright © 2019年 CocoaPods. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | enum UIDeviceGeneration: Int { 12 | case other = 0 13 | case iPhone5_5S_5C = 1 14 | case iPhone6_6S_7_8 = 2 15 | case iPhone6P_6SP_7P_8P = 3 16 | case iPhoneX_XS = 4 17 | case iPhoneXSMax = 5 18 | case iPhoneXR = 6 19 | } 20 | 21 | extension UIDevice { 22 | 23 | static let generation: UIDeviceGeneration = { 24 | if UIDevice().userInterfaceIdiom == .phone { 25 | switch UIScreen.main.nativeBounds.height { 26 | case 1136: 27 | return UIDeviceGeneration.iPhone5_5S_5C 28 | case 1334: 29 | return UIDeviceGeneration.iPhone6_6S_7_8 30 | case 1920, 2208: 31 | return UIDeviceGeneration.iPhone6P_6SP_7P_8P 32 | case 2436: 33 | return UIDeviceGeneration.iPhoneX_XS 34 | case 2688: 35 | return UIDeviceGeneration.iPhoneXSMax 36 | case 1792: 37 | return UIDeviceGeneration.iPhoneXR 38 | default: 39 | return UIDeviceGeneration.other 40 | } 41 | } 42 | return UIDeviceGeneration.other 43 | }() 44 | 45 | static let isiPhoneX: Bool = { 46 | return UIDeviceGeneration.iPhoneX_XS == generation 47 | || UIDeviceGeneration.iPhoneXSMax == generation 48 | || UIDeviceGeneration.iPhoneXR == generation 49 | }() 50 | } 51 | -------------------------------------------------------------------------------- /Example/EFIconFont/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // EFIconFont 4 | // 5 | // Created by EyreFree on 03/19/2019. 6 | // Copyright (c) 2019 EyreFree. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import EFIconFont 11 | 12 | class ViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 13 | 14 | let tableView: UITableView = UITableView() 15 | let iconfonts: [(name: String, `enum`: String, dictionary: [String : EFIconFontProtocol])] = [ 16 | ("AntDesign", "\(EFIconFont.antDesign)", EFIconFont.antDesign.dictionary), 17 | ("AwesomeBrands", "\(EFIconFont.awesomeBrands)", EFIconFont.awesomeBrands.dictionary), 18 | ("AwesomeRegular", "\(EFIconFont.awesomeRegular)", EFIconFont.awesomeRegular.dictionary), 19 | ("AwesomeSolid", "\(EFIconFont.awesomeSolid)", EFIconFont.awesomeSolid.dictionary), 20 | ("ElusiveIcons", "\(EFIconFont.elusiveIcons)", EFIconFont.elusiveIcons.dictionary), 21 | ("IcoMoon", "\(EFIconFont.icomoon)", EFIconFont.icomoon.dictionary), 22 | ("Ionicons", "\(EFIconFont.ionicons)", EFIconFont.ionicons.dictionary), 23 | ("MaterialIcons", "\(EFIconFont.materialIcons)", EFIconFont.materialIcons.dictionary), 24 | ("Meteocons", "\(EFIconFont.meteocons)", EFIconFont.meteocons.dictionary), 25 | ("MetrizeIcons", "\(EFIconFont.metrizeIcons)", EFIconFont.metrizeIcons.dictionary), 26 | ("Octicons", "\(EFIconFont.octicons)", EFIconFont.octicons.dictionary), 27 | ("OpenIconic", "\(EFIconFont.openIconic)", EFIconFont.openIconic.dictionary), 28 | ("Typicons", "\(EFIconFont.typicons)", EFIconFont.typicons.dictionary) 29 | ] 30 | 31 | override func viewDidLoad() { 32 | super.viewDidLoad() 33 | 34 | self.navigationItem.title = "EFIconFont" 35 | setupControls() 36 | } 37 | 38 | func setupControls() { 39 | if #available(iOS 11.0, *) { 40 | tableView.contentInsetAdjustmentBehavior = .never 41 | } 42 | tableView.contentInset = UIEdgeInsets(top: CGFloat.statusAndNavigationHeight, left: 0, bottom: 0, right: 0) 43 | tableView.contentOffset = CGPoint(x: 0, y: -CGFloat.statusAndNavigationHeight) 44 | tableView.estimatedRowHeight = 0 45 | tableView.estimatedSectionHeaderHeight = 0 46 | tableView.estimatedSectionFooterHeight = 0 47 | tableView.delegate = self 48 | tableView.dataSource = self 49 | tableView.frame = CGRect(x: 0, y: 0, width: CGFloat.screenWidth, height: CGFloat.screenHeight) 50 | self.view.addSubview(tableView) 51 | } 52 | 53 | // MARK:- UITableView 54 | func numberOfSections(in tableView: UITableView) -> Int { 55 | return 1 56 | } 57 | 58 | func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 59 | return iconfonts.count 60 | } 61 | 62 | func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 63 | let reuseIdentifier: String = "Title" 64 | let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: reuseIdentifier) ?? UITableViewCell(style: UITableViewCell.CellStyle.default, reuseIdentifier: reuseIdentifier) 65 | cell.textLabel?.text = iconfonts[indexPath.row].name 66 | return cell 67 | } 68 | 69 | func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { 70 | return 45 71 | } 72 | 73 | func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { 74 | tableView.deselectRow(at: indexPath, animated: true) 75 | 76 | let item = iconfonts[indexPath.row] 77 | let title: String = item.enum 78 | let subViewController: SubViewController = SubViewController(title: title, dictionary: item.dictionary) 79 | self.navigationController?.pushViewController(subViewController, animated: true) 80 | } 81 | } 82 | -------------------------------------------------------------------------------- /Example/EFIconFont/octicons.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/XiangWuShuo/EFIconFont/a970c19a9319e9f5bfaba3e8b5fcaa5c04cae462/Example/EFIconFont/octicons.ttf -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | platform :ios, '8.0' 2 | use_frameworks! 3 | 4 | target 'EFIconFont_Example' do 5 | pod 'EFIconFont', :subspecs => ['Complete'], :path => '../' 6 | 7 | target 'EFIconFont_Tests' do 8 | inherit! :search_paths 9 | 10 | 11 | end 12 | end 13 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - EFIconFont/AntDesign (0.5.1): 3 | - EFIconFont/Core 4 | - EFIconFont/Complete (0.5.1): 5 | - EFIconFont/AntDesign 6 | - EFIconFont/Core 7 | - EFIconFont/ElusiveIcons 8 | - EFIconFont/FontAwesome 9 | - EFIconFont/IcoMoon 10 | - EFIconFont/Ionicons 11 | - EFIconFont/MaterialIcons 12 | - EFIconFont/Meteocons 13 | - EFIconFont/MetrizeIcons 14 | - EFIconFont/OpenIconic 15 | - EFIconFont/Typicons 16 | - EFIconFont/Core (0.5.1) 17 | - EFIconFont/ElusiveIcons (0.5.1): 18 | - EFIconFont/Core 19 | - EFIconFont/FontAwesome (0.5.1): 20 | - EFIconFont/Core 21 | - EFIconFont/IcoMoon (0.5.1): 22 | - EFIconFont/Core 23 | - EFIconFont/Ionicons (0.5.1): 24 | - EFIconFont/Core 25 | - EFIconFont/MaterialIcons (0.5.1): 26 | - EFIconFont/Core 27 | - EFIconFont/Meteocons (0.5.1): 28 | - EFIconFont/Core 29 | - EFIconFont/MetrizeIcons (0.5.1): 30 | - EFIconFont/Core 31 | - EFIconFont/OpenIconic (0.5.1): 32 | - EFIconFont/Core 33 | - EFIconFont/Typicons (0.5.1): 34 | - EFIconFont/Core 35 | 36 | DEPENDENCIES: 37 | - EFIconFont/Complete (from `../`) 38 | 39 | EXTERNAL SOURCES: 40 | EFIconFont: 41 | :path: "../" 42 | 43 | SPEC CHECKSUMS: 44 | EFIconFont: 8f06f55508c681f057806da7ed798c67318180a3 45 | 46 | PODFILE CHECKSUM: 377b34526d3e9857b28e9885a58c59c640f11ab8 47 | 48 | COCOAPODS: 1.7.5 49 | -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/EFIconFont.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "EFIconFont", 3 | "version": "0.5.1", 4 | "summary": "Yet another stupid wrapper of icon font.", 5 | "description": "An ordinary iconfont cocoapods package helps you to use iconfont more easily in your project, in Swift.", 6 | "homepage": "https://github.com/EyreFree/EFIconFont", 7 | "screenshots": "https://github.com/EFPrefix/EFIconFont/blob/master/Assets/EFIconFont.png?raw=true", 8 | "license": { 9 | "type": "MIT", 10 | "file": "LICENSE" 11 | }, 12 | "authors": { 13 | "EyreFree": "eyrefree@eyrefree.org" 14 | }, 15 | "source": { 16 | "git": "https://github.com/EyreFree/EFIconFont.git", 17 | "tag": "0.5.1" 18 | }, 19 | "social_media_url": "https://twitter.com/EyreFree777", 20 | "platforms": { 21 | "ios": "8.0" 22 | }, 23 | "default_subspecs": "Core", 24 | "subspecs": [ 25 | { 26 | "name": "Core", 27 | "source_files": "EFIconFont/Classes/Core/**/*" 28 | }, 29 | { 30 | "name": "AntDesign", 31 | "source_files": "EFIconFont/Classes/AntDesign/**/*", 32 | "resources": "EFIconFont/Assets/AntDesign/**/*", 33 | "dependencies": { 34 | "EFIconFont/Core": [ 35 | 36 | ] 37 | } 38 | }, 39 | { 40 | "name": "ElusiveIcons", 41 | "source_files": "EFIconFont/Classes/ElusiveIcons/**/*", 42 | "resources": "EFIconFont/Assets/ElusiveIcons/**/*", 43 | "dependencies": { 44 | "EFIconFont/Core": [ 45 | 46 | ] 47 | } 48 | }, 49 | { 50 | "name": "FontAwesome", 51 | "source_files": "EFIconFont/Classes/FontAwesome/**/*", 52 | "resources": "EFIconFont/Assets/FontAwesome/**/*", 53 | "dependencies": { 54 | "EFIconFont/Core": [ 55 | 56 | ] 57 | } 58 | }, 59 | { 60 | "name": "IcoMoon", 61 | "source_files": "EFIconFont/Classes/IcoMoon/**/*", 62 | "resources": "EFIconFont/Assets/IcoMoon/**/*", 63 | "dependencies": { 64 | "EFIconFont/Core": [ 65 | 66 | ] 67 | } 68 | }, 69 | { 70 | "name": "Ionicons", 71 | "source_files": "EFIconFont/Classes/Ionicons/**/*", 72 | "resources": "EFIconFont/Assets/Ionicons/**/*", 73 | "dependencies": { 74 | "EFIconFont/Core": [ 75 | 76 | ] 77 | } 78 | }, 79 | { 80 | "name": "MaterialIcons", 81 | "source_files": "EFIconFont/Classes/MaterialIcons/**/*", 82 | "resources": "EFIconFont/Assets/MaterialIcons/**/*", 83 | "dependencies": { 84 | "EFIconFont/Core": [ 85 | 86 | ] 87 | } 88 | }, 89 | { 90 | "name": "Meteocons", 91 | "source_files": "EFIconFont/Classes/Meteocons/**/*", 92 | "resources": "EFIconFont/Assets/Meteocons/**/*", 93 | "dependencies": { 94 | "EFIconFont/Core": [ 95 | 96 | ] 97 | } 98 | }, 99 | { 100 | "name": "MetrizeIcons", 101 | "source_files": "EFIconFont/Classes/MetrizeIcons/**/*", 102 | "resources": "EFIconFont/Assets/MetrizeIcons/**/*", 103 | "dependencies": { 104 | "EFIconFont/Core": [ 105 | 106 | ] 107 | } 108 | }, 109 | { 110 | "name": "OpenIconic", 111 | "source_files": "EFIconFont/Classes/OpenIconic/**/*", 112 | "resources": "EFIconFont/Assets/OpenIconic/**/*", 113 | "dependencies": { 114 | "EFIconFont/Core": [ 115 | 116 | ] 117 | } 118 | }, 119 | { 120 | "name": "Typicons", 121 | "source_files": "EFIconFont/Classes/Typicons/**/*", 122 | "resources": "EFIconFont/Assets/Typicons/**/*", 123 | "dependencies": { 124 | "EFIconFont/Core": [ 125 | 126 | ] 127 | } 128 | }, 129 | { 130 | "name": "Complete", 131 | "dependencies": { 132 | "EFIconFont/Core": [ 133 | 134 | ], 135 | "EFIconFont/AntDesign": [ 136 | 137 | ], 138 | "EFIconFont/ElusiveIcons": [ 139 | 140 | ], 141 | "EFIconFont/FontAwesome": [ 142 | 143 | ], 144 | "EFIconFont/IcoMoon": [ 145 | 146 | ], 147 | "EFIconFont/Ionicons": [ 148 | 149 | ], 150 | "EFIconFont/MaterialIcons": [ 151 | 152 | ], 153 | "EFIconFont/Meteocons": [ 154 | 155 | ], 156 | "EFIconFont/MetrizeIcons": [ 157 | 158 | ], 159 | "EFIconFont/OpenIconic": [ 160 | 161 | ], 162 | "EFIconFont/Typicons": [ 163 | 164 | ] 165 | } 166 | } 167 | ] 168 | } 169 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - EFIconFont/AntDesign (0.5.1): 3 | - EFIconFont/Core 4 | - EFIconFont/Complete (0.5.1): 5 | - EFIconFont/AntDesign 6 | - EFIconFont/Core 7 | - EFIconFont/ElusiveIcons 8 | - EFIconFont/FontAwesome 9 | - EFIconFont/IcoMoon 10 | - EFIconFont/Ionicons 11 | - EFIconFont/MaterialIcons 12 | - EFIconFont/Meteocons 13 | - EFIconFont/MetrizeIcons 14 | - EFIconFont/OpenIconic 15 | - EFIconFont/Typicons 16 | - EFIconFont/Core (0.5.1) 17 | - EFIconFont/ElusiveIcons (0.5.1): 18 | - EFIconFont/Core 19 | - EFIconFont/FontAwesome (0.5.1): 20 | - EFIconFont/Core 21 | - EFIconFont/IcoMoon (0.5.1): 22 | - EFIconFont/Core 23 | - EFIconFont/Ionicons (0.5.1): 24 | - EFIconFont/Core 25 | - EFIconFont/MaterialIcons (0.5.1): 26 | - EFIconFont/Core 27 | - EFIconFont/Meteocons (0.5.1): 28 | - EFIconFont/Core 29 | - EFIconFont/MetrizeIcons (0.5.1): 30 | - EFIconFont/Core 31 | - EFIconFont/OpenIconic (0.5.1): 32 | - EFIconFont/Core 33 | - EFIconFont/Typicons (0.5.1): 34 | - EFIconFont/Core 35 | 36 | DEPENDENCIES: 37 | - EFIconFont/Complete (from `../`) 38 | 39 | EXTERNAL SOURCES: 40 | EFIconFont: 41 | :path: "../" 42 | 43 | SPEC CHECKSUMS: 44 | EFIconFont: 8f06f55508c681f057806da7ed798c67318180a3 45 | 46 | PODFILE CHECKSUM: 377b34526d3e9857b28e9885a58c59c640f11ab8 47 | 48 | COCOAPODS: 1.7.5 49 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/EFIconFont/EFIconFont-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 0.5.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/EFIconFont/EFIconFont-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_EFIconFont : NSObject 3 | @end 4 | @implementation PodsDummy_EFIconFont 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/EFIconFont/EFIconFont-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/EFIconFont/EFIconFont-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double EFIconFontVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char EFIconFontVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/EFIconFont/EFIconFont.modulemap: -------------------------------------------------------------------------------- 1 | framework module EFIconFont { 2 | umbrella header "EFIconFont-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/EFIconFont/EFIconFont.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/EFIconFont 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 4 | PODS_BUILD_DIR = ${BUILD_DIR} 5 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 6 | PODS_ROOT = ${SRCROOT} 7 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 8 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 9 | SKIP_INSTALL = YES 10 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-EFIconFont_Example/Pods-EFIconFont_Example-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-EFIconFont_Example/Pods-EFIconFont_Example-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## EFIconFont 5 | 6 | Copyright (c) 2019 EyreFree 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy 9 | of this software and associated documentation files (the "Software"), to deal 10 | in the Software without restriction, including without limitation the rights 11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the Software is 13 | furnished to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in 16 | all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | THE SOFTWARE. 25 | 26 | Generated by CocoaPods - https://cocoapods.org 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-EFIconFont_Example/Pods-EFIconFont_Example-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Copyright (c) 2019 EyreFree <eyrefree@eyrefree.org> 18 | 19 | Permission is hereby granted, free of charge, to any person obtaining a copy 20 | of this software and associated documentation files (the "Software"), to deal 21 | in the Software without restriction, including without limitation the rights 22 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 23 | copies of the Software, and to permit persons to whom the Software is 24 | furnished to do so, subject to the following conditions: 25 | 26 | The above copyright notice and this permission notice shall be included in 27 | all copies or substantial portions of the Software. 28 | 29 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 30 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 31 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 32 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 33 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 34 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 35 | THE SOFTWARE. 36 | 37 | License 38 | MIT 39 | Title 40 | EFIconFont 41 | Type 42 | PSGroupSpecifier 43 | 44 | 45 | FooterText 46 | Generated by CocoaPods - https://cocoapods.org 47 | Title 48 | 49 | Type 50 | PSGroupSpecifier 51 | 52 | 53 | StringsTable 54 | Acknowledgements 55 | Title 56 | Acknowledgements 57 | 58 | 59 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-EFIconFont_Example/Pods-EFIconFont_Example-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_EFIconFont_Example : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_EFIconFont_Example 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-EFIconFont_Example/Pods-EFIconFont_Example-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | function on_error { 7 | echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" 8 | } 9 | trap 'on_error $LINENO' ERR 10 | 11 | if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then 12 | # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy 13 | # frameworks to, so exit 0 (signalling the script phase was successful). 14 | exit 0 15 | fi 16 | 17 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 18 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 19 | 20 | COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" 21 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 22 | 23 | # Used as a return value for each invocation of `strip_invalid_archs` function. 24 | STRIP_BINARY_RETVAL=0 25 | 26 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 27 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 28 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 29 | 30 | # Copies and strips a vendored framework 31 | install_framework() 32 | { 33 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 34 | local source="${BUILT_PRODUCTS_DIR}/$1" 35 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 36 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 37 | elif [ -r "$1" ]; then 38 | local source="$1" 39 | fi 40 | 41 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 42 | 43 | if [ -L "${source}" ]; then 44 | echo "Symlinked..." 45 | source="$(readlink "${source}")" 46 | fi 47 | 48 | # Use filter instead of exclude so missing patterns don't throw errors. 49 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 50 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 51 | 52 | local basename 53 | basename="$(basename -s .framework "$1")" 54 | binary="${destination}/${basename}.framework/${basename}" 55 | 56 | if ! [ -r "$binary" ]; then 57 | binary="${destination}/${basename}" 58 | elif [ -L "${binary}" ]; then 59 | echo "Destination binary is symlinked..." 60 | dirname="$(dirname "${binary}")" 61 | binary="${dirname}/$(readlink "${binary}")" 62 | fi 63 | 64 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 65 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 66 | strip_invalid_archs "$binary" 67 | fi 68 | 69 | # Resign the code if required by the build settings to avoid unstable apps 70 | code_sign_if_enabled "${destination}/$(basename "$1")" 71 | 72 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 73 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 74 | local swift_runtime_libs 75 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) 76 | for lib in $swift_runtime_libs; do 77 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 78 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 79 | code_sign_if_enabled "${destination}/${lib}" 80 | done 81 | fi 82 | } 83 | 84 | # Copies and strips a vendored dSYM 85 | install_dsym() { 86 | local source="$1" 87 | if [ -r "$source" ]; then 88 | # Copy the dSYM into a the targets temp dir. 89 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\"" 90 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}" 91 | 92 | local basename 93 | basename="$(basename -s .framework.dSYM "$source")" 94 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" 95 | 96 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 97 | if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then 98 | strip_invalid_archs "$binary" 99 | fi 100 | 101 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 102 | # Move the stripped file into its final destination. 103 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 104 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 105 | else 106 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing. 107 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" 108 | fi 109 | fi 110 | } 111 | 112 | # Copies the bcsymbolmap files of a vendored framework 113 | install_bcsymbolmap() { 114 | local bcsymbolmap_path="$1" 115 | local destination="${BUILT_PRODUCTS_DIR}" 116 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}"" 117 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" 118 | } 119 | 120 | # Signs a framework with the provided identity 121 | code_sign_if_enabled() { 122 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 123 | # Use the current code_sign_identity 124 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 125 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" 126 | 127 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 128 | code_sign_cmd="$code_sign_cmd &" 129 | fi 130 | echo "$code_sign_cmd" 131 | eval "$code_sign_cmd" 132 | fi 133 | } 134 | 135 | # Strip invalid architectures 136 | strip_invalid_archs() { 137 | binary="$1" 138 | # Get architectures for current target binary 139 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 140 | # Intersect them with the architectures we are building for 141 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 142 | # If there are no archs supported by this binary then warn the user 143 | if [[ -z "$intersected_archs" ]]; then 144 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 145 | STRIP_BINARY_RETVAL=0 146 | return 147 | fi 148 | stripped="" 149 | for arch in $binary_archs; do 150 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 151 | # Strip non-valid architectures in-place 152 | lipo -remove "$arch" -output "$binary" "$binary" 153 | stripped="$stripped $arch" 154 | fi 155 | done 156 | if [[ "$stripped" ]]; then 157 | echo "Stripped $binary of architectures:$stripped" 158 | fi 159 | STRIP_BINARY_RETVAL=1 160 | } 161 | 162 | 163 | if [[ "$CONFIGURATION" == "Debug" ]]; then 164 | install_framework "${BUILT_PRODUCTS_DIR}/EFIconFont/EFIconFont.framework" 165 | fi 166 | if [[ "$CONFIGURATION" == "Release" ]]; then 167 | install_framework "${BUILT_PRODUCTS_DIR}/EFIconFont/EFIconFont.framework" 168 | fi 169 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 170 | wait 171 | fi 172 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-EFIconFont_Example/Pods-EFIconFont_Example-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_EFIconFont_ExampleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_EFIconFont_ExampleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-EFIconFont_Example/Pods-EFIconFont_Example.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/EFIconFont" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/EFIconFont/EFIconFont.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "EFIconFont" 7 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-EFIconFont_Example/Pods-EFIconFont_Example.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_EFIconFont_Example { 2 | umbrella header "Pods-EFIconFont_Example-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-EFIconFont_Example/Pods-EFIconFont_Example.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/EFIconFont" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/EFIconFont/EFIconFont.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "EFIconFont" 7 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-EFIconFont_Tests/Pods-EFIconFont_Tests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-EFIconFont_Tests/Pods-EFIconFont_Tests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-EFIconFont_Tests/Pods-EFIconFont_Tests-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-EFIconFont_Tests/Pods-EFIconFont_Tests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_EFIconFont_Tests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_EFIconFont_Tests 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-EFIconFont_Tests/Pods-EFIconFont_Tests-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_EFIconFont_TestsVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_EFIconFont_TestsVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-EFIconFont_Tests/Pods-EFIconFont_Tests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/EFIconFont" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/EFIconFont/EFIconFont.framework/Headers" 4 | OTHER_LDFLAGS = $(inherited) -framework "EFIconFont" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-EFIconFont_Tests/Pods-EFIconFont_Tests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_EFIconFont_Tests { 2 | umbrella header "Pods-EFIconFont_Tests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-EFIconFont_Tests/Pods-EFIconFont_Tests.release.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/EFIconFont" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/EFIconFont/EFIconFont.framework/Headers" 4 | OTHER_LDFLAGS = $(inherited) -framework "EFIconFont" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | -------------------------------------------------------------------------------- /Example/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Example/Tests/Tests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | import EFIconFont 3 | 4 | class Tests: XCTestCase { 5 | 6 | override func setUp() { 7 | super.setUp() 8 | // Put setup code here. This method is called before the invocation of each test method in the class. 9 | } 10 | 11 | override func tearDown() { 12 | // Put teardown code here. This method is called after the invocation of each test method in the class. 13 | super.tearDown() 14 | } 15 | 16 | func testExample() { 17 | // This is an example of a functional test case. 18 | XCTAssert(true, "Pass") 19 | } 20 | 21 | func testPerformanceExample() { 22 | // This is an example of a performance test case. 23 | self.measure() { 24 | // Put the code you want to measure the time of here. 25 | } 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /Extend/fontawesome.md: -------------------------------------------------------------------------------- 1 | # FontAwesome 资源利用 2 | 3 | [FontAwesome](https://fontawesome.com) 上也有众多 IconFont 资源,我们可以通过如下步骤将我们需要的素材批量获取。 4 | 5 | ## 1. 查找免费图标 6 | 7 | 打开 [Free](https://fontawesome.com/icons?d=gallery&m=free) 分类页面,可以列举出当前 FontAwesome 所有的免费图标。 8 | 9 | ## 2. 获取字体文件 10 | 11 | 打开 [Download](https://fontawesome.com/how-to-use/on-the-web/setup/hosting-font-awesome-yourself) 页面,点击 “Font Awesome Free for the Web” 按钮,即可获取字体资源压缩包,解压后我们拿到 webfonts 目录下的三个字体文件 `fa-brands-400.ttf`、`fa-regular-400.ttf` 和 `fa-solid-900.ttf` 即可。 12 | 13 | ## 3. 获取字体名 14 | 15 | 同时这里我们需要用工具查看这三个 .ttf 文件对应的字体名称,这里我使用的是 [BirdFont](https://birdfont.org),详情可参考 [iOS 在 App 中使用自定义字体](https://juejin.im/post/5a3214f36fb9a0451238f744)。 16 | 17 | 三个字体文件对应的字体名如下: 18 | 19 | ``` 20 | fa-brands-400.ttf: Font Awesome 5 Brands 21 | fa-regular-400.ttf: Font Awesome 5 Brands 22 | fa-solid-900.ttf: Font Awesome 5 Brands 23 | ``` 24 | 25 | ![](https://github.com/EFPrefix/EFIconFont/blob/master/Assets/extend.png?raw=true) 26 | 27 | ## 4. Swift 代码生成 28 | 29 | 用 Chrome 打开 metadata 目录下的 icons.json 文件,打开 Chrome 开发者工具的 Console,在其中执行如下 `JavaScript` 脚本,即可获取三个 .ttf 文件对应的枚举结构,如下所示: 30 | 31 | ### fa-brands-400.ttf 32 | 33 | ```javascript 34 | function camelCase(text, separator) { 35 | var arr = text.split(separator); 36 | for(var i = 1; i < arr.length; i++) { 37 | var s = arr[i].slice(0, 1).toUpperCase(); 38 | var h = arr[i].slice(1); 39 | arr[i] = s + h; 40 | } 41 | return arr.join('') 42 | } 43 | 44 | var json = document.getElementsByTagName('pre')[0].innerText; 45 | var objs = JSON.parse(json); 46 | var result = "" 47 | for (var key in objs) { 48 | if (objs.hasOwnProperty(key)) { 49 | let item = objs[key] 50 | if (item.styles.includes("brands", 0)) { 51 | var name = key 52 | name = camelCase(name, ' ') 53 | name = camelCase(name, '-') 54 | var code = item.unicode 55 | result = result + "case " + name + " = " + "\"\\u{" + code + "}\"" + "\n" 56 | } 57 | } 58 | } 59 | console.log(result) 60 | ``` 61 | 62 | ### fa-regular-400.ttf 63 | 64 | ```javascript 65 | function camelCase(text, separator) { 66 | var arr = text.split(separator); 67 | for(var i = 1; i < arr.length; i++) { 68 | var s = arr[i].slice(0, 1).toUpperCase(); 69 | var h = arr[i].slice(1); 70 | arr[i] = s + h; 71 | } 72 | return arr.join('') 73 | } 74 | 75 | var json = document.getElementsByTagName('pre')[0].innerText; 76 | var objs = JSON.parse(json); 77 | var result = "" 78 | for (var key in objs) { 79 | if (objs.hasOwnProperty(key)) { 80 | let item = objs[key] 81 | if (item.styles.includes("regular", 0)) { 82 | var name = key 83 | name = camelCase(name, ' ') 84 | name = camelCase(name, '-') 85 | var code = item.unicode 86 | result = result + "case " + name + " = " + "\"\\u{" + code + "}\"" + "\n" 87 | } 88 | } 89 | } 90 | console.log(result) 91 | ``` 92 | 93 | ### fa-solid-900.ttf 94 | 95 | ```javascript 96 | function camelCase(text, separator) { 97 | var arr = text.split(separator); 98 | for(var i = 1; i < arr.length; i++) { 99 | var s = arr[i].slice(0, 1).toUpperCase(); 100 | var h = arr[i].slice(1); 101 | arr[i] = s + h; 102 | } 103 | return arr.join('') 104 | } 105 | 106 | var json = document.getElementsByTagName('pre')[0].innerText; 107 | var objs = JSON.parse(json); 108 | var result = "" 109 | for (var key in objs) { 110 | if (objs.hasOwnProperty(key)) { 111 | let item = objs[key] 112 | if (item.styles.includes("solid", 0)) { 113 | var name = key 114 | name = camelCase(name, ' ') 115 | name = camelCase(name, '-') 116 | var code = item.unicode 117 | result = result + "case " + name + " = " + "\"\\u{" + code + "}\"" + "\n" 118 | } 119 | } 120 | } 121 | console.log(result) 122 | ``` 123 | 124 | ![](https://github.com/EFPrefix/EFIconFont/blob/master/Assets/fontawesome.png?raw=true) 125 | 126 | ## 5. 最后 127 | 128 | 本教程思路仅供学习交流,FontAwesome 上并非所有字体都能够免费商业使用,大家在使用的同时务必注意版权问题,未标明免费商业使用的还请联系对应创作者,否则由此引发的后果将由您自己承担。 129 | -------------------------------------------------------------------------------- /Extend/iconfont.md: -------------------------------------------------------------------------------- 1 | # iconfont 资源利用 2 | 3 | 阿里 [iconfont.cn](https://www.iconfont.cn/) 上有众多 IconFont 资源,我们可以通过如下步骤将我们需要的素材批量获取。 4 | 5 | ## 1. 批量加入购物车 6 | 7 | 目前 iconfont.cn 上有非常多的图标库,能满足各行、各业、开发、设计的需求,但图标库目前没有提供批量添加购物车的功能,正常操作的话,我们只能手动一个一个加购物车...😂 8 | 9 | 我们可以打开某个图标库的页面,然后打开 Chrome 浏览器的开发者工具,在 Consol 执行如下代码,即可将该图标库所有图标加入购物车: 10 | 11 | ```javascript 12 | var icon=document.getElementsByClassName('icon-gouwuche1');for(var i=0;i 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![](https://github.com/EFPrefix/EFIconFont/blob/master/Assets/EFIconFont.png?raw=true) 2 | 3 |

4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |

30 | 31 | An ordinary iconfont cocoapods package helps you to use iconfont more easily in your project, in Swift. 32 | 33 | > [中文介绍](https://github.com/EFPrefix/EFIconFont/blob/master/README_CN.md) 34 | 35 | ## Preview 36 | 37 | | 1 | 2 | 3 | 4 | 38 | |:-:|:-:|:-:|:-:| 39 | | ![](https://github.com/EFPrefix/EFIconFont/blob/master/Assets/1.png?raw=true) | ![](https://github.com/EFPrefix/EFIconFont/blob/master/Assets/2.png?raw=true) | ![](https://github.com/EFPrefix/EFIconFont/blob/master/Assets/3.png?raw=true) | ![](https://github.com/EFPrefix/EFIconFont/blob/master/Assets/4.png?raw=true) | 40 | 41 | ## Example 42 | 43 | To run the example project manually, clone the repo, demo is in the 'Example' folder, then open `EFIconFont.xcworkspace` with Xcode and select the target you want, run. 44 | 45 | Or you can run the following command in terminal: 46 | 47 | ```bash 48 | git clone git@github.com:EFPrefix/EFIconFont.git; cd EFIconFont/Example; pod install; open EFIconFont.xcworkspace 49 | ``` 50 | 51 | ## Requirements 52 | 53 | | Version | Needs | 54 | |:--------|:--------------------------------------| 55 | | <0.5 | Xcode 10.0+
Swift 4.2+
iOS 8.0+ | 56 | | >=0.5 | Xcode 10.2+
Swift 5.0+
iOS 8.0+ | 57 | 58 | ## Installation 59 | 60 | EFIconFont is available through [CocoaPods](https://cocoapods.org). To install it, simply add the following line to your Podfile: 61 | 62 | ```ruby 63 | pod 'EFIconFont' 64 | ``` 65 | 66 | You can get built-in iconfonts with `subspecs`, for example you will get icons of `AntDesign` and `FontAwesome` by the following way: 67 | 68 | ```ruby 69 | pod 'EFIconFont', :subspecs => ['AntDesign', 'FontAwesome'] 70 | ``` 71 | 72 | You can also choose to get all built-in packs by using `Complete` subspec: 73 | 74 | ```ruby 75 | pod 'EFIconFont', :subspecs => ['Complete'] 76 | ``` 77 | 78 | Then, run the following command: 79 | 80 | ```bash 81 | pod install 82 | ``` 83 | 84 | ## Use 85 | 86 | ### 1. Core 87 | 88 | Objects that implement the `EFIconFontProtocol` protocol can transform themselves into `NSAttributedString` or `UIImage`, which is as follows: 89 | 90 | ```swift 91 | public protocol EFIconFontProtocol { 92 | 93 | // `name` is not necessarily equal to .ttf file name 94 | var name: String { get } 95 | 96 | // `path` is path of .ttf file 97 | var path: String { get } 98 | 99 | // `attributes` is style of icon 100 | var attributes: [NSAttributedString.Key : Any] { set get } 101 | 102 | // `unicode` is unique identifier of particular icon 103 | var unicode: String { get } 104 | } 105 | ``` 106 | 107 | - name: Font name, not necessarily equal to .ttf file name, you can use [BirdFont](https://birdfont.org) to see the `Name` attribute of the file; 108 | - path: Filepath of `.ttf` file, usually you can get it through code like `Bundle.main.path(forResource: name, ofType: "ttf")`(If filename is same as name, you can use the default implementation and do not need to implement this property); 109 | - attributes: Attributes of icon(You can use the default implementation and do not need to implement this property); 110 | - unicode: The unique unicode of an icon. 111 | 112 | Objects that implement the protocol can be converted to strings and images by calling the following methods, you can also change the foreground color and size: 113 | 114 | ```swift 115 | // MARK:- String 116 | func attributedString(size fontSize: CGFloat, attributes: [NSAttributedString.Key : Any]?) -> NSAttributedString? 117 | func attributedString(size fontSize: CGFloat, foregroundColor: UIColor? = nil, backgroundColor: UIColor? = nil) -> NSAttributedString? 118 | 119 | // MARK:- Image 120 | func image(size fontSize: CGFloat, attributes: [NSAttributedString.Key : Any]?) -> UIImage? 121 | func image(size fontSize: CGFloat, foregroundColor: UIColor? = nil, backgroundColor: UIColor? = nil) -> UIImage? 122 | func image(size imageSize: CGSize, attributes: [NSAttributedString.Key : Any]?) -> UIImage? 123 | func image(size imageSize: CGSize, foregroundColor: UIColor? = nil, backgroundColor: UIColor? = nil) -> UIImage? 124 | ``` 125 | 126 | ### 2. Built-in iconfont packs 127 | 128 | This pod has integrated some free resources in the subspecs, like `AntDesign` and `FontAwesome`. It can be imported by who need to use it. The usage methods are as follows, you can get a return value of `EFIconFontProtocol`: 129 | 130 | ```swift 131 | EFIconFontAntDesign.addteam 132 | ``` 133 | 134 | You can use the object which follow `EFIconFontProtocol` to get `NSAttributedString` and `UIImage`: 135 | 136 | ```swift 137 | EFIconFontAntDesign.addteam.attributedString(size: 24) 138 | EFIconFontFontAwesomeBrands.adobe.attributedString(size: 32, foregroundColor: UIColor.white, backgroundColor: UIColor.green) 139 | EFIconFontFontAwesomeRegular.addressBook.image(size: 24, foregroundColor: UIColor.red) 140 | EFIconFontFontAwesomeSolid.alignLeft.image(size: CGSize(width: 36, height: 48), foregroundColor: UIColor.white) 141 | ``` 142 | 143 | You can also get all icons of a `EFIconFontCaseIterableProtocol` object with type `[String : EFIconFontProtocol]` by the following code: 144 | 145 | ```swift 146 | EFIconFont.antDesign.dictionary 147 | ``` 148 | 149 | PS: Although the libraries below are all free, please make sure that your way of using the icon conforms to the original author's protocol specification: 150 | 151 | | Name | Version | Count | File Size | Description | License | Preview | 152 | |:-|:-|:-|:-|:-|:-|:-| 153 | | AntDesign | | 557 | 127KB | Ant Design | [MIT](https://github.com/ant-design/ant-design/blob/master/LICENSE) | [iconfont.cn](https://www.iconfont.cn/collections/detail?cid=9402) | 154 | | ElusiveIcons | 2.0.0 | 304 | 53KB | Elusive Icons | [OFL](http://elusiveicons.com/license/) | [elusiveicons.com](http://elusiveicons.com/icons/) | 155 | | FontAwesome | 5.8.1 | 1516 | 356KB | Font Awesome | [Font Awesome Free License](https://fontawesome.com/license/free) | [fontawesome.com](https://fontawesome.com/icons?d=gallery&m=free) | 156 | | IcoMoon | 1.0 | 490 | 94KB | IcoMoon free icons | [CC BY 4.0 / GPL](https://github.com/Keyamoon/IcoMoon-Free/blob/master/License.txt) | [ionicons.com](https://icomoon.io/#preview-free) | 157 | | Ionicons | 4.5.5 | 696 | 143KB | Ionicons | [MIT](https://github.com/ionic-team/ionicons/blob/master/LICENSE) | [ionicons.com](https://ionicons.com/) | 158 | | MaterialIcons | 3.0.1 | 932 | 128KB | Google's material design icons | [Apache-2.0](https://github.com/google/material-design-icons/blob/master/LICENSE) | [material.io](https://material.io/tools/icons) | 159 | | Meteocons | | 47 | 15KB | A set of weather icons, it containing 40+ icons | [Free](https://www.alessioatzeni.com/meteocons/) | [alessioatzeni.com/meteocons](https://www.alessioatzeni.com/meteocons/) | 160 | | MetrizeIcons | 1.0 | 300 | 74KB | Free Collection of 300 Metro-Style Icons for Designers and Developers | [Free](https://www.alessioatzeni.com/metrize-icons/) | [alessioatzeni.com/metrize-icons](https://www.alessioatzeni.com/metrize-icons/) | 161 | | OpenIconic | 1.1.1 | 223 | 33KB | An open source icon set with 223 marks in SVG | [OFL](https://github.com/iconic/open-iconic/blob/master/FONT-LICENSE) | [useiconic.com/open](https://useiconic.com/open/) | 162 | | Typicons | 2.0.9 | 336 | 82KB | 336 pixel perfect, all-purpose vector icons in a kit | [OFL](https://github.com/stephenhutchings/typicons.font/blob/master/README.md) | [s-ings.com/typicons](https://www.s-ings.com/typicons/) | 163 | 164 | ### 3. Extend custom packs 165 | 166 | #### (1) Import Font File 167 | 168 | Drag the `.ttf` file of the icon library into the Xcode project and ensure that the `Copy Bundle Resources` list in `Build Phases` contains this font file (It will be included by default, just check it). 169 | 170 | In addition, the file will be loaded at runtime, do not need to add it to the `Fonts provided by application` item in the `Info.plist` file. 171 | 172 | #### (2) Implement `EFIconFontCaseIterableProtocol` 173 | 174 | By making a implementation of [EFIconFontCaseIterableProtocol](https://github.com/EFPrefix/EFIconFont/blob/master/EFIconFont/Classes/Core/EFIconFontCaseIterableProtocol.swift) you can get your custom iconfont pack object, demo in this project demonstrates customization with GitHub's Octicons as an [example](https://github.com/EFPrefix/EFIconFont/blob/master/Example/EFIconFont/EFIconFontOcticons.swift): 175 | 176 | ```swift 177 | import EFIconFont 178 | 179 | public extension EFIconFont { 180 | public static let octicons = EFIconFontOcticons.self 181 | } 182 | 183 | extension EFIconFontOcticons: EFIconFontCaseIterableProtocol { 184 | public static var name: String { 185 | return "octicons" 186 | } 187 | public var unicode: String { 188 | return self.rawValue 189 | } 190 | } 191 | 192 | public enum EFIconFontOcticons: String { 193 | case thumbsup = "\u{e6d7}" 194 | case unverified = "\u{e6d6}" 195 | case unfold = "\u{e6d5}" 196 | case verified = "\u{e6d4}" 197 | // ... 198 | } 199 | ``` 200 | 201 | #### (3) Call 202 | 203 | Same as `Built-in iconfont packs` above: 204 | 205 | ```swift 206 | EFIconFontOcticons.thumbsup 207 | ``` 208 | 209 | #### (4) Attention 210 | 211 | The `Octicons` icon library in this project is owned by GitHub. This is only a demonstration, do not use it in any situation that violates the specifications set by its owner: 212 | 213 | | Name | Version | Count | File Size | Description | License | Preview | 214 | |:-|:-|:-|:-|:-|:-|:-| 215 | | Octicons | 8.4.2 | 184 | 34KB | GitHub‘s icons | [GitHub Logos and Usage](https://github.com/logos) | [octicons.github.com](https://octicons.github.com/) | 216 | 217 | ### 4. Other 218 | 219 | Usage of some iconfont resource sites: 220 | 221 | - [iconfont.cn](https://github.com/EFPrefix/EFIconFont/blob/master/Extend/iconfont.md) 222 | - [fontawesome.com](https://github.com/EFPrefix/EFIconFont/blob/master/Extend/fontawesome.md) 223 | 224 | ## Author 225 | 226 | EyreFree, eyrefree@eyrefree.org 227 | 228 | ## License 229 | 230 | 231 | 232 | EFIconFont is available under the MIT license. See the [LICENSE](LICENSE) file for more info. 233 | -------------------------------------------------------------------------------- /README_CN.md: -------------------------------------------------------------------------------- 1 | ![](https://github.com/EFPrefix/EFIconFont/blob/master/Assets/EFIconFont.png?raw=true) 2 | 3 |

4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 |

33 | 34 | 一个用 Swift 实现的普通的 IconFont 封装,帮助你更便捷地在你的工程中使用 IconFont,同时集成了一系列可免费使用的第三方图标库。 35 | 36 | > [English Introduction](https://github.com/EFPrefix/EFIconFont/blob/master/README.md) 37 | 38 | ## 预览 39 | 40 | | 1 | 2 | 3 | 4 | 41 | |:-:|:-:|:-:|:-:| 42 | | ![](https://github.com/EFPrefix/EFIconFont/blob/master/Assets/1.png?raw=true) | ![](https://github.com/EFPrefix/EFIconFont/blob/master/Assets/2.png?raw=true) | ![](https://github.com/EFPrefix/EFIconFont/blob/master/Assets/3.png?raw=true) | ![](https://github.com/EFPrefix/EFIconFont/blob/master/Assets/4.png?raw=true) | 43 | 44 | ## 示例 45 | 46 | 1. 利用 `git clone` 命令下载本仓库; 47 | 2. 利用 cd 命令切换到 Example 目录下,执行 `pod install` 命令; 48 | 3. 随后打开 `EFIconFont.xcworkspace` 编译即可。 49 | 50 | 或执行以下命令: 51 | 52 | ```bash 53 | git clone git@github.com:EFPrefix/EFIconFont.git; cd EFIconFont/Example; pod install; open EFIconFont.xcworkspace 54 | ``` 55 | 56 | ## 需求 57 | 58 | | 版本 | 需求 | 59 | |:-------|:--------------------------------------| 60 | | <0.5 | Xcode 10.0+
Swift 4.2+
iOS 8.0+ | 61 | | >=0.5 | Xcode 10.2+
Swift 5.0+
iOS 8.0+ | 62 | 63 | ## 安装 64 | 65 | EFIconFont 可以通过 [CocoaPods](https://cocoapods.org) 进行获取。只需要在你的 Podfile 中添加如下代码就能实现引入,默认只包含 `Core` 部分,不含字体包: 66 | 67 | ```ruby 68 | pod 'EFIconFont' 69 | ``` 70 | 71 | 可以通过 subspecs 方式引入本库已集成的图标库资源,如下示例引用了 AntDesign 和 FontAwesome 资源: 72 | 73 | ```ruby 74 | pod 'EFIconFont', :subspecs => ['AntDesign', 'FontAwesome'] 75 | ``` 76 | 77 | 也可以通过 `Complete` 引入本库已集成的所有图标库资源,示例: 78 | 79 | ```ruby 80 | pod 'EFIconFont', :subspecs => ['Complete'] 81 | ``` 82 | 83 | 然后,执行如下命令即可: 84 | 85 | ```bash 86 | pod install 87 | ``` 88 | 89 | ## 使用 90 | 91 | ### 1. 核心 92 | 93 | 实现 `EFIconFontProtocol` 协议的对象,能够将自身转换为 `NSAttributedString` 或 `UIImage`,该协议内容如下: 94 | 95 | ```swift 96 | public protocol EFIconFontProtocol { 97 | 98 | // `name` is not necessarily equal to .ttf file name 99 | var name: String { get } 100 | 101 | // `path` is path of .ttf file 102 | var path: String { get } 103 | 104 | // `attributes` is style of icon 105 | var attributes: [NSAttributedString.Key : Any] { set get } 106 | 107 | // `unicode` is unique identifier of particular icon 108 | var unicode: String { get } 109 | } 110 | ``` 111 | 112 | - name:字体名,与 .ttf 文件名并不一定相等,可通过 [BirdFont](https://birdfont.org) 等字体文件处理工具查看其 `Name` 属性取得; 113 | - path:.ttf 文件路径,一般通过形如 `Bundle.main.path(forResource: name, ofType: "ttf")` 的方式获取(若文件名和 name 相同,则无须实现该属性,使用默认实现即可); 114 | - attributes: 某 icon 的样式(若无特殊需求,使用默认实现即可); 115 | - unicode:某符号的 unicode。 116 | 117 | 实现该协议的对象,可通过调用下列方法进行转换输出为字符串和图片,可改变前景色和大小: 118 | 119 | ```swift 120 | // MARK:- String 121 | func attributedString(size fontSize: CGFloat, attributes: [NSAttributedString.Key : Any]?) -> NSAttributedString? 122 | func attributedString(size fontSize: CGFloat, foregroundColor: UIColor? = nil, backgroundColor: UIColor? = nil) -> NSAttributedString? 123 | 124 | // MARK:- Image 125 | func image(size fontSize: CGFloat, attributes: [NSAttributedString.Key : Any]?) -> UIImage? 126 | func image(size fontSize: CGFloat, foregroundColor: UIColor? = nil, backgroundColor: UIColor? = nil) -> UIImage? 127 | func image(size imageSize: CGSize, attributes: [NSAttributedString.Key : Any]?) -> UIImage? 128 | func image(size imageSize: CGSize, foregroundColor: UIColor? = nil, backgroundColor: UIColor? = nil) -> UIImage? 129 | ``` 130 | 131 | ### 2. 自带图标库 132 | 133 | 本库已集成了 AntDesign、FontAwesome 等免费图标库资源,需要使用的同学引入即可,如下所示,会得到一个 `EFIconFontProtocol` 类型的返回值: 134 | 135 | ```swift 136 | EFIconFontAntDesign.addteam 137 | ``` 138 | 139 | 可通过遵循 `EFIconFontProtocol` 协议的对象获取 `NSAttributedString` 和 `UIImage`: 140 | 141 | ```swift 142 | EFIconFontAntDesign.addteam.attributedString(size: 24) 143 | EFIconFontFontAwesomeBrands.adobe.attributedString(size: 32, foregroundColor: UIColor.white, backgroundColor: UIColor.green) 144 | EFIconFontFontAwesomeRegular.addressBook.image(size: 24, foregroundColor: UIColor.red) 145 | EFIconFontFontAwesomeSolid.alignLeft.image(size: CGSize(width: 36, height: 48), foregroundColor: UIColor.white) 146 | ``` 147 | 148 | 可通过如下方式获取某个图标库的全部项目,他会返回 `[String : EFIconFontProtocol]` 类型的 Dictionary: 149 | 150 | ```swift 151 | EFIconFont.antDesign.dictionary 152 | ``` 153 | 154 | 备注:虽为免费图标库,但还请自行确保您的使用方式遵循字库原始作者的使用协议规范: 155 | 156 | | 名称 | 版本 | 数量 | 文件大小 | 描述 | 使用规范 | 预览 | 157 | |:-|:-|:-|:-|:-|:-|:-| 158 | | AntDesign | | 557 | 127KB | AntDesign 所属图标库 | [MIT](https://github.com/ant-design/ant-design/blob/master/LICENSE) | [iconfont.cn](https://www.iconfont.cn/collections/detail?cid=9402) | 159 | | ElusiveIcons | 2.0.0 | 304 | 53KB | Elusive Icons | [OFL](http://elusiveicons.com/license/) | [elusiveicons.com](http://elusiveicons.com/icons/) | 160 | | FontAwesome | 5.8.1 | 1516 | 356KB | FontAwesome 所属的免费图标库 | [Font Awesome Free License](https://fontawesome.com/license/free) | [fontawesome.com](https://fontawesome.com/icons?d=gallery&m=free) | 161 | | IcoMoon | 1.0 | 490 | 94KB | IcoMoon 免费图标库 | [CC BY 4.0 / GPL](https://github.com/Keyamoon/IcoMoon-Free/blob/master/License.txt) | [ionicons.com](https://icomoon.io/#preview-free) | 162 | | Ionicons | 4.5.5 | 696 | 143KB | Ionicons 免费图标库 | [MIT](https://github.com/ionic-team/ionicons/blob/master/LICENSE) | [ionicons.com](https://ionicons.com/) | 163 | | MaterialIcons | 3.0.1 | 932 | 128KB | Google 的 Material 图标库 | [Apache-2.0](https://github.com/google/material-design-icons/blob/master/LICENSE) | [material.io](https://material.io/tools/icons) | 164 | | Meteocons | | 47 | 15KB | 一个天气图标库 | [Free](https://www.alessioatzeni.com/meteocons/) | [alessioatzeni.com/meteocons](https://www.alessioatzeni.com/meteocons/) | 165 | | MetrizeIcons | 1.0 | 300 | 74KB | 300 个给设计和开发人员的免费图标 | [Free](https://www.alessioatzeni.com/metrize-icons/) | [alessioatzeni.com/metrize-icons](https://www.alessioatzeni.com/metrize-icons/) | 166 | | OpenIconic | 1.1.1 | 223 | 33KB | 223 个开源矢量图标集 | [OFL](https://github.com/iconic/open-iconic/blob/master/FONT-LICENSE) | [useiconic.com/open](https://useiconic.com/open/) | 167 | | Typicons | 2.0.9 | 336 | 82KB | 336 个矢量图标集合在一个库内 | [OFL](https://github.com/stephenhutchings/typicons.font/blob/master/README.md) | [s-ings.com/typicons](https://www.s-ings.com/typicons/) | 168 | 169 | ### 3. 自定义图标库 170 | 171 | #### (1) 字体文件引入 172 | 173 | 将我们通过各种方式获取的图标库的 `.ttf` 文件拖入 Xcode 工程中,并确保 `Build Phases` 中的 `Copy Bundle Resources` 列表中包含这个字体文件(默认拖入工程就会被包含在内)。 174 | 175 | 另外,此文件会在运行时按需加载,无需添加到 `Info.plist` 文件中的 `Fonts provided by application` 项内。 176 | 177 | #### (2) 实现 `EFIconFontCaseIterableProtocol` 178 | 179 | 可通过实现 [EFIconFontCaseIterableProtocol](https://github.com/EFPrefix/EFIconFont/blob/master/EFIconFont/Classes/Core/EFIconFontCaseIterableProtocol.swift) 协议实现图标库的封装,本项目中 Example 以 GitHub 所有的 Octicons 为例 [演示](https://github.com/EFPrefix/EFIconFont/blob/master/Example/EFIconFont/EFIconFontOcticons.swift) 了自定义方式: 180 | 181 | ```swift 182 | import EFIconFont 183 | 184 | public extension EFIconFont { 185 | public static let octicons = EFIconFontOcticons.self 186 | } 187 | 188 | extension EFIconFontOcticons: EFIconFontCaseIterableProtocol { 189 | public static var name: String { 190 | return "octicons" 191 | } 192 | public var unicode: String { 193 | return self.rawValue 194 | } 195 | } 196 | 197 | public enum EFIconFontOcticons: String { 198 | case thumbsup = "\u{e6d7}" 199 | case unverified = "\u{e6d6}" 200 | case unfold = "\u{e6d5}" 201 | case verified = "\u{e6d4}" 202 | // ... 203 | } 204 | ``` 205 | 206 | 有人要问这个巨长无比的枚举是怎么手打出来的?当然是代码生成的了...先把 `.svg` 图片上传到 `iconfont.cn`,然后看 [这里](https://github.com/EFPrefix/EFIconFont/blob/master/Extend/iconfont.md)。 207 | 208 | #### (3) 调用 209 | 210 | 同上自带图标库的使用。 211 | 212 | ```swift 213 | EFIconFontOcticons.thumbsup 214 | ``` 215 | 216 | #### (4) 注意事项 217 | 218 | 本项目 Example 中的 Octicons 图标库为 GitHub 所有,此处仅为演示,请勿用于任何违反其所有者所定规范的场合: 219 | 220 | | 名称 | 版本 | 数量 | 文件大小 | 描述 | 使用规范 | 预览 | 221 | |:-|:-|:-|:-|:-|:-|:-| 222 | | Octicons | 8.4.2 | 184 | 34KB | GitHub 所属图标库 | [GitHub Logos and Usage](https://github.com/logos) | [octicons.github.com](https://octicons.github.com/) | 223 | 224 | ### 4. 其它 225 | 226 | 一些 IconFont 资源站点素材的爬取以及代码生成方式: 227 | 228 | - [iconfont.cn](https://github.com/EFPrefix/EFIconFont/blob/master/Extend/iconfont.md) 229 | - [fontawesome.com](https://github.com/EFPrefix/EFIconFont/blob/master/Extend/fontawesome.md) 230 | 231 | ## 作者 232 | 233 | EyreFree, eyrefree@eyrefree.org 234 | 235 | ## 协议 236 | 237 | 238 | 239 | EFIconFont 基于 MIT 协议进行分发和使用,更多信息参见 [协议文件](LICENSE)。 240 | -------------------------------------------------------------------------------- /_Pods.xcodeproj: -------------------------------------------------------------------------------- 1 | Example/Pods/Pods.xcodeproj -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-cayman --------------------------------------------------------------------------------