Repository: vpeschenkov/LetterAvatarKit Branch: master Commit: 21a6abe52835 Files: 109 Total size: 403.2 KB Directory structure: gitextract_ksb492si/ ├── .gitignore ├── .swift-version ├── .swiftlint.yml ├── .travis.yml ├── CHANGELOG.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Gemfile ├── ISSUE_TEMPLATE.md ├── LICENSE ├── LetterAvatarKit/ │ ├── Extensions/ │ │ ├── Character+LetterAvatarKit.swift │ │ ├── String+LetterAvatarKit.swift │ │ ├── UIColor+LetterAvatarKit.swift │ │ └── UIImage+LetterAvatarKit.swift │ ├── Info.plist │ ├── LetterAvatarBuilder.swift │ ├── LetterAvatarBuilderConfiguration.swift │ ├── LetterAvatarKit.h │ ├── LetterAvatarMaker.swift │ └── LetterAvatarMakerExtendable.swift ├── LetterAvatarKit.podspec ├── LetterAvatarKit.xcodeproj/ │ ├── project.pbxproj │ ├── project.xcworkspace/ │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata/ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata/ │ └── xcschemes/ │ └── LetterAvatarKit.xcscheme ├── LetterAvatarKitExample/ │ ├── LetterAvatarKitExample/ │ │ ├── AppDelegate.swift │ │ ├── Assets.xcassets/ │ │ │ └── AppIcon.appiconset/ │ │ │ └── Contents.json │ │ ├── Base.lproj/ │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ ├── Info.plist │ │ └── LetterAvatarController.swift │ └── LetterAvatarKitExample.xcodeproj/ │ ├── project.pbxproj │ └── project.xcworkspace/ │ ├── contents.xcworkspacedata │ └── xcshareddata/ │ ├── IDEWorkspaceChecks.plist │ └── swiftpm/ │ └── Package.resolved ├── LetterAvatarKitObjcExample/ │ ├── LetterAvatarKitObjcExample/ │ │ ├── AppDelegate.h │ │ ├── AppDelegate.m │ │ ├── Assets.xcassets/ │ │ │ └── AppIcon.appiconset/ │ │ │ └── Contents.json │ │ ├── Base.lproj/ │ │ │ ├── LaunchScreen.storyboard │ │ │ └── Main.storyboard │ │ ├── Info.plist │ │ ├── ViewController.h │ │ ├── ViewController.m │ │ └── main.m │ ├── LetterAvatarKitObjcExample.xcodeproj/ │ │ ├── project.pbxproj │ │ └── project.xcworkspace/ │ │ └── contents.xcworkspacedata │ ├── LetterAvatarKitObjcExample.xcworkspace/ │ │ └── contents.xcworkspacedata │ ├── Podfile │ └── Pods/ │ ├── Local Podspecs/ │ │ └── LetterAvatarKit.podspec.json │ ├── Pods.xcodeproj/ │ │ └── project.pbxproj │ └── Target Support Files/ │ ├── LetterAvatarKit/ │ │ ├── Info.plist │ │ ├── LetterAvatarKit-Info.plist │ │ ├── LetterAvatarKit-dummy.m │ │ ├── LetterAvatarKit-prefix.pch │ │ ├── LetterAvatarKit-umbrella.h │ │ ├── LetterAvatarKit.modulemap │ │ └── LetterAvatarKit.xcconfig │ └── Pods-LetterAvatarKitObjcExample/ │ ├── Info.plist │ ├── Pods-LetterAvatarKitObjcExample-Info.plist │ ├── Pods-LetterAvatarKitObjcExample-acknowledgements.markdown │ ├── Pods-LetterAvatarKitObjcExample-acknowledgements.plist │ ├── Pods-LetterAvatarKitObjcExample-dummy.m │ ├── Pods-LetterAvatarKitObjcExample-frameworks.sh │ ├── Pods-LetterAvatarKitObjcExample-resources.sh │ ├── Pods-LetterAvatarKitObjcExample-umbrella.h │ ├── Pods-LetterAvatarKitObjcExample.debug.xcconfig │ ├── Pods-LetterAvatarKitObjcExample.modulemap │ └── Pods-LetterAvatarKitObjcExample.release.xcconfig ├── LetterAvatarKitTests/ │ ├── Extensions/ │ │ ├── Character+LetterAvatarKitTests.swift │ │ ├── String+LetterAvatarKitTests.swift │ │ ├── UIColor+LetterAvatarKitTests.swift │ │ └── UIImage+LetterAvatarKitTests.swift │ ├── Info.plist │ ├── LetterAvatarBuilderTests.swift │ ├── LetterAvatarMakerTests.swift │ └── Utilities/ │ └── UIImage+Compare.swift ├── PULL_REQUEST_TEMPLATE.md ├── Package.swift ├── README.md ├── docs/ │ ├── Classes/ │ │ ├── LetterAvatarBuilder.html │ │ └── LetterAvatarBuilderConfiguration.html │ ├── Classes.html │ ├── Extensions/ │ │ ├── UIColor.html │ │ └── UIImage.html │ ├── Extensions.html │ ├── css/ │ │ ├── highlight.css │ │ └── jazzy.css │ ├── docsets/ │ │ ├── LetterAvatarKit.docset/ │ │ │ └── Contents/ │ │ │ ├── Info.plist │ │ │ └── Resources/ │ │ │ ├── Documents/ │ │ │ │ ├── Classes/ │ │ │ │ │ ├── LetterAvatarBuilder.html │ │ │ │ │ └── LetterAvatarBuilderConfiguration.html │ │ │ │ ├── Classes.html │ │ │ │ ├── Extensions/ │ │ │ │ │ ├── UIColor.html │ │ │ │ │ └── UIImage.html │ │ │ │ ├── Extensions.html │ │ │ │ ├── css/ │ │ │ │ │ ├── highlight.css │ │ │ │ │ └── jazzy.css │ │ │ │ ├── index.html │ │ │ │ ├── js/ │ │ │ │ │ └── jazzy.js │ │ │ │ └── search.json │ │ │ └── docSet.dsidx │ │ └── LetterAvatarKit.tgz │ ├── index.html │ ├── js/ │ │ └── jazzy.js │ ├── search.json │ └── undocumented.json ├── fastlane/ │ ├── Appfile │ ├── Fastfile │ └── README.md └── scripts/ └── generate_docs.sh ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ # Xcode # # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore ## Build generated build/ DerivedData/ ## Various settings *.pbxuser !default.pbxuser *.mode1v3 !default.mode1v3 *.mode2v3 !default.mode2v3 *.perspectivev3 !default.perspectivev3 xcuserdata/ ## Other *.moved-aside *.xccheckout *.xcscmblueprint ## Obj-C/Swift specific *.hmap *.ipa *.dSYM.zip *.dSYM ## Playgrounds timeline.xctimeline playground.xcworkspace # Swift Package Manager # # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. # Packages/ # Package.pins .build/ # CocoaPods # # We recommend against adding the Pods directory to your .gitignore. However # you should judge for yourself, the pros and cons are mentioned at: # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control # # Pods/ # Carthage # # Add this line if you want to avoid checking in source code from Carthage dependencies. # Carthage/Checkouts Carthage/Build # fastlane # # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the # screenshots whenever they are needed. # For more information about the recommended setup visit: # https://docs.fastlane.tools/best-practices/source-control/#source-control fastlane/report.xml fastlane/Preview.html fastlane/screenshots fastlane/test_output ================================================ FILE: .swift-version ================================================ 5.0 ================================================ FILE: .swiftlint.yml ================================================ disabled_rules: - trailing_whitespace included: - LetterAvatarKit - LetterAvatarKitTests line_length: - 110 - 110 type_body_length: - 150 - 150 identifier_name: excluded: - i - j - c - m - to - id ================================================ FILE: .travis.yml ================================================ language: objective-c osx_image: xcode12 install: - bundle install script: - fastlane test ================================================ FILE: CHANGELOG.md ================================================ # CHANGELOG ``` #### Added for new features. #### Changed for changes in existing functionality. #### Deprecated for once-stable features removed in upcoming releases. #### Removed for deprecated features removed in this release. #### Fixed for any bug fixes. ``` ### 1.2.5 #### Removed - Removed `SwiftUI` dependency (#31) ### 1.2.4 #### Added - Xcode 12 support ### 1.2.1 #### Added - An ability to add borders - An ability to make the generated image circle ### 1.2.0 #### Added - Builder pattern #### Changed - `LAK` prefix renamed to `LK` ### 1.1.9 #### Added - Xcode 11 support ================================================ FILE: CODE_OF_CONDUCT.md ================================================ # Contributor Covenant Code of Conduct ## Our Pledge 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. ## Our Standards Examples of behavior that contributes to creating a positive environment include: * Using welcoming and inclusive language * Being respectful of differing viewpoints and experiences * Gracefully accepting constructive criticism * Focusing on what is best for the community * Showing empathy towards other community members Examples of unacceptable behavior by participants include: * The use of sexualized language or imagery and unwelcome sexual attention or advances * Trolling, insulting/derogatory comments, and personal or political attacks * Public or private harassment * Publishing others' private information, such as a physical or electronic address, without explicit permission * Other conduct which could reasonably be considered inappropriate in a professional setting ## Our Responsibilities 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. 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. ## Scope 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. ## Enforcement Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at v.peschenkov@gmail.com. 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. 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. ## Attribution This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] [homepage]: http://contributor-covenant.org [version]: http://contributor-covenant.org/version/1/4/ ================================================ FILE: CONTRIBUTING.md ================================================ - If you **need help** or you'd like to **ask a general question**, open an issue. - If you **found a bug**, open an issue. - If you **have a feature request**, open an issue. - If you **want to contribute**, submit a pull request. ================================================ FILE: Gemfile ================================================ source "https://rubygems.org" gem "fastlane" ================================================ FILE: ISSUE_TEMPLATE.md ================================================ ### Description Describe your issue here. ================================================ FILE: LICENSE ================================================ MIT License Copyright (c) 2017 Victor Peschenkov Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: LetterAvatarKit/Extensions/Character+LetterAvatarKit.swift ================================================ // // Character+LetterAvatarKit.swift // LetterAvatarKit // // Copyright 2017 Victor Peschenkov // // Permission is hereby granted, free of charge, to any person obtaining a copy // o this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // import Foundation internal extension Character { var ASCIIValue: Int { let unicode = String(self).unicodeScalars return Int(unicode[unicode.startIndex].value) } } ================================================ FILE: LetterAvatarKit/Extensions/String+LetterAvatarKit.swift ================================================ // // String+LetterAvatarKit.swift // LetterAvatarKit // // Copyright 2017 Victor Peschenkov // // Permission is hereby granted, free of charge, to any person obtaining a copy // o this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // import Foundation extension String { /// Returns the first element of the collection of string. If a collection /// is empty, returns nil. var first: Character? { if isEmpty { return nil } return self[index(startIndex, offsetBy: 0)] } } ================================================ FILE: LetterAvatarKit/Extensions/UIColor+LetterAvatarKit.swift ================================================ // // UIColor+LetterAvatarKit.swift // LetterAvatarKit // // Copyright 2017 Victor Peschenkov // // Permission is hereby granted, free of charge, to any person obtaining a copy // o this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // import UIKit import Foundation /// Returns a color by HEX code. /// /// - Parameters: /// - hex: HEX code. /// - Returns: The color by HEX code. func LKUIColorByHEX(_ hex: Int) -> UIColor { return LKUIColorByRGB( red: CGFloat((hex & 0xFF0000) >> 16), green: CGFloat((hex & 0x00FF00) >> 8), blue: CGFloat((hex & 0x0000FF)) ) } /// Returns a UIColor instance. /// /// - Parameters: /// - red: A value of the red color component. /// - green: A value of the green color component. /// - blue: A value of the blue color component. /// - Returns: A UIColor instance. func LKUIColorByRGB(red: CGFloat, green: CGFloat, blue: CGFloat) -> UIColor { return UIColor(red: red / 255, green: green / 255, blue: blue / 255, alpha: CGFloat(1.0)) } extension UIColor { private struct ColorKey { static var propertyReference = "org.peschenkov.LetterAvatarKit.UIColor.colors" } /// Colors from http://flatuicolors.com/ public enum HEXColor { /// TURQUOISE static let turquoiseColor = 0x1ABC9C /// EMERALD static let emeraldColor = 0x2ECC71 /// PITER RIVER static let piterRiverColor = 0x3498DB /// AMETHYST static let amethystColor = 0x9B59B6 /// WET ASPHALT static let wetAsphaltColor = 0x34495E /// GREEN SEA static let greenSeaColor = 0x16A085 /// NEPHRITIS static let nephritisColor = 0x27AE60 /// BELIZE HOLE static let belizeHoldeColor = 0x2980B9 /// WISTERIA static let wisteriaColor = 0x8E44AD /// MIDNIGHT BLUE static let midnightBlueColor = 0x2C3E50 /// SUN FLOWER static let sunflowerColor = 0xF1C40F /// CARROT static let carrotColor = 0xE67E22 /// ALIZARIN static let alizarinColor = 0xE74C3C /// CONCRETE static let concreteColor = 0x95A5A6 /// ORANGE static let orangeColor = 0xF39C12 /// PUMPKIN static let pumpkinColor = 0xD35400 /// POMEGRANATE static let pomegranateColor = 0xC0392B /// SILVER static let silverColor = 0xBDC3C7 /// ASBESTOS static let asbestosColor = 0x7F8C8D } static public var colors: [UIColor] { var colors = objc_getAssociatedObject(self, &ColorKey.propertyReference) if colors == nil { colors = [ LKUIColorByHEX(HEXColor.turquoiseColor), LKUIColorByHEX(HEXColor.emeraldColor), LKUIColorByHEX(HEXColor.piterRiverColor), LKUIColorByHEX(HEXColor.amethystColor), LKUIColorByHEX(HEXColor.wetAsphaltColor), LKUIColorByHEX(HEXColor.greenSeaColor), LKUIColorByHEX(HEXColor.nephritisColor), LKUIColorByHEX(HEXColor.belizeHoldeColor), LKUIColorByHEX(HEXColor.wisteriaColor), LKUIColorByHEX(HEXColor.midnightBlueColor), LKUIColorByHEX(HEXColor.sunflowerColor), LKUIColorByHEX(HEXColor.carrotColor), LKUIColorByHEX(HEXColor.alizarinColor), LKUIColorByHEX(HEXColor.concreteColor), LKUIColorByHEX(HEXColor.orangeColor), LKUIColorByHEX(HEXColor.pumpkinColor), LKUIColorByHEX(HEXColor.pomegranateColor), LKUIColorByHEX(HEXColor.silverColor), LKUIColorByHEX(HEXColor.asbestosColor) ] objc_setAssociatedObject( self, &ColorKey.propertyReference, colors, .OBJC_ASSOCIATION_RETAIN_NONATOMIC ) return colors as? [UIColor] ?? [] } return colors as? [UIColor] ?? [] } } ================================================ FILE: LetterAvatarKit/Extensions/UIImage+LetterAvatarKit.swift ================================================ // // UIImage+LetterAvatarKit.swift // LetterAvatarKit // // Copyright 2017 Victor Peschenkov // // Permission is hereby granted, free of charge, to any person obtaining a copy // o this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // import UIKit import Foundation extension UIImage { /// Makes an letter-based avatar image using given configuration. /// /// - Parameters: /// - configuration: The configuration that uses to draw a /// letter-based avatar image. /// /// - Returns: Returns whether an instance of UIImage or nil. @objc(lk_makeLetterAvatarWithConfiguration:) static public func makeLetterAvatar( withConfiguration configuration: LetterAvatarBuilderConfiguration ) -> UIImage? { return LetterAvatarBuilder().makeAvatar(with: configuration) } /// Makes an letter-based avatar image using given username. /// /// - Parameters: /// - username: The username that uses to draw a /// letter-based avatar image. /// /// - Returns: Returns whether an instance of UIImage or nil. @objc(lk_makeLetterAvatarWithUsername:) static public func makeLetterAvatar(withUsername username: String?) -> UIImage? { let configuration = LetterAvatarBuilderConfiguration() configuration.username = username return LetterAvatarBuilder().makeAvatar(with: configuration) } /// Makes an letter-based avatar image using given username and size. /// /// - Parameters: /// - username: The username that uses to draw a /// letter-based avatar image. /// - size: The avatar size. /// /// - Returns: Returns whether an instance of UIImage or nil. @objc(lk_makeLetterAvatarWithUsername:size:) static public func makeLetterAvatar(withUsername username: String?, size: CGSize) -> UIImage? { let configuration = LetterAvatarBuilderConfiguration() configuration.username = username configuration.size = size return LetterAvatarBuilder().makeAvatar(with: configuration) } } ================================================ FILE: LetterAvatarKit/Info.plist ================================================ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType FMWK CFBundleShortVersionString $(MARKETING_VERSION) CFBundleVersion $(CURRENT_PROJECT_VERSION) NSPrincipalClass ================================================ FILE: LetterAvatarKit/LetterAvatarBuilder.swift ================================================ // // LetterAvatarKit.swift // LetterAvatarKit // // Copyright 2017 Victor Peschenkov // // Permission is hereby granted, free of charge, to any person obtaining a copy // o this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // import UIKit /// Uses for making letter-based avatar images. @objc(LKLetterAvatarBuilder) open class LetterAvatarBuilder: NSObject { /// Makes a letter-based avatar image by using a given configuration. /// /// - Parameters: /// - configuration: A configuration that is used to draw a /// letter-based avatar image. /// /// - Returns: Returns whether an instance of UIImage or nil. @objc(makeAvatarWithConfiguration:) open func makeAvatar(with configuration: LetterAvatarBuilderConfiguration) -> UIImage? { let colors = configuration.backgroundColors guard let username = configuration.username else { return drawAvatar( with: configuration, letters: NSLocalizedString("NA", comment: ""), backgroundColor: colors[0].cgColor ) } let usernameInfo = UsernameInfo( username: username, singleLetter: configuration.useSingleLetter ) var colorIndex = 0 if colors.count > 1 { colorIndex = usernameInfo.ASCIIValue colorIndex *= 3557 // Prime number colorIndex %= colors.count - 1 } let backgroundColor = colors[colorIndex].cgColor return drawAvatar( with: configuration, letters: usernameInfo.letters, backgroundColor: backgroundColor ) } private func drawAvatar( with configuration: LetterAvatarBuilderConfiguration, letters: String, backgroundColor: CGColor ) -> UIImage? { let rect = CGRect(x: 0.0, y: 0.0, width: configuration.size.width, height: configuration.size.height) UIGraphicsBeginImageContextWithOptions(rect.size, configuration.isOpaque, UIScreen.main.scale) if let context = UIGraphicsGetCurrentContext() { let borderWidth = configuration.borderWidth let borderColor = configuration.borderColor.cgColor let strokeRect = rect.insetBy(dx: borderWidth * 0.5, dy: borderWidth * 0.5) context.setFillColor(backgroundColor) context.setStrokeColor(borderColor) context.setLineWidth(borderWidth) if configuration.circle { context.fillEllipse(in: rect) context.strokeEllipse(in: strokeRect) } else { context.fill(rect) context.stroke(strokeRect) } var attributes = configuration.lettersFontAttributes if attributes == nil { attributes = [ .paragraphStyle: NSParagraphStyle.default.mutableCopy(), .font: makeFitFont(withFont: configuration.lettersFont, forSize: rect.size), .foregroundColor: configuration.lettersColor ] } let lettersSize = letters.size(withAttributes: attributes) let lettersRect = CGRect( x: (rect.size.width - lettersSize.width) / 2.0, y: (rect.size.height - lettersSize.height) / 2.0, width: lettersSize.width, height: lettersSize.height ) letters.draw(in: lettersRect, withAttributes: attributes) let avatarImage = UIGraphicsGetImageFromCurrentImageContext() UIGraphicsEndImageContext() return avatarImage } return nil } private func makeFitFont(withFont font: UIFont?, forSize size: CGSize) -> UIFont { guard let font = font else { return UIFont.systemFont(ofSize: min(size.height, size.width) / 2.0) } let fitFont = font.withSize(min(size.height, size.width) / 2.0) return fitFont.pointSize < font.pointSize ? fitFont : font } } private class UsernameInfo { public var letters: String { return userInfo.letters } public var ASCIIValue: Int { return userInfo.value } private let username: String private let useSingleLetter: Bool private typealias InfoContainer = (letters: String, value: Int) private lazy var userInfo: InfoContainer = { var letters = String() var lettersASCIIValue = 0 // Obtains an array of words by using a given username let components = username.components(separatedBy: " ") // If there are whether two words or more if components.count > 1 { if !useSingleLetter { for component in components.prefix(3) { if let letter = component.first { letters.append(letter) lettersASCIIValue += letter.ASCIIValue } } } else { if let firstComponent = components.first { // Process the firs name letter if let letter = firstComponent.first { letters.append(letter) lettersASCIIValue += letter.ASCIIValue } } } } else { // If given just one word if let component = components.first { // Process the firs name letter if let letter = component.first { letters.append(letter) lettersASCIIValue += letter.ASCIIValue // If single Letter is passed as false but the string is a single char, // this line fails due to out of bounds exception. // https://github.com/vpeschenkov/LetterAvatarKit/issues/11 if !useSingleLetter && component.count >= 2 { // Process the second name letter let startIndex = component.index(after: component.startIndex) let endIndex = component.index(component.startIndex, offsetBy: 2) let substring = component[startIndex.. LetterAvatarMakerExtendable { configuration.size = size return self } @discardableResult public func setUsername(_ username: String) -> LetterAvatarMakerExtendable { configuration.username = username return self } @discardableResult public func setLettersFont(_ lettersFont: UIFont?) -> LetterAvatarMakerExtendable { configuration.lettersFont = lettersFont return self } @discardableResult public func setLettersColor(_ lettersColor: UIColor) -> LetterAvatarMakerExtendable { configuration.lettersColor = lettersColor return self } @discardableResult public func useSingleLetter(_ useSingleLetter: Bool) -> LetterAvatarMakerExtendable { configuration.useSingleLetter = useSingleLetter return self } @discardableResult public func setBackgroundColors(_ backgroundColors: [UIColor]) -> LetterAvatarMakerExtendable { configuration.backgroundColors = backgroundColors return self } @discardableResult public func setLettersFontAttributes( _ lettersFontAttributes: [NSAttributedString.Key: Any]? ) -> LetterAvatarMakerExtendable { configuration.lettersFontAttributes = lettersFontAttributes return self } @discardableResult public func setBorderWidth(_ borderWidth: CGFloat) -> LetterAvatarMakerExtendable { configuration.borderWidth = borderWidth return self } @discardableResult public func setBorderColor(_ borderColor: UIColor) -> LetterAvatarMakerExtendable { configuration.borderColor = borderColor return self } @discardableResult public func setCircle(_ circle: Bool) -> LetterAvatarMakerExtendable { configuration.circle = circle return self } @discardableResult public func drawOpaqueBackground(_ isOpaque: Bool) -> LetterAvatarMakerExtendable { configuration.isOpaque = isOpaque return self } public func build(maker: (LetterAvatarBuilderConfiguration) -> Void) -> UIImage? { maker(configuration) return UIImage.makeLetterAvatar(withConfiguration: configuration) } public func build() -> UIImage? { return UIImage.makeLetterAvatar(withConfiguration: configuration) } } ================================================ FILE: LetterAvatarKit/LetterAvatarMakerExtendable.swift ================================================ // // LetterAvatarMakerExtendable.swift // LetterAvatarKit // // Copyright 2017 Victor Peschenkov // // Permission is hereby granted, free of charge, to any person obtaining a copy // o this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // import UIKit import Foundation public protocol LetterAvatarMakerExtendable: NSObjectProtocol { func setSize(_ size: CGSize) -> LetterAvatarMakerExtendable func setUsername(_ username: String) -> LetterAvatarMakerExtendable func setLettersFont(_ lettersFont: UIFont?) -> LetterAvatarMakerExtendable func setLettersColor(_ lettersColor: UIColor) -> LetterAvatarMakerExtendable func useSingleLetter(_ useSingleLetter: Bool) -> LetterAvatarMakerExtendable func setBackgroundColors(_ backgroundColors: [UIColor]) -> LetterAvatarMakerExtendable func setLettersFontAttributes( _ lettersFontAttributes: [NSAttributedString.Key: Any]? ) -> LetterAvatarMakerExtendable func setCircle(_ circle: Bool) -> LetterAvatarMakerExtendable func setBorderWidth(_ borderWidth: CGFloat) -> LetterAvatarMakerExtendable func setBorderColor(_ borderColor: UIColor) -> LetterAvatarMakerExtendable func drawOpaqueBackground(_ isOpaque: Bool) -> LetterAvatarMakerExtendable func build(maker: (LetterAvatarBuilderConfiguration) -> Void) -> UIImage? func build() -> UIImage? } ================================================ FILE: LetterAvatarKit.podspec ================================================ Pod::Spec.new do |spec| spec.name = 'LetterAvatarKit' spec.ios.deployment_target = '9.0' spec.tvos.deployment_target = '9.0' spec.version = '1.2.5' spec.license = { :type => 'MIT' } spec.homepage = 'https://github.com/vpeschenkov/LetterAvatarKit' spec.authors = { 'Viktor Peschenkov' => 'v.peschenkov@gmail.com' } spec.summary = 'An extension that generates letter-based avatars/placeholders written in Swift' spec.source = { :git => 'https://github.com/vpeschenkov/LetterAvatarKit.git', :tag => spec.version.to_s } spec.source_files = 'LetterAvatarKit/*.{h,swift}', 'LetterAvatarKit/Extensions/*.{swift}' spec.requires_arc = true spec.framework = 'Foundation', 'UIKit' spec.swift_version = '5.0' end ================================================ FILE: LetterAvatarKit.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 48; objects = { /* Begin PBXBuildFile section */ 35089433210272B20024E7CA /* LetterAvatarBuilderConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35089432210272B20024E7CA /* LetterAvatarBuilderConfiguration.swift */; }; 351F38A31FAA386E0077F001 /* LetterAvatarSingleLetterTestImage@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 351F38A21FAA386E0077F001 /* LetterAvatarSingleLetterTestImage@3x.png */; }; 351F38A51FAA38D10077F001 /* LetterAvatarSingleLetterTestImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 351F38A41FAA38D10077F001 /* LetterAvatarSingleLetterTestImage@2x.png */; }; 351F6CEF1FA3F9A8003059D2 /* LetterAvatarOneWordTestImage@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = 351F6CED1FA3F9A8003059D2 /* LetterAvatarOneWordTestImage@3x.png */; }; 351F6CF01FA3F9A8003059D2 /* LetterAvatarOneWordTestImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 351F6CEE1FA3F9A8003059D2 /* LetterAvatarOneWordTestImage@2x.png */; }; 3591E079233C233F0041B834 /* LetterAvatarMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3591E078233C233F0041B834 /* LetterAvatarMakerExtendable.swift */; }; 3591E07B233C24830041B834 /* LetterAvatarMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3591E07A233C24830041B834 /* LetterAvatarMaker.swift */; }; 3591E07D233C26A50041B834 /* LetterAvatarMakerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 3591E07C233C26A50041B834 /* LetterAvatarMakerTests.swift */; }; 35AD1DA81FA8F4FC0059BC9A /* String+LetterAvatarKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35AD1DA71FA8F4FC0059BC9A /* String+LetterAvatarKit.swift */; }; 35AD1DAA1FA929720059BC9A /* String+LetterAvatarKitTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35AD1DA91FA929720059BC9A /* String+LetterAvatarKitTests.swift */; }; EB516B651F8810D200BEA1F2 /* Character+LetterAvatarKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB516B621F8810D200BEA1F2 /* Character+LetterAvatarKit.swift */; }; EB516B661F8810D200BEA1F2 /* UIColor+LetterAvatarKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB516B631F8810D200BEA1F2 /* UIColor+LetterAvatarKit.swift */; }; EB516B671F8810D200BEA1F2 /* UIImage+LetterAvatarKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB516B641F8810D200BEA1F2 /* UIImage+LetterAvatarKit.swift */; }; EB516B6C1F88110A00BEA1F2 /* Character+LetterAvatarKitTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB516B691F88110A00BEA1F2 /* Character+LetterAvatarKitTests.swift */; }; EB516B6D1F88110A00BEA1F2 /* UIColor+LetterAvatarKitTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB516B6A1F88110A00BEA1F2 /* UIColor+LetterAvatarKitTests.swift */; }; EB516B6E1F88110A00BEA1F2 /* UIImage+LetterAvatarKitTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB516B6B1F88110A00BEA1F2 /* UIImage+LetterAvatarKitTests.swift */; }; EB821DF61F98B906009B3775 /* LetterAvatarEmptyTestImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = EB821DF21F98B906009B3775 /* LetterAvatarEmptyTestImage@2x.png */; }; EB821DF71F98B906009B3775 /* LetterAvatarEmptyTestImage@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = EB821DF31F98B906009B3775 /* LetterAvatarEmptyTestImage@3x.png */; }; EB821DF81F98B906009B3775 /* LetterAvatarTestImage@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = EB821DF41F98B906009B3775 /* LetterAvatarTestImage@2x.png */; }; EB821DF91F98B906009B3775 /* LetterAvatarTestImage@3x.png in Resources */ = {isa = PBXBuildFile; fileRef = EB821DF51F98B906009B3775 /* LetterAvatarTestImage@3x.png */; }; EB821DFC1F98C233009B3775 /* UIImage+Compare.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB821DFB1F98C233009B3775 /* UIImage+Compare.swift */; }; EB8EC4131F85929E000B7641 /* LetterAvatarKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB8EC4091F85929E000B7641 /* LetterAvatarKit.framework */; }; EB8EC4181F85929E000B7641 /* LetterAvatarBuilderTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB8EC4171F85929E000B7641 /* LetterAvatarBuilderTests.swift */; }; EB8EC41A1F85929E000B7641 /* LetterAvatarKit.h in Headers */ = {isa = PBXBuildFile; fileRef = EB8EC40C1F85929E000B7641 /* LetterAvatarKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; EB8EC4241F859382000B7641 /* LetterAvatarBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB8EC4231F859382000B7641 /* LetterAvatarBuilder.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ EB8EC4141F85929E000B7641 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = EB8EC4001F85929E000B7641 /* Project object */; proxyType = 1; remoteGlobalIDString = EB8EC4081F85929E000B7641; remoteInfo = LetterAvatarKit; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 35089432210272B20024E7CA /* LetterAvatarBuilderConfiguration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LetterAvatarBuilderConfiguration.swift; sourceTree = ""; }; 351F38A21FAA386E0077F001 /* LetterAvatarSingleLetterTestImage@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "LetterAvatarSingleLetterTestImage@3x.png"; sourceTree = ""; }; 351F38A41FAA38D10077F001 /* LetterAvatarSingleLetterTestImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "LetterAvatarSingleLetterTestImage@2x.png"; sourceTree = ""; }; 351F6CED1FA3F9A8003059D2 /* LetterAvatarOneWordTestImage@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "LetterAvatarOneWordTestImage@3x.png"; sourceTree = ""; }; 351F6CEE1FA3F9A8003059D2 /* LetterAvatarOneWordTestImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "LetterAvatarOneWordTestImage@2x.png"; sourceTree = ""; }; 3591E078233C233F0041B834 /* LetterAvatarMakerExtendable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LetterAvatarMakerExtendable.swift; sourceTree = ""; }; 3591E07A233C24830041B834 /* LetterAvatarMaker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LetterAvatarMaker.swift; sourceTree = ""; }; 3591E07C233C26A50041B834 /* LetterAvatarMakerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LetterAvatarMakerTests.swift; sourceTree = ""; }; 35AD1DA71FA8F4FC0059BC9A /* String+LetterAvatarKit.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+LetterAvatarKit.swift"; sourceTree = ""; }; 35AD1DA91FA929720059BC9A /* String+LetterAvatarKitTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+LetterAvatarKitTests.swift"; sourceTree = ""; }; EB516B621F8810D200BEA1F2 /* Character+LetterAvatarKit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Character+LetterAvatarKit.swift"; sourceTree = ""; }; EB516B631F8810D200BEA1F2 /* UIColor+LetterAvatarKit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIColor+LetterAvatarKit.swift"; sourceTree = ""; }; EB516B641F8810D200BEA1F2 /* UIImage+LetterAvatarKit.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIImage+LetterAvatarKit.swift"; sourceTree = ""; }; EB516B691F88110A00BEA1F2 /* Character+LetterAvatarKitTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "Character+LetterAvatarKitTests.swift"; sourceTree = ""; }; EB516B6A1F88110A00BEA1F2 /* UIColor+LetterAvatarKitTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIColor+LetterAvatarKitTests.swift"; sourceTree = ""; }; EB516B6B1F88110A00BEA1F2 /* UIImage+LetterAvatarKitTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "UIImage+LetterAvatarKitTests.swift"; sourceTree = ""; }; EB821DF21F98B906009B3775 /* LetterAvatarEmptyTestImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "LetterAvatarEmptyTestImage@2x.png"; sourceTree = ""; }; EB821DF31F98B906009B3775 /* LetterAvatarEmptyTestImage@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "LetterAvatarEmptyTestImage@3x.png"; sourceTree = ""; }; EB821DF41F98B906009B3775 /* LetterAvatarTestImage@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "LetterAvatarTestImage@2x.png"; sourceTree = ""; }; EB821DF51F98B906009B3775 /* LetterAvatarTestImage@3x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "LetterAvatarTestImage@3x.png"; sourceTree = ""; }; EB821DFB1F98C233009B3775 /* UIImage+Compare.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIImage+Compare.swift"; sourceTree = ""; }; EB8EC4091F85929E000B7641 /* LetterAvatarKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = LetterAvatarKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; EB8EC40C1F85929E000B7641 /* LetterAvatarKit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LetterAvatarKit.h; sourceTree = ""; }; EB8EC40D1F85929E000B7641 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; EB8EC4121F85929E000B7641 /* LetterAvatarKitTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = LetterAvatarKitTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; EB8EC4171F85929E000B7641 /* LetterAvatarBuilderTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LetterAvatarBuilderTests.swift; sourceTree = ""; }; EB8EC4191F85929E000B7641 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; EB8EC4231F859382000B7641 /* LetterAvatarBuilder.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LetterAvatarBuilder.swift; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ EB8EC4051F85929E000B7641 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; EB8EC40F1F85929E000B7641 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( EB8EC4131F85929E000B7641 /* LetterAvatarKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ EB516B611F8810D200BEA1F2 /* Extensions */ = { isa = PBXGroup; children = ( 35AD1DA71FA8F4FC0059BC9A /* String+LetterAvatarKit.swift */, EB516B631F8810D200BEA1F2 /* UIColor+LetterAvatarKit.swift */, EB516B641F8810D200BEA1F2 /* UIImage+LetterAvatarKit.swift */, EB516B621F8810D200BEA1F2 /* Character+LetterAvatarKit.swift */, ); path = Extensions; sourceTree = ""; }; EB516B681F88110A00BEA1F2 /* Extensions */ = { isa = PBXGroup; children = ( 35AD1DA91FA929720059BC9A /* String+LetterAvatarKitTests.swift */, EB516B6A1F88110A00BEA1F2 /* UIColor+LetterAvatarKitTests.swift */, EB516B6B1F88110A00BEA1F2 /* UIImage+LetterAvatarKitTests.swift */, EB516B691F88110A00BEA1F2 /* Character+LetterAvatarKitTests.swift */, ); path = Extensions; sourceTree = ""; }; EB821DF11F98B906009B3775 /* Resources */ = { isa = PBXGroup; children = ( EB821DF41F98B906009B3775 /* LetterAvatarTestImage@2x.png */, EB821DF51F98B906009B3775 /* LetterAvatarTestImage@3x.png */, EB821DF21F98B906009B3775 /* LetterAvatarEmptyTestImage@2x.png */, EB821DF31F98B906009B3775 /* LetterAvatarEmptyTestImage@3x.png */, 351F6CEE1FA3F9A8003059D2 /* LetterAvatarOneWordTestImage@2x.png */, 351F6CED1FA3F9A8003059D2 /* LetterAvatarOneWordTestImage@3x.png */, 351F38A41FAA38D10077F001 /* LetterAvatarSingleLetterTestImage@2x.png */, 351F38A21FAA386E0077F001 /* LetterAvatarSingleLetterTestImage@3x.png */, ); path = Resources; sourceTree = ""; }; EB821DFA1F98C0D4009B3775 /* Utilities */ = { isa = PBXGroup; children = ( EB821DFB1F98C233009B3775 /* UIImage+Compare.swift */, ); path = Utilities; sourceTree = ""; }; EB8EC3FF1F85929E000B7641 = { isa = PBXGroup; children = ( EB8EC40B1F85929E000B7641 /* LetterAvatarKit */, EB8EC4161F85929E000B7641 /* LetterAvatarKitTests */, EB8EC40A1F85929E000B7641 /* Products */, ); sourceTree = ""; }; EB8EC40A1F85929E000B7641 /* Products */ = { isa = PBXGroup; children = ( EB8EC4091F85929E000B7641 /* LetterAvatarKit.framework */, EB8EC4121F85929E000B7641 /* LetterAvatarKitTests.xctest */, ); name = Products; sourceTree = ""; }; EB8EC40B1F85929E000B7641 /* LetterAvatarKit */ = { isa = PBXGroup; children = ( EB516B611F8810D200BEA1F2 /* Extensions */, EB8EC40C1F85929E000B7641 /* LetterAvatarKit.h */, EB8EC4231F859382000B7641 /* LetterAvatarBuilder.swift */, 3591E078233C233F0041B834 /* LetterAvatarMakerExtendable.swift */, 35089432210272B20024E7CA /* LetterAvatarBuilderConfiguration.swift */, 3591E07A233C24830041B834 /* LetterAvatarMaker.swift */, EB8EC40D1F85929E000B7641 /* Info.plist */, ); path = LetterAvatarKit; sourceTree = ""; }; EB8EC4161F85929E000B7641 /* LetterAvatarKitTests */ = { isa = PBXGroup; children = ( EB821DFA1F98C0D4009B3775 /* Utilities */, EB821DF11F98B906009B3775 /* Resources */, EB516B681F88110A00BEA1F2 /* Extensions */, EB8EC4171F85929E000B7641 /* LetterAvatarBuilderTests.swift */, 3591E07C233C26A50041B834 /* LetterAvatarMakerTests.swift */, EB8EC4191F85929E000B7641 /* Info.plist */, ); path = LetterAvatarKitTests; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ EB8EC4061F85929E000B7641 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( EB8EC41A1F85929E000B7641 /* LetterAvatarKit.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ EB8EC4081F85929E000B7641 /* LetterAvatarKit */ = { isa = PBXNativeTarget; buildConfigurationList = EB8EC41D1F85929E000B7641 /* Build configuration list for PBXNativeTarget "LetterAvatarKit" */; buildPhases = ( EB8EC4041F85929E000B7641 /* Sources */, EB8EC4051F85929E000B7641 /* Frameworks */, EB8EC4061F85929E000B7641 /* Headers */, EB8EC4071F85929E000B7641 /* Resources */, 3505688D24215D6500FB2E54 /* SwiftLint */, ); buildRules = ( ); dependencies = ( ); name = LetterAvatarKit; productName = LetterAvatarKit; productReference = EB8EC4091F85929E000B7641 /* LetterAvatarKit.framework */; productType = "com.apple.product-type.framework"; }; EB8EC4111F85929E000B7641 /* LetterAvatarKitTests */ = { isa = PBXNativeTarget; buildConfigurationList = EB8EC4201F85929E000B7641 /* Build configuration list for PBXNativeTarget "LetterAvatarKitTests" */; buildPhases = ( EB8EC40E1F85929E000B7641 /* Sources */, EB8EC40F1F85929E000B7641 /* Frameworks */, EB8EC4101F85929E000B7641 /* Resources */, ); buildRules = ( ); dependencies = ( EB8EC4151F85929E000B7641 /* PBXTargetDependency */, ); name = LetterAvatarKitTests; productName = LetterAvatarKitTests; productReference = EB8EC4121F85929E000B7641 /* LetterAvatarKitTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ EB8EC4001F85929E000B7641 /* Project object */ = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0900; LastUpgradeCheck = 1100; ORGANIZATIONNAME = "Victor Peschenkov"; TargetAttributes = { EB8EC4081F85929E000B7641 = { CreatedOnToolsVersion = 9.0; LastSwiftMigration = 1020; ProvisioningStyle = Automatic; }; EB8EC4111F85929E000B7641 = { CreatedOnToolsVersion = 9.0; LastSwiftMigration = 1110; ProvisioningStyle = Automatic; }; }; }; buildConfigurationList = EB8EC4031F85929E000B7641 /* Build configuration list for PBXProject "LetterAvatarKit" */; compatibilityVersion = "Xcode 8.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); mainGroup = EB8EC3FF1F85929E000B7641; productRefGroup = EB8EC40A1F85929E000B7641 /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( EB8EC4081F85929E000B7641 /* LetterAvatarKit */, EB8EC4111F85929E000B7641 /* LetterAvatarKitTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ EB8EC4071F85929E000B7641 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; EB8EC4101F85929E000B7641 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( EB821DF91F98B906009B3775 /* LetterAvatarTestImage@3x.png in Resources */, 351F38A51FAA38D10077F001 /* LetterAvatarSingleLetterTestImage@2x.png in Resources */, EB821DF71F98B906009B3775 /* LetterAvatarEmptyTestImage@3x.png in Resources */, EB821DF81F98B906009B3775 /* LetterAvatarTestImage@2x.png in Resources */, EB821DF61F98B906009B3775 /* LetterAvatarEmptyTestImage@2x.png in Resources */, 351F38A31FAA386E0077F001 /* LetterAvatarSingleLetterTestImage@3x.png in Resources */, 351F6CF01FA3F9A8003059D2 /* LetterAvatarOneWordTestImage@2x.png in Resources */, 351F6CEF1FA3F9A8003059D2 /* LetterAvatarOneWordTestImage@3x.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ 3505688D24215D6500FB2E54 /* SwiftLint */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( ); name = SwiftLint; outputFileListPaths = ( ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "if which swiftlint >/dev/null; then\n swiftlint\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n"; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ EB8EC4041F85929E000B7641 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( EB8EC4241F859382000B7641 /* LetterAvatarBuilder.swift in Sources */, 3591E07B233C24830041B834 /* LetterAvatarMaker.swift in Sources */, 35AD1DA81FA8F4FC0059BC9A /* String+LetterAvatarKit.swift in Sources */, EB516B651F8810D200BEA1F2 /* Character+LetterAvatarKit.swift in Sources */, 35089433210272B20024E7CA /* LetterAvatarBuilderConfiguration.swift in Sources */, EB516B661F8810D200BEA1F2 /* UIColor+LetterAvatarKit.swift in Sources */, 3591E079233C233F0041B834 /* LetterAvatarMakerExtendable.swift in Sources */, EB516B671F8810D200BEA1F2 /* UIImage+LetterAvatarKit.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; EB8EC40E1F85929E000B7641 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 35AD1DAA1FA929720059BC9A /* String+LetterAvatarKitTests.swift in Sources */, EB8EC4181F85929E000B7641 /* LetterAvatarBuilderTests.swift in Sources */, EB516B6D1F88110A00BEA1F2 /* UIColor+LetterAvatarKitTests.swift in Sources */, EB516B6C1F88110A00BEA1F2 /* Character+LetterAvatarKitTests.swift in Sources */, EB821DFC1F98C233009B3775 /* UIImage+Compare.swift in Sources */, 3591E07D233C26A50041B834 /* LetterAvatarMakerTests.swift in Sources */, EB516B6E1F88110A00BEA1F2 /* UIImage+LetterAvatarKitTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ EB8EC4151F85929E000B7641 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = EB8EC4081F85929E000B7641 /* LetterAvatarKit */; targetProxy = EB8EC4141F85929E000B7641 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ EB8EC41B1F85929E000B7641 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_SWIFT3_OBJC_INFERENCE = Off; SWIFT_VERSION = 5.0; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; EB8EC41C1F85929E000B7641 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_SWIFT3_OBJC_INFERENCE = Off; SWIFT_VERSION = 5.0; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; EB8EC41E1F85929E000B7641 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = LetterAvatarKit/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MARKETING_VERSION = 1.2.4; PRODUCT_BUNDLE_IDENTIFIER = com.github.vpeschenkov.LetterAvatarKit; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; EB8EC41F1F85929E000B7641 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = ""; CODE_SIGN_STYLE = Automatic; DEFINES_MODULE = YES; DEVELOPMENT_TEAM = ""; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = LetterAvatarKit/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MARKETING_VERSION = 1.2.4; PRODUCT_BUNDLE_IDENTIFIER = com.github.vpeschenkov.LetterAvatarKit; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SKIP_INSTALL = YES; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; EB8EC4211F85929E000B7641 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = LetterAvatarKitTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = org.peschenkov.LetterAvatarKit.LetterAvatarKitTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = ""; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; EB8EC4221F85929E000B7641 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ENABLE_MODULES = YES; CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = LetterAvatarKitTests/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = org.peschenkov.LetterAvatarKit.LetterAvatarKitTests; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = ""; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ EB8EC4031F85929E000B7641 /* Build configuration list for PBXProject "LetterAvatarKit" */ = { isa = XCConfigurationList; buildConfigurations = ( EB8EC41B1F85929E000B7641 /* Debug */, EB8EC41C1F85929E000B7641 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; EB8EC41D1F85929E000B7641 /* Build configuration list for PBXNativeTarget "LetterAvatarKit" */ = { isa = XCConfigurationList; buildConfigurations = ( EB8EC41E1F85929E000B7641 /* Debug */, EB8EC41F1F85929E000B7641 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; EB8EC4201F85929E000B7641 /* Build configuration list for PBXNativeTarget "LetterAvatarKitTests" */ = { isa = XCConfigurationList; buildConfigurations = ( EB8EC4211F85929E000B7641 /* Debug */, EB8EC4221F85929E000B7641 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = EB8EC4001F85929E000B7641 /* Project object */; } ================================================ FILE: LetterAvatarKit.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: LetterAvatarKit.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist ================================================ IDEDidComputeMac32BitWarning ================================================ FILE: LetterAvatarKit.xcodeproj/xcshareddata/xcschemes/LetterAvatarKit.xcscheme ================================================ ================================================ FILE: LetterAvatarKitExample/LetterAvatarKitExample/AppDelegate.swift ================================================ // // AppDelegate.swift // LetterAvatarKitExample // // Copyright 2017 Victor Peschenkov // // Permission is hereby granted, free of charge, to any person obtaining a copy // o this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? } ================================================ FILE: LetterAvatarKitExample/LetterAvatarKitExample/Assets.xcassets/AppIcon.appiconset/Contents.json ================================================ { "images" : [ { "idiom" : "iphone", "size" : "20x20", "scale" : "2x" }, { "idiom" : "iphone", "size" : "20x20", "scale" : "3x" }, { "idiom" : "iphone", "size" : "29x29", "scale" : "2x" }, { "idiom" : "iphone", "size" : "29x29", "scale" : "3x" }, { "idiom" : "iphone", "size" : "40x40", "scale" : "2x" }, { "idiom" : "iphone", "size" : "40x40", "scale" : "3x" }, { "idiom" : "iphone", "size" : "60x60", "scale" : "2x" }, { "idiom" : "iphone", "size" : "60x60", "scale" : "3x" }, { "idiom" : "ipad", "size" : "20x20", "scale" : "1x" }, { "idiom" : "ipad", "size" : "20x20", "scale" : "2x" }, { "idiom" : "ipad", "size" : "29x29", "scale" : "1x" }, { "idiom" : "ipad", "size" : "29x29", "scale" : "2x" }, { "idiom" : "ipad", "size" : "40x40", "scale" : "1x" }, { "idiom" : "ipad", "size" : "40x40", "scale" : "2x" }, { "idiom" : "ipad", "size" : "76x76", "scale" : "1x" }, { "idiom" : "ipad", "size" : "76x76", "scale" : "2x" }, { "idiom" : "ipad", "size" : "83.5x83.5", "scale" : "2x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: LetterAvatarKitExample/LetterAvatarKitExample/Base.lproj/LaunchScreen.storyboard ================================================ ================================================ FILE: LetterAvatarKitExample/LetterAvatarKitExample/Base.lproj/Main.storyboard ================================================ ================================================ FILE: LetterAvatarKitExample/LetterAvatarKitExample/Info.plist ================================================ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleVersion 1 LSRequiresIPhoneOS UILaunchStoryboardName LaunchScreen UIMainStoryboardFile Main UIRequiredDeviceCapabilities armv7 UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UISupportedInterfaceOrientations~ipad UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight ================================================ FILE: LetterAvatarKitExample/LetterAvatarKitExample/LetterAvatarController.swift ================================================ // // ViewController.swift // LetterAvatarKitExample // // Copyright 2017 Victor Peschenkov // // Permission is hereby granted, free of charge, to any person obtaining a copy // o this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // import UIKit import LetterAvatarKit class LetterAvatarController: UIViewController { @IBOutlet var avatarImageView: UIImageView! override func viewDidLoad() { super.viewDidLoad() let width = UIScreen.main.bounds.size.width let height = width let avatarImage = LetterAvatarMaker() .setUsername("Letter Avatar") .setSize(CGSize(width: width, height: height)) .build() avatarImageView.image = avatarImage } } ================================================ FILE: LetterAvatarKitExample/LetterAvatarKitExample.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 52; objects = { /* Begin PBXBuildFile section */ 35DF42E2233D1B8700BFCE8F /* LetterAvatarController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 35DF42E1233D1B8700BFCE8F /* LetterAvatarController.swift */; }; 98CF310F244B159000A218C2 /* LetterAvatarKit in Frameworks */ = {isa = PBXBuildFile; productRef = 98CF310E244B159000A218C2 /* LetterAvatarKit */; }; EBEC63BE1F8CF49B00CE334B /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBEC63BD1F8CF49B00CE334B /* AppDelegate.swift */; }; EBEC63C31F8CF49B00CE334B /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EBEC63C11F8CF49B00CE334B /* Main.storyboard */; }; EBEC63C51F8CF49B00CE334B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EBEC63C41F8CF49B00CE334B /* Assets.xcassets */; }; EBEC63C81F8CF49B00CE334B /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EBEC63C61F8CF49B00CE334B /* LaunchScreen.storyboard */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 35DF42E1233D1B8700BFCE8F /* LetterAvatarController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LetterAvatarController.swift; sourceTree = ""; }; EBEC63BA1F8CF49B00CE334B /* LetterAvatarKitExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = LetterAvatarKitExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; EBEC63BD1F8CF49B00CE334B /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; EBEC63C21F8CF49B00CE334B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; EBEC63C41F8CF49B00CE334B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; EBEC63C71F8CF49B00CE334B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; EBEC63C91F8CF49B00CE334B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ EBEC63B71F8CF49B00CE334B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 98CF310F244B159000A218C2 /* LetterAvatarKit in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 35DF42DE233D1B3C00BFCE8F /* Support Files */ = { isa = PBXGroup; children = ( EBEC63C11F8CF49B00CE334B /* Main.storyboard */, EBEC63C61F8CF49B00CE334B /* LaunchScreen.storyboard */, EBEC63C41F8CF49B00CE334B /* Assets.xcassets */, EBEC63C91F8CF49B00CE334B /* Info.plist */, ); name = "Support Files"; sourceTree = ""; }; EBEC63B11F8CF49B00CE334B = { isa = PBXGroup; children = ( EBEC63BC1F8CF49B00CE334B /* LetterAvatarKitExample */, EBEC63BB1F8CF49B00CE334B /* Products */, ); sourceTree = ""; }; EBEC63BB1F8CF49B00CE334B /* Products */ = { isa = PBXGroup; children = ( EBEC63BA1F8CF49B00CE334B /* LetterAvatarKitExample.app */, ); name = Products; sourceTree = ""; }; EBEC63BC1F8CF49B00CE334B /* LetterAvatarKitExample */ = { isa = PBXGroup; children = ( EBEC63BD1F8CF49B00CE334B /* AppDelegate.swift */, 35DF42E1233D1B8700BFCE8F /* LetterAvatarController.swift */, 35DF42DE233D1B3C00BFCE8F /* Support Files */, ); path = LetterAvatarKitExample; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ EBEC63B91F8CF49B00CE334B /* LetterAvatarKitExample */ = { isa = PBXNativeTarget; buildConfigurationList = EBEC63CC1F8CF49B00CE334B /* Build configuration list for PBXNativeTarget "LetterAvatarKitExample" */; buildPhases = ( EBEC63B61F8CF49B00CE334B /* Sources */, EBEC63B71F8CF49B00CE334B /* Frameworks */, EBEC63B81F8CF49B00CE334B /* Resources */, ); buildRules = ( ); dependencies = ( ); name = LetterAvatarKitExample; packageProductDependencies = ( 98CF310E244B159000A218C2 /* LetterAvatarKit */, ); productName = LetterAvatarKitExample; productReference = EBEC63BA1F8CF49B00CE334B /* LetterAvatarKitExample.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ EBEC63B21F8CF49B00CE334B /* Project object */ = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0900; LastUpgradeCheck = 0930; ORGANIZATIONNAME = "Victor Peschenkov"; TargetAttributes = { EBEC63B91F8CF49B00CE334B = { CreatedOnToolsVersion = 9.0; LastSwiftMigration = 1020; ProvisioningStyle = Automatic; }; }; }; buildConfigurationList = EBEC63B51F8CF49B00CE334B /* Build configuration list for PBXProject "LetterAvatarKitExample" */; compatibilityVersion = "Xcode 8.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); mainGroup = EBEC63B11F8CF49B00CE334B; packageReferences = ( 98CF310D244B159000A218C2 /* XCRemoteSwiftPackageReference "LetterAvatarKit" */, ); productRefGroup = EBEC63BB1F8CF49B00CE334B /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( EBEC63B91F8CF49B00CE334B /* LetterAvatarKitExample */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ EBEC63B81F8CF49B00CE334B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( EBEC63C81F8CF49B00CE334B /* LaunchScreen.storyboard in Resources */, EBEC63C51F8CF49B00CE334B /* Assets.xcassets in Resources */, EBEC63C31F8CF49B00CE334B /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ EBEC63B61F8CF49B00CE334B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 35DF42E2233D1B8700BFCE8F /* LetterAvatarController.swift in Sources */, EBEC63BE1F8CF49B00CE334B /* AppDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ EBEC63C11F8CF49B00CE334B /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( EBEC63C21F8CF49B00CE334B /* Base */, ); name = Main.storyboard; sourceTree = ""; }; EBEC63C61F8CF49B00CE334B /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( EBEC63C71F8CF49B00CE334B /* Base */, ); name = LaunchScreen.storyboard; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ EBEC63CA1F8CF49B00CE334B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; EBEC63CB1F8CF49B00CE334B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_OPTIMIZATION_LEVEL = "-O"; VALIDATE_PRODUCT = YES; }; name = Release; }; EBEC63CD1F8CF49B00CE334B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = LetterAvatarKitExample/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); PRODUCT_BUNDLE_IDENTIFIER = org.peschenkov.LetterAvatarKitExample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; EBEC63CE1F8CF49B00CE334B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = LetterAvatarKitExample/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); PRODUCT_BUNDLE_IDENTIFIER = org.peschenkov.LetterAvatarKitExample; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ EBEC63B51F8CF49B00CE334B /* Build configuration list for PBXProject "LetterAvatarKitExample" */ = { isa = XCConfigurationList; buildConfigurations = ( EBEC63CA1F8CF49B00CE334B /* Debug */, EBEC63CB1F8CF49B00CE334B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; EBEC63CC1F8CF49B00CE334B /* Build configuration list for PBXNativeTarget "LetterAvatarKitExample" */ = { isa = XCConfigurationList; buildConfigurations = ( EBEC63CD1F8CF49B00CE334B /* Debug */, EBEC63CE1F8CF49B00CE334B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ 98CF310D244B159000A218C2 /* XCRemoteSwiftPackageReference "LetterAvatarKit" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/vpeschenkov/LetterAvatarKit"; requirement = { kind = upToNextMajorVersion; minimumVersion = 1.2.2; }; }; /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ 98CF310E244B159000A218C2 /* LetterAvatarKit */ = { isa = XCSwiftPackageProductDependency; package = 98CF310D244B159000A218C2 /* XCRemoteSwiftPackageReference "LetterAvatarKit" */; productName = LetterAvatarKit; }; /* End XCSwiftPackageProductDependency section */ }; rootObject = EBEC63B21F8CF49B00CE334B /* Project object */; } ================================================ FILE: LetterAvatarKitExample/LetterAvatarKitExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: LetterAvatarKitExample/LetterAvatarKitExample.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist ================================================ IDEDidComputeMac32BitWarning ================================================ FILE: LetterAvatarKitExample/LetterAvatarKitExample.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved ================================================ { "object": { "pins": [ { "package": "LetterAvatarKit", "repositoryURL": "https://github.com/vpeschenkov/LetterAvatarKit", "state": { "branch": null, "revision": "41f67ab75f428fee719b31a60cdc795d4b5caeb5", "version": "1.2.3" } } ] }, "version": 1 } ================================================ FILE: LetterAvatarKitObjcExample/LetterAvatarKitObjcExample/AppDelegate.h ================================================ /* AppDelegate.h LetterAvatarKitObjcExample Copyright 2017 Victor Peschenkov Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ @import UIKit; @interface AppDelegate : UIResponder @property (strong, nonatomic) UIWindow *window; @end ================================================ FILE: LetterAvatarKitObjcExample/LetterAvatarKitObjcExample/AppDelegate.m ================================================ /* AppDelegate.m LetterAvatarKitObjcExample Copyright 2017 Victor Peschenkov Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #import "AppDelegate.h" @interface AppDelegate () @end @implementation AppDelegate @end ================================================ FILE: LetterAvatarKitObjcExample/LetterAvatarKitObjcExample/Assets.xcassets/AppIcon.appiconset/Contents.json ================================================ { "images" : [ { "idiom" : "iphone", "size" : "20x20", "scale" : "2x" }, { "idiom" : "iphone", "size" : "20x20", "scale" : "3x" }, { "idiom" : "iphone", "size" : "29x29", "scale" : "2x" }, { "idiom" : "iphone", "size" : "29x29", "scale" : "3x" }, { "idiom" : "iphone", "size" : "40x40", "scale" : "2x" }, { "idiom" : "iphone", "size" : "40x40", "scale" : "3x" }, { "idiom" : "iphone", "size" : "60x60", "scale" : "2x" }, { "idiom" : "iphone", "size" : "60x60", "scale" : "3x" }, { "idiom" : "ipad", "size" : "20x20", "scale" : "1x" }, { "idiom" : "ipad", "size" : "20x20", "scale" : "2x" }, { "idiom" : "ipad", "size" : "29x29", "scale" : "1x" }, { "idiom" : "ipad", "size" : "29x29", "scale" : "2x" }, { "idiom" : "ipad", "size" : "40x40", "scale" : "1x" }, { "idiom" : "ipad", "size" : "40x40", "scale" : "2x" }, { "idiom" : "ipad", "size" : "76x76", "scale" : "1x" }, { "idiom" : "ipad", "size" : "76x76", "scale" : "2x" }, { "idiom" : "ipad", "size" : "83.5x83.5", "scale" : "2x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: LetterAvatarKitObjcExample/LetterAvatarKitObjcExample/Base.lproj/LaunchScreen.storyboard ================================================ ================================================ FILE: LetterAvatarKitObjcExample/LetterAvatarKitObjcExample/Base.lproj/Main.storyboard ================================================ ================================================ FILE: LetterAvatarKitObjcExample/LetterAvatarKitObjcExample/Info.plist ================================================ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleVersion 1 LSRequiresIPhoneOS UILaunchStoryboardName LaunchScreen UIMainStoryboardFile Main UIRequiredDeviceCapabilities armv7 UISupportedInterfaceOrientations UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UISupportedInterfaceOrientations~ipad UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight ================================================ FILE: LetterAvatarKitObjcExample/LetterAvatarKitObjcExample/ViewController.h ================================================ /* ViewController.h LetterAvatarKitObjcExample Copyright 2017 Victor Peschenkov Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ @import UIKit; @interface ViewController : UIViewController @end ================================================ FILE: LetterAvatarKitObjcExample/LetterAvatarKitObjcExample/ViewController.m ================================================ /* ViewController.m LetterAvatarKitObjcExample Copyright 2017 Victor Peschenkov Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #import "ViewController.h" @import LetterAvatarKit; @interface ViewController () @property (weak, nonatomic) IBOutlet UIImageView *avatarImageView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; LKLetterAvatarBuilderConfiguration *configuration = [[LKLetterAvatarBuilderConfiguration alloc] init]; configuration.size = CGSizeMake([UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.width); configuration.username = @"Letter Avatar"; self.avatarImageView.image = [UIImage lk_makeLetterAvatarWithConfiguration:configuration]; } @end ================================================ FILE: LetterAvatarKitObjcExample/LetterAvatarKitObjcExample/main.m ================================================ /* main.m LetterAvatarKitObjcExample Copyright 2017 Victor Peschenkov Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ @import UIKit; #import "AppDelegate.h" int main(int argc, char * argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } } ================================================ FILE: LetterAvatarKitObjcExample/LetterAvatarKitObjcExample.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 48; objects = { /* Begin PBXBuildFile section */ 46FA21BD4EB27BE5F7A6C8D1 /* Pods_LetterAvatarKitObjcExample.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F79E7DD64DB65922D1B10481 /* Pods_LetterAvatarKitObjcExample.framework */; }; EBEC63DD1F8CF4D500CE334B /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = EBEC63DC1F8CF4D500CE334B /* AppDelegate.m */; }; EBEC63E01F8CF4D500CE334B /* ViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = EBEC63DF1F8CF4D500CE334B /* ViewController.m */; }; EBEC63E31F8CF4D500CE334B /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EBEC63E11F8CF4D500CE334B /* Main.storyboard */; }; EBEC63E51F8CF4D500CE334B /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = EBEC63E41F8CF4D500CE334B /* Assets.xcassets */; }; EBEC63E81F8CF4D500CE334B /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = EBEC63E61F8CF4D500CE334B /* LaunchScreen.storyboard */; }; EBEC63EB1F8CF4D500CE334B /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = EBEC63EA1F8CF4D500CE334B /* main.m */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 40F6D7CDB10F35F29B5D6BB4 /* Pods-LetterAvatarKitObjcExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LetterAvatarKitObjcExample.release.xcconfig"; path = "Pods/Target Support Files/Pods-LetterAvatarKitObjcExample/Pods-LetterAvatarKitObjcExample.release.xcconfig"; sourceTree = ""; }; E632DE081B73AD6E0E65D8CC /* Pods-LetterAvatarKitObjcExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-LetterAvatarKitObjcExample.debug.xcconfig"; path = "Pods/Target Support Files/Pods-LetterAvatarKitObjcExample/Pods-LetterAvatarKitObjcExample.debug.xcconfig"; sourceTree = ""; }; EBEC63D81F8CF4D500CE334B /* LetterAvatarKitObjcExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = LetterAvatarKitObjcExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; EBEC63DB1F8CF4D500CE334B /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; EBEC63DC1F8CF4D500CE334B /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; EBEC63DE1F8CF4D500CE334B /* ViewController.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ViewController.h; sourceTree = ""; }; EBEC63DF1F8CF4D500CE334B /* ViewController.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ViewController.m; sourceTree = ""; }; EBEC63E21F8CF4D500CE334B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; EBEC63E41F8CF4D500CE334B /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; EBEC63E71F8CF4D500CE334B /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; EBEC63E91F8CF4D500CE334B /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; EBEC63EA1F8CF4D500CE334B /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; F79E7DD64DB65922D1B10481 /* Pods_LetterAvatarKitObjcExample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_LetterAvatarKitObjcExample.framework; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ EBEC63D51F8CF4D500CE334B /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 46FA21BD4EB27BE5F7A6C8D1 /* Pods_LetterAvatarKitObjcExample.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 607787658201234DEF6A20B9 /* Frameworks */ = { isa = PBXGroup; children = ( F79E7DD64DB65922D1B10481 /* Pods_LetterAvatarKitObjcExample.framework */, ); name = Frameworks; sourceTree = ""; }; CFE403314954231013ACA49D /* Pods */ = { isa = PBXGroup; children = ( E632DE081B73AD6E0E65D8CC /* Pods-LetterAvatarKitObjcExample.debug.xcconfig */, 40F6D7CDB10F35F29B5D6BB4 /* Pods-LetterAvatarKitObjcExample.release.xcconfig */, ); name = Pods; sourceTree = ""; }; EBEC63CF1F8CF4D500CE334B = { isa = PBXGroup; children = ( EBEC63DA1F8CF4D500CE334B /* LetterAvatarKitObjcExample */, EBEC63D91F8CF4D500CE334B /* Products */, CFE403314954231013ACA49D /* Pods */, 607787658201234DEF6A20B9 /* Frameworks */, ); sourceTree = ""; }; EBEC63D91F8CF4D500CE334B /* Products */ = { isa = PBXGroup; children = ( EBEC63D81F8CF4D500CE334B /* LetterAvatarKitObjcExample.app */, ); name = Products; sourceTree = ""; }; EBEC63DA1F8CF4D500CE334B /* LetterAvatarKitObjcExample */ = { isa = PBXGroup; children = ( EBEC63DB1F8CF4D500CE334B /* AppDelegate.h */, EBEC63DC1F8CF4D500CE334B /* AppDelegate.m */, EBEC63DE1F8CF4D500CE334B /* ViewController.h */, EBEC63DF1F8CF4D500CE334B /* ViewController.m */, EBEC63E11F8CF4D500CE334B /* Main.storyboard */, EBEC63E41F8CF4D500CE334B /* Assets.xcassets */, EBEC63E61F8CF4D500CE334B /* LaunchScreen.storyboard */, EBEC63E91F8CF4D500CE334B /* Info.plist */, EBEC63EA1F8CF4D500CE334B /* main.m */, ); path = LetterAvatarKitObjcExample; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ EBEC63D71F8CF4D500CE334B /* LetterAvatarKitObjcExample */ = { isa = PBXNativeTarget; buildConfigurationList = EBEC63EE1F8CF4D500CE334B /* Build configuration list for PBXNativeTarget "LetterAvatarKitObjcExample" */; buildPhases = ( 5A359C70069A3D9A0849A767 /* [CP] Check Pods Manifest.lock */, EBEC63D41F8CF4D500CE334B /* Sources */, EBEC63D51F8CF4D500CE334B /* Frameworks */, EBEC63D61F8CF4D500CE334B /* Resources */, BEE50A44E6DFE0BD195747AB /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); dependencies = ( ); name = LetterAvatarKitObjcExample; productName = LetterAvatarKitObjcExample; productReference = EBEC63D81F8CF4D500CE334B /* LetterAvatarKitObjcExample.app */; productType = "com.apple.product-type.application"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ EBEC63D01F8CF4D500CE334B /* Project object */ = { isa = PBXProject; attributes = { LastUpgradeCheck = 1100; ORGANIZATIONNAME = "Victor Peschenkov"; TargetAttributes = { EBEC63D71F8CF4D500CE334B = { CreatedOnToolsVersion = 9.0; ProvisioningStyle = Automatic; }; }; }; buildConfigurationList = EBEC63D31F8CF4D500CE334B /* Build configuration list for PBXProject "LetterAvatarKitObjcExample" */; compatibilityVersion = "Xcode 8.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); mainGroup = EBEC63CF1F8CF4D500CE334B; productRefGroup = EBEC63D91F8CF4D500CE334B /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( EBEC63D71F8CF4D500CE334B /* LetterAvatarKitObjcExample */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ EBEC63D61F8CF4D500CE334B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( EBEC63E81F8CF4D500CE334B /* LaunchScreen.storyboard in Resources */, EBEC63E51F8CF4D500CE334B /* Assets.xcassets in Resources */, EBEC63E31F8CF4D500CE334B /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ 5A359C70069A3D9A0849A767 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( "${PODS_PODFILE_DIR_PATH}/Podfile.lock", "${PODS_ROOT}/Manifest.lock", ); name = "[CP] Check Pods Manifest.lock"; outputPaths = ( "$(DERIVED_FILE_DIR)/Pods-LetterAvatarKitObjcExample-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; BEE50A44E6DFE0BD195747AB /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputPaths = ( "${PODS_ROOT}/Target Support Files/Pods-LetterAvatarKitObjcExample/Pods-LetterAvatarKitObjcExample-frameworks.sh", "${BUILT_PRODUCTS_DIR}/LetterAvatarKit/LetterAvatarKit.framework", ); name = "[CP] Embed Pods Frameworks"; outputPaths = ( "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/LetterAvatarKit.framework", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-LetterAvatarKitObjcExample/Pods-LetterAvatarKitObjcExample-frameworks.sh\"\n"; showEnvVarsInLog = 0; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ EBEC63D41F8CF4D500CE334B /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( EBEC63E01F8CF4D500CE334B /* ViewController.m in Sources */, EBEC63EB1F8CF4D500CE334B /* main.m in Sources */, EBEC63DD1F8CF4D500CE334B /* AppDelegate.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXVariantGroup section */ EBEC63E11F8CF4D500CE334B /* Main.storyboard */ = { isa = PBXVariantGroup; children = ( EBEC63E21F8CF4D500CE334B /* Base */, ); name = Main.storyboard; sourceTree = ""; }; EBEC63E61F8CF4D500CE334B /* LaunchScreen.storyboard */ = { isa = PBXVariantGroup; children = ( EBEC63E71F8CF4D500CE334B /* Base */, ); name = LaunchScreen.storyboard; sourceTree = ""; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ EBEC63EC1F8CF4D500CE334B /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; }; name = Debug; }; EBEC63ED1F8CF4D500CE334B /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; VALIDATE_PRODUCT = YES; }; name = Release; }; EBEC63EF1F8CF4D500CE334B /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = E632DE081B73AD6E0E65D8CC /* Pods-LetterAvatarKitObjcExample.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = LetterAvatarKitObjcExample/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = org.peschenkov.LetterAvatarKitObjcExample; PRODUCT_NAME = "$(TARGET_NAME)"; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Debug; }; EBEC63F01F8CF4D500CE334B /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 40F6D7CDB10F35F29B5D6BB4 /* Pods-LetterAvatarKitObjcExample.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; INFOPLIST_FILE = LetterAvatarKitObjcExample/Info.plist; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; PRODUCT_BUNDLE_IDENTIFIER = org.peschenkov.LetterAvatarKitObjcExample; PRODUCT_NAME = "$(TARGET_NAME)"; TARGETED_DEVICE_FAMILY = "1,2"; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ EBEC63D31F8CF4D500CE334B /* Build configuration list for PBXProject "LetterAvatarKitObjcExample" */ = { isa = XCConfigurationList; buildConfigurations = ( EBEC63EC1F8CF4D500CE334B /* Debug */, EBEC63ED1F8CF4D500CE334B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; EBEC63EE1F8CF4D500CE334B /* Build configuration list for PBXNativeTarget "LetterAvatarKitObjcExample" */ = { isa = XCConfigurationList; buildConfigurations = ( EBEC63EF1F8CF4D500CE334B /* Debug */, EBEC63F01F8CF4D500CE334B /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = EBEC63D01F8CF4D500CE334B /* Project object */; } ================================================ FILE: LetterAvatarKitObjcExample/LetterAvatarKitObjcExample.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: LetterAvatarKitObjcExample/LetterAvatarKitObjcExample.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: LetterAvatarKitObjcExample/Podfile ================================================ platform :ios, '9.0' source 'https://github.com/CocoaPods/Specs.git' use_frameworks! target 'LetterAvatarKitObjcExample' do pod "LetterAvatarKit", :path => "../" end ================================================ FILE: LetterAvatarKitObjcExample/Pods/Local Podspecs/LetterAvatarKit.podspec.json ================================================ { "name": "LetterAvatarKit", "platforms": { "ios": "8.0" }, "version": "1.2.1", "license": { "type": "MIT" }, "homepage": "https://github.com/vpeschenkov/LetterAvatarKit", "authors": { "Viktor Peschenkov": "v.peschenkov@gmail.com" }, "summary": "An extension that generates letter-based avatars/placeholders written in Swift", "source": { "git": "https://github.com/vpeschenkov/LetterAvatarKit.git", "tag": "1.2.1" }, "source_files": [ "LetterAvatarKit/*.{h,swift}", "LetterAvatarKit/Extensions/*.{swift}" ], "requires_arc": true, "frameworks": [ "Foundation", "UIKit" ], "swift_versions": "5.0", "swift_version": "5.0" } ================================================ FILE: LetterAvatarKitObjcExample/Pods/Pods.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 48; objects = { /* Begin PBXBuildFile section */ 0F55DC4A827824DF0F5F9B22A254D434 /* UIColor+LetterAvatarKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9E9BF32A454FA11EA9B0A51D7585499E /* UIColor+LetterAvatarKit.swift */; }; 19E09AFDD0E82A054C5A307432F1DC76 /* Pods-LetterAvatarKitObjcExample-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 88633E760E91F5DB5655075DC75A60E1 /* Pods-LetterAvatarKitObjcExample-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 20A650EB1E7C8045010B4AFA6CCD89F3 /* LetterAvatarBuilder.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7FEC7E67B4ACCE8D3C71AF49056DA9A8 /* LetterAvatarBuilder.swift */; }; 20F9424F46741F8CA46D7393BA9DBD0B /* LetterAvatarKit-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5ABBC4D9458F23B38DA6C5B5F0834B76 /* LetterAvatarKit-dummy.m */; }; 22FC893DD469F2835F808E08D669F97E /* Pods-LetterAvatarKitObjcExample-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 4C50D087AE41542C5113C0257B89E33B /* Pods-LetterAvatarKitObjcExample-dummy.m */; }; 2A7D08911242525AC2BBAC1E626EEF10 /* Character+LetterAvatarKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7DECEB5DDF01C1A0EB8418234BA17452 /* Character+LetterAvatarKit.swift */; }; 2BCB24FE50C2EE156DA2BB4CED48174A /* LetterAvatarKit.h in Headers */ = {isa = PBXBuildFile; fileRef = B7CCCAA4FF8B6649CE22562854BFC69F /* LetterAvatarKit.h */; settings = {ATTRIBUTES = (Public, ); }; }; 3AA27E2E6603E85CC93A5E5A586F5113 /* LetterAvatarBuilderConfiguration.swift in Sources */ = {isa = PBXBuildFile; fileRef = 85D288C2A8894EFA80619913FAE56490 /* LetterAvatarBuilderConfiguration.swift */; }; 6862CB88019C04E95E8C888DB44C1DBB /* LetterAvatarMakerExtendable.swift in Sources */ = {isa = PBXBuildFile; fileRef = 779F265110D2453F4BA9536A5B157965 /* LetterAvatarMakerExtendable.swift */; }; 7DD95FBC166F6E09EBABCD489AFF7D6B /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */; }; 8B24B7503165556923D8D926CFD8CC68 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 312B988EF117AE4DE76A268D970131FE /* UIKit.framework */; }; B1569E201C78FE50BDDD0CF4D5D2FBE7 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */; }; BD82DD765EA58EE3C568864183550384 /* LetterAvatarMaker.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76265D46F45CA31F735AE944955F3090 /* LetterAvatarMaker.swift */; }; D4FC11C3CCE142EFCA7E04FC96135329 /* LetterAvatarKit-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 07AB794DBA7D3FC57F1CE52437FF92E1 /* LetterAvatarKit-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; DB46711390F009E0B32FB4154D7A09CF /* UIImage+LetterAvatarKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6E3DF090B2D999F9611E4367EEC38BAA /* UIImage+LetterAvatarKit.swift */; }; E544276E5EFFA82AAD26DCFF5232943B /* String+LetterAvatarKit.swift in Sources */ = {isa = PBXBuildFile; fileRef = C6F719F05868B0CE9C301D85F81B90A5 /* String+LetterAvatarKit.swift */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ 8DE6AB1BD549A72EC0A776AB806BDBB2 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; proxyType = 1; remoteGlobalIDString = D9F7736046D8F388E749400613707326; remoteInfo = LetterAvatarKit; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ 07AB794DBA7D3FC57F1CE52437FF92E1 /* LetterAvatarKit-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LetterAvatarKit-umbrella.h"; sourceTree = ""; }; 0BA107F8470A3DD3D9280D7A375347FD /* LetterAvatarKit-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "LetterAvatarKit-prefix.pch"; sourceTree = ""; }; 0D83C87F7D61A27F12A19E22B3173F2D /* Classes.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Classes.html; path = docs/Classes.html; sourceTree = ""; }; 123252F631A8F393863B15A216C1513D /* carat.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = carat.png; path = docs/docsets/LetterAvatarKit.docset/Contents/Resources/Documents/img/carat.png; sourceTree = ""; }; 15F9CCA5786FEF74B11D867FB973DEE0 /* Pods-LetterAvatarKitObjcExample-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-LetterAvatarKitObjcExample-frameworks.sh"; sourceTree = ""; }; 1686ED9EC1754982B62A4E2FCEEDA239 /* LetterAvatarKit-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "LetterAvatarKit-Info.plist"; sourceTree = ""; }; 19F6558309DB4FD505632F2AF35C0AE7 /* carat.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = carat.png; path = docs/img/carat.png; sourceTree = ""; }; 312B988EF117AE4DE76A268D970131FE /* UIKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = UIKit.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/UIKit.framework; sourceTree = DEVELOPER_DIR; }; 312CDE39B9D1BC49B92A78237DB39F98 /* LetterAvatarBuilderConfiguration.html */ = {isa = PBXFileReference; includeInIndex = 1; name = LetterAvatarBuilderConfiguration.html; path = docs/Classes/LetterAvatarBuilderConfiguration.html; sourceTree = ""; }; 3225B610822FFF2265134C92F7E6ACC2 /* search.json */ = {isa = PBXFileReference; includeInIndex = 1; name = search.json; path = docs/search.json; sourceTree = ""; }; 353245E92E269EFC1F09D150390FC13E /* LetterAvatarKit.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = LetterAvatarKit.xcconfig; sourceTree = ""; }; 38205A8531F7E916E7E4642B60340D7B /* gh.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = gh.png; path = docs/img/gh.png; sourceTree = ""; }; 3F75AFED5837C88AEF197D47BAA22140 /* Pods-LetterAvatarKitObjcExample-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-LetterAvatarKitObjcExample-Info.plist"; sourceTree = ""; }; 435363007DD6E5E6CF321B4D3A9ABB77 /* highlight.css */ = {isa = PBXFileReference; includeInIndex = 1; name = highlight.css; path = docs/docsets/LetterAvatarKit.docset/Contents/Resources/Documents/css/highlight.css; sourceTree = ""; }; 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.2.sdk/System/Library/Frameworks/Foundation.framework; sourceTree = DEVELOPER_DIR; }; 45297D5EDDC0D4EE752B938CD25940FF /* LetterAvatarBuilderConfiguration.html */ = {isa = PBXFileReference; includeInIndex = 1; name = LetterAvatarBuilderConfiguration.html; path = docs/docsets/LetterAvatarKit.docset/Contents/Resources/Documents/Classes/LetterAvatarBuilderConfiguration.html; sourceTree = ""; }; 4C50D087AE41542C5113C0257B89E33B /* Pods-LetterAvatarKitObjcExample-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-LetterAvatarKitObjcExample-dummy.m"; sourceTree = ""; }; 4C51C23361C1B7FD2BD39F56EA51E950 /* jazzy.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.js; path = docs/js/jazzy.js; sourceTree = ""; }; 50DF8C1FB951CCD5512D371876B30218 /* gh.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = gh.png; path = docs/docsets/LetterAvatarKit.docset/Contents/Resources/Documents/img/gh.png; sourceTree = ""; }; 563250A697FB009E508EB46B20DE1ADA /* LetterAvatarKit.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = LetterAvatarKit.framework; path = LetterAvatarKit.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 575456FB39CC6683D8FDA84DB3CBF9E7 /* Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = Info.plist; path = docs/docsets/LetterAvatarKit.docset/Contents/Info.plist; sourceTree = ""; }; 57DA105AAD84B0803F512F9AEAC73BE0 /* Pods-LetterAvatarKitObjcExample-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-LetterAvatarKitObjcExample-acknowledgements.plist"; sourceTree = ""; }; 5ABBC4D9458F23B38DA6C5B5F0834B76 /* LetterAvatarKit-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "LetterAvatarKit-dummy.m"; sourceTree = ""; }; 5C5AF5110275E531D68AE386024C94D5 /* index.html */ = {isa = PBXFileReference; includeInIndex = 1; name = index.html; path = docs/docsets/LetterAvatarKit.docset/Contents/Resources/Documents/index.html; sourceTree = ""; }; 633B61E25A133A5A30D36523108A0FBB /* UIColor.html */ = {isa = PBXFileReference; includeInIndex = 1; name = UIColor.html; path = docs/docsets/LetterAvatarKit.docset/Contents/Resources/Documents/Extensions/UIColor.html; sourceTree = ""; }; 6E3DF090B2D999F9611E4367EEC38BAA /* UIImage+LetterAvatarKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIImage+LetterAvatarKit.swift"; sourceTree = ""; }; 6EDAB50B5720BCC8EE0074B007E33C57 /* undocumented.json */ = {isa = PBXFileReference; includeInIndex = 1; name = undocumented.json; path = docs/undocumented.json; sourceTree = ""; }; 72BBB8D54CE353B808481EBAFCAD212B /* Pods-LetterAvatarKitObjcExample.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-LetterAvatarKitObjcExample.release.xcconfig"; sourceTree = ""; }; 745DD5D6AA31D8FAA73A64B779178412 /* jazzy.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.js; path = docs/docsets/LetterAvatarKit.docset/Contents/Resources/Documents/js/jazzy.js; sourceTree = ""; }; 75D5DE0AD7635D1C151A4D75910BCDF8 /* docSet.dsidx */ = {isa = PBXFileReference; includeInIndex = 1; name = docSet.dsidx; path = docs/docsets/LetterAvatarKit.docset/Contents/Resources/docSet.dsidx; sourceTree = ""; }; 76265D46F45CA31F735AE944955F3090 /* LetterAvatarMaker.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LetterAvatarMaker.swift; path = LetterAvatarKit/LetterAvatarMaker.swift; sourceTree = ""; }; 779F265110D2453F4BA9536A5B157965 /* LetterAvatarMakerExtendable.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LetterAvatarMakerExtendable.swift; path = LetterAvatarKit/LetterAvatarMakerExtendable.swift; sourceTree = ""; }; 7A59E7C021AB8A1E75725C609C654583 /* Pods-LetterAvatarKitObjcExample.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-LetterAvatarKitObjcExample.debug.xcconfig"; sourceTree = ""; }; 7ACED043FF9E44B347F98FB468A2C946 /* highlight.css */ = {isa = PBXFileReference; includeInIndex = 1; name = highlight.css; path = docs/css/highlight.css; sourceTree = ""; }; 7DECEB5DDF01C1A0EB8418234BA17452 /* Character+LetterAvatarKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "Character+LetterAvatarKit.swift"; sourceTree = ""; }; 7FEC7E67B4ACCE8D3C71AF49056DA9A8 /* LetterAvatarBuilder.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LetterAvatarBuilder.swift; path = LetterAvatarKit/LetterAvatarBuilder.swift; sourceTree = ""; }; 83D3FFFE41744BA1AB17EE94FB5D3222 /* Pods-LetterAvatarKitObjcExample-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-LetterAvatarKitObjcExample-acknowledgements.markdown"; sourceTree = ""; }; 84891BB7EE84E87C39498943CC5DCD97 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; 85D288C2A8894EFA80619913FAE56490 /* LetterAvatarBuilderConfiguration.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = LetterAvatarBuilderConfiguration.swift; path = LetterAvatarKit/LetterAvatarBuilderConfiguration.swift; sourceTree = ""; }; 88633E760E91F5DB5655075DC75A60E1 /* Pods-LetterAvatarKitObjcExample-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-LetterAvatarKitObjcExample-umbrella.h"; sourceTree = ""; }; 88E58D99E913338C79A02C7EEFEC6F0B /* jazzy.css */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.css; path = docs/css/jazzy.css; sourceTree = ""; }; 8FA63BF2A3314F5F516B4D46047D6DD7 /* jquery.min.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jquery.min.js; path = docs/js/jquery.min.js; sourceTree = ""; }; 98A4D5BCB4F5BCC6B1D8662F6C7ED132 /* jazzy.css */ = {isa = PBXFileReference; includeInIndex = 1; name = jazzy.css; path = docs/docsets/LetterAvatarKit.docset/Contents/Resources/Documents/css/jazzy.css; sourceTree = ""; }; 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; name = Podfile; path = ../Podfile; sourceTree = SOURCE_ROOT; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 9E9BF32A454FA11EA9B0A51D7585499E /* UIColor+LetterAvatarKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "UIColor+LetterAvatarKit.swift"; sourceTree = ""; }; A02E7590AEC392D630C1121387CA581B /* Pods_LetterAvatarKitObjcExample.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_LetterAvatarKitObjcExample.framework; path = "Pods-LetterAvatarKitObjcExample.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; A4F0599DC45DB976968BCD680742B6F0 /* UIImage.html */ = {isa = PBXFileReference; includeInIndex = 1; name = UIImage.html; path = docs/docsets/LetterAvatarKit.docset/Contents/Resources/Documents/Extensions/UIImage.html; sourceTree = ""; }; A55A78B3D60068A27731774A8E00DBCA /* UIImage.html */ = {isa = PBXFileReference; includeInIndex = 1; name = UIImage.html; path = docs/Extensions/UIImage.html; sourceTree = ""; }; B1586633F6BB7D67A9B4DFF8D83E4A75 /* jquery.min.js */ = {isa = PBXFileReference; includeInIndex = 1; name = jquery.min.js; path = docs/docsets/LetterAvatarKit.docset/Contents/Resources/Documents/js/jquery.min.js; sourceTree = ""; }; B7CCCAA4FF8B6649CE22562854BFC69F /* LetterAvatarKit.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; name = LetterAvatarKit.h; path = LetterAvatarKit/LetterAvatarKit.h; sourceTree = ""; }; BBB3F5AF86BA1E3E5DA1FA47537F95D3 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; BD613EA6BF47D4DBEEE0CE141DCC268D /* Classes.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Classes.html; path = docs/docsets/LetterAvatarKit.docset/Contents/Resources/Documents/Classes.html; sourceTree = ""; }; C09FA921BD1D80123A682C03631B9910 /* index.html */ = {isa = PBXFileReference; includeInIndex = 1; name = index.html; path = docs/index.html; sourceTree = ""; }; C17F7FC550C22834483730A6DA76F140 /* dash.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = dash.png; path = docs/docsets/LetterAvatarKit.docset/Contents/Resources/Documents/img/dash.png; sourceTree = ""; }; C65EC991BF71A053B053F22C36DE3421 /* LetterAvatarKit.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = LetterAvatarKit.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; C6F719F05868B0CE9C301D85F81B90A5 /* String+LetterAvatarKit.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; path = "String+LetterAvatarKit.swift"; sourceTree = ""; }; CA2BC862CCCB66160C18BE5E1BB883AC /* LetterAvatarBuilder.html */ = {isa = PBXFileReference; includeInIndex = 1; name = LetterAvatarBuilder.html; path = docs/docsets/LetterAvatarKit.docset/Contents/Resources/Documents/Classes/LetterAvatarBuilder.html; sourceTree = ""; }; D6ABFDA1B08E8BFB2133E48A35EE9100 /* search.json */ = {isa = PBXFileReference; includeInIndex = 1; name = search.json; path = docs/docsets/LetterAvatarKit.docset/Contents/Resources/Documents/search.json; sourceTree = ""; }; DAA6CE5048DB0366CCD87B88201B7F34 /* LetterAvatarBuilder.html */ = {isa = PBXFileReference; includeInIndex = 1; name = LetterAvatarBuilder.html; path = docs/Classes/LetterAvatarBuilder.html; sourceTree = ""; }; DBB5BC7F6F7ED92F7914CDCBD2A06402 /* badge.svg */ = {isa = PBXFileReference; includeInIndex = 1; name = badge.svg; path = docs/badge.svg; sourceTree = ""; }; E40EC74139BDE7857EC02630448E67F1 /* dash.png */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = image.png; name = dash.png; path = docs/img/dash.png; sourceTree = ""; }; E6B47B7C99CD790E9BA7136AB26DCD21 /* UIColor.html */ = {isa = PBXFileReference; includeInIndex = 1; name = UIColor.html; path = docs/Extensions/UIColor.html; sourceTree = ""; }; F1B750D78FAA754D7A313A2A17EDD04B /* LetterAvatarKit.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = LetterAvatarKit.modulemap; sourceTree = ""; }; F650906B7E9588704C135318FB00404A /* LetterAvatarKit.tgz */ = {isa = PBXFileReference; includeInIndex = 1; name = LetterAvatarKit.tgz; path = docs/docsets/LetterAvatarKit.tgz; sourceTree = ""; }; FEA672F03D0F19A455BA7E4918DFEC57 /* Extensions.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Extensions.html; path = docs/docsets/LetterAvatarKit.docset/Contents/Resources/Documents/Extensions.html; sourceTree = ""; }; FECD6C43767F5A8370001E10FBF0BFFB /* Extensions.html */ = {isa = PBXFileReference; includeInIndex = 1; name = Extensions.html; path = docs/Extensions.html; sourceTree = ""; }; FF7453E93E928A00990323F089EE81DD /* Pods-LetterAvatarKitObjcExample.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-LetterAvatarKitObjcExample.modulemap"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 37326C57105ABBA3169413E6D77B4E05 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( B1569E201C78FE50BDDD0CF4D5D2FBE7 /* Foundation.framework in Frameworks */, 8B24B7503165556923D8D926CFD8CC68 /* UIKit.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; 72109030A4A8B6CEF133440CF76C147E /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 7DD95FBC166F6E09EBABCD489AFF7D6B /* Foundation.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 00B516C94F659A3326213FAEEB8B7602 /* Extensions */ = { isa = PBXGroup; children = ( 7DECEB5DDF01C1A0EB8418234BA17452 /* Character+LetterAvatarKit.swift */, C6F719F05868B0CE9C301D85F81B90A5 /* String+LetterAvatarKit.swift */, 9E9BF32A454FA11EA9B0A51D7585499E /* UIColor+LetterAvatarKit.swift */, 6E3DF090B2D999F9611E4367EEC38BAA /* UIImage+LetterAvatarKit.swift */, ); name = Extensions; path = LetterAvatarKit/Extensions; sourceTree = ""; }; 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */ = { isa = PBXGroup; children = ( E2983683FD097A93297E2F5D4E382B36 /* iOS */, ); name = Frameworks; sourceTree = ""; }; 4976543EBAB61E883CED310A59E37171 /* Support Files */ = { isa = PBXGroup; children = ( F1B750D78FAA754D7A313A2A17EDD04B /* LetterAvatarKit.modulemap */, 353245E92E269EFC1F09D150390FC13E /* LetterAvatarKit.xcconfig */, 5ABBC4D9458F23B38DA6C5B5F0834B76 /* LetterAvatarKit-dummy.m */, 1686ED9EC1754982B62A4E2FCEEDA239 /* LetterAvatarKit-Info.plist */, 0BA107F8470A3DD3D9280D7A375347FD /* LetterAvatarKit-prefix.pch */, 07AB794DBA7D3FC57F1CE52437FF92E1 /* LetterAvatarKit-umbrella.h */, ); name = "Support Files"; path = "LetterAvatarKitObjcExample/Pods/Target Support Files/LetterAvatarKit"; sourceTree = ""; }; B6B8708A128F98BB45BCA3A4939BB12B /* Development Pods */ = { isa = PBXGroup; children = ( DFA0F8F1462E622ECAF459CD99013F1D /* LetterAvatarKit */, ); name = "Development Pods"; sourceTree = ""; }; C2000A16CE439504DB37FF631AE029F7 /* Pods-LetterAvatarKitObjcExample */ = { isa = PBXGroup; children = ( FF7453E93E928A00990323F089EE81DD /* Pods-LetterAvatarKitObjcExample.modulemap */, 83D3FFFE41744BA1AB17EE94FB5D3222 /* Pods-LetterAvatarKitObjcExample-acknowledgements.markdown */, 57DA105AAD84B0803F512F9AEAC73BE0 /* Pods-LetterAvatarKitObjcExample-acknowledgements.plist */, 4C50D087AE41542C5113C0257B89E33B /* Pods-LetterAvatarKitObjcExample-dummy.m */, 15F9CCA5786FEF74B11D867FB973DEE0 /* Pods-LetterAvatarKitObjcExample-frameworks.sh */, 3F75AFED5837C88AEF197D47BAA22140 /* Pods-LetterAvatarKitObjcExample-Info.plist */, 88633E760E91F5DB5655075DC75A60E1 /* Pods-LetterAvatarKitObjcExample-umbrella.h */, 7A59E7C021AB8A1E75725C609C654583 /* Pods-LetterAvatarKitObjcExample.debug.xcconfig */, 72BBB8D54CE353B808481EBAFCAD212B /* Pods-LetterAvatarKitObjcExample.release.xcconfig */, ); name = "Pods-LetterAvatarKitObjcExample"; path = "Target Support Files/Pods-LetterAvatarKitObjcExample"; sourceTree = ""; }; C57FF64956861DD3957C59EDAA1C4299 /* Targets Support Files */ = { isa = PBXGroup; children = ( C2000A16CE439504DB37FF631AE029F7 /* Pods-LetterAvatarKitObjcExample */, ); name = "Targets Support Files"; sourceTree = ""; }; CBBA3580666EF57882AD99C9D40D1EDE /* Products */ = { isa = PBXGroup; children = ( 563250A697FB009E508EB46B20DE1ADA /* LetterAvatarKit.framework */, A02E7590AEC392D630C1121387CA581B /* Pods_LetterAvatarKitObjcExample.framework */, ); name = Products; sourceTree = ""; }; CF1408CF629C7361332E53B88F7BD30C = { isa = PBXGroup; children = ( 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, B6B8708A128F98BB45BCA3A4939BB12B /* Development Pods */, 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */, CBBA3580666EF57882AD99C9D40D1EDE /* Products */, C57FF64956861DD3957C59EDAA1C4299 /* Targets Support Files */, ); sourceTree = ""; }; D9E5DF36ABB0FF89DBC675978BEE6687 /* Pod */ = { isa = PBXGroup; children = ( DBB5BC7F6F7ED92F7914CDCBD2A06402 /* badge.svg */, 123252F631A8F393863B15A216C1513D /* carat.png */, 19F6558309DB4FD505632F2AF35C0AE7 /* carat.png */, 0D83C87F7D61A27F12A19E22B3173F2D /* Classes.html */, BD613EA6BF47D4DBEEE0CE141DCC268D /* Classes.html */, E40EC74139BDE7857EC02630448E67F1 /* dash.png */, C17F7FC550C22834483730A6DA76F140 /* dash.png */, 75D5DE0AD7635D1C151A4D75910BCDF8 /* docSet.dsidx */, FECD6C43767F5A8370001E10FBF0BFFB /* Extensions.html */, FEA672F03D0F19A455BA7E4918DFEC57 /* Extensions.html */, 50DF8C1FB951CCD5512D371876B30218 /* gh.png */, 38205A8531F7E916E7E4642B60340D7B /* gh.png */, 7ACED043FF9E44B347F98FB468A2C946 /* highlight.css */, 435363007DD6E5E6CF321B4D3A9ABB77 /* highlight.css */, 5C5AF5110275E531D68AE386024C94D5 /* index.html */, C09FA921BD1D80123A682C03631B9910 /* index.html */, 575456FB39CC6683D8FDA84DB3CBF9E7 /* Info.plist */, 88E58D99E913338C79A02C7EEFEC6F0B /* jazzy.css */, 98A4D5BCB4F5BCC6B1D8662F6C7ED132 /* jazzy.css */, 4C51C23361C1B7FD2BD39F56EA51E950 /* jazzy.js */, 745DD5D6AA31D8FAA73A64B779178412 /* jazzy.js */, B1586633F6BB7D67A9B4DFF8D83E4A75 /* jquery.min.js */, 8FA63BF2A3314F5F516B4D46047D6DD7 /* jquery.min.js */, CA2BC862CCCB66160C18BE5E1BB883AC /* LetterAvatarBuilder.html */, DAA6CE5048DB0366CCD87B88201B7F34 /* LetterAvatarBuilder.html */, 45297D5EDDC0D4EE752B938CD25940FF /* LetterAvatarBuilderConfiguration.html */, 312CDE39B9D1BC49B92A78237DB39F98 /* LetterAvatarBuilderConfiguration.html */, C65EC991BF71A053B053F22C36DE3421 /* LetterAvatarKit.podspec */, F650906B7E9588704C135318FB00404A /* LetterAvatarKit.tgz */, BBB3F5AF86BA1E3E5DA1FA47537F95D3 /* LICENSE */, 84891BB7EE84E87C39498943CC5DCD97 /* README.md */, D6ABFDA1B08E8BFB2133E48A35EE9100 /* search.json */, 3225B610822FFF2265134C92F7E6ACC2 /* search.json */, E6B47B7C99CD790E9BA7136AB26DCD21 /* UIColor.html */, 633B61E25A133A5A30D36523108A0FBB /* UIColor.html */, A55A78B3D60068A27731774A8E00DBCA /* UIImage.html */, A4F0599DC45DB976968BCD680742B6F0 /* UIImage.html */, 6EDAB50B5720BCC8EE0074B007E33C57 /* undocumented.json */, ); name = Pod; sourceTree = ""; }; DFA0F8F1462E622ECAF459CD99013F1D /* LetterAvatarKit */ = { isa = PBXGroup; children = ( 7FEC7E67B4ACCE8D3C71AF49056DA9A8 /* LetterAvatarBuilder.swift */, 85D288C2A8894EFA80619913FAE56490 /* LetterAvatarBuilderConfiguration.swift */, B7CCCAA4FF8B6649CE22562854BFC69F /* LetterAvatarKit.h */, 76265D46F45CA31F735AE944955F3090 /* LetterAvatarMaker.swift */, 779F265110D2453F4BA9536A5B157965 /* LetterAvatarMakerExtendable.swift */, 00B516C94F659A3326213FAEEB8B7602 /* Extensions */, D9E5DF36ABB0FF89DBC675978BEE6687 /* Pod */, 4976543EBAB61E883CED310A59E37171 /* Support Files */, ); name = LetterAvatarKit; path = ../..; sourceTree = ""; }; E2983683FD097A93297E2F5D4E382B36 /* iOS */ = { isa = PBXGroup; children = ( 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */, 312B988EF117AE4DE76A268D970131FE /* UIKit.framework */, ); name = iOS; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 244FF069859AA7B8EF61387439FDB6D6 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( D4FC11C3CCE142EFCA7E04FC96135329 /* LetterAvatarKit-umbrella.h in Headers */, 2BCB24FE50C2EE156DA2BB4CED48174A /* LetterAvatarKit.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; 8C4CA30676DD84336A90C0B81821C6F8 /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( 19E09AFDD0E82A054C5A307432F1DC76 /* Pods-LetterAvatarKitObjcExample-umbrella.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 961D4DE155D1D97BBB2F3D48799AEBA6 /* Pods-LetterAvatarKitObjcExample */ = { isa = PBXNativeTarget; buildConfigurationList = 21C81B05DC95C00DC105754220F0ABAA /* Build configuration list for PBXNativeTarget "Pods-LetterAvatarKitObjcExample" */; buildPhases = ( 8C4CA30676DD84336A90C0B81821C6F8 /* Headers */, A005208B949051BF0BBEF0C1F28B2F37 /* Sources */, 72109030A4A8B6CEF133440CF76C147E /* Frameworks */, BC96164068B73C39027385B25784F896 /* Resources */, ); buildRules = ( ); dependencies = ( AF902EEB956ABBEF6BB1160F6D5208DE /* PBXTargetDependency */, ); name = "Pods-LetterAvatarKitObjcExample"; productName = "Pods-LetterAvatarKitObjcExample"; productReference = A02E7590AEC392D630C1121387CA581B /* Pods_LetterAvatarKitObjcExample.framework */; productType = "com.apple.product-type.framework"; }; D9F7736046D8F388E749400613707326 /* LetterAvatarKit */ = { isa = PBXNativeTarget; buildConfigurationList = 2DEE0AF4C0359DC99C7A3AD35023A462 /* Build configuration list for PBXNativeTarget "LetterAvatarKit" */; buildPhases = ( 244FF069859AA7B8EF61387439FDB6D6 /* Headers */, 8B2194BDA23785641939F6F168A694CD /* Sources */, 37326C57105ABBA3169413E6D77B4E05 /* Frameworks */, A40D67E92FB588D365887D7880FEA65B /* Resources */, ); buildRules = ( ); dependencies = ( ); name = LetterAvatarKit; productName = LetterAvatarKit; productReference = 563250A697FB009E508EB46B20DE1ADA /* LetterAvatarKit.framework */; productType = "com.apple.product-type.framework"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ BFDFE7DC352907FC980B868725387E98 /* Project object */ = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 1100; LastUpgradeCheck = 1100; }; buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; compatibilityVersion = "Xcode 8.0"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); mainGroup = CF1408CF629C7361332E53B88F7BD30C; productRefGroup = CBBA3580666EF57882AD99C9D40D1EDE /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( D9F7736046D8F388E749400613707326 /* LetterAvatarKit */, 961D4DE155D1D97BBB2F3D48799AEBA6 /* Pods-LetterAvatarKitObjcExample */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ A40D67E92FB588D365887D7880FEA65B /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; BC96164068B73C39027385B25784F896 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 8B2194BDA23785641939F6F168A694CD /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 2A7D08911242525AC2BBAC1E626EEF10 /* Character+LetterAvatarKit.swift in Sources */, 20A650EB1E7C8045010B4AFA6CCD89F3 /* LetterAvatarBuilder.swift in Sources */, 3AA27E2E6603E85CC93A5E5A586F5113 /* LetterAvatarBuilderConfiguration.swift in Sources */, 20F9424F46741F8CA46D7393BA9DBD0B /* LetterAvatarKit-dummy.m in Sources */, BD82DD765EA58EE3C568864183550384 /* LetterAvatarMaker.swift in Sources */, 6862CB88019C04E95E8C888DB44C1DBB /* LetterAvatarMakerExtendable.swift in Sources */, E544276E5EFFA82AAD26DCFF5232943B /* String+LetterAvatarKit.swift in Sources */, 0F55DC4A827824DF0F5F9B22A254D434 /* UIColor+LetterAvatarKit.swift in Sources */, DB46711390F009E0B32FB4154D7A09CF /* UIImage+LetterAvatarKit.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; A005208B949051BF0BBEF0C1F28B2F37 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 22FC893DD469F2835F808E08D669F97E /* Pods-LetterAvatarKitObjcExample-dummy.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ AF902EEB956ABBEF6BB1160F6D5208DE /* PBXTargetDependency */ = { isa = PBXTargetDependency; name = LetterAvatarKit; target = D9F7736046D8F388E749400613707326 /* LetterAvatarKit */; targetProxy = 8DE6AB1BD549A72EC0A776AB806BDBB2 /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ 796BD5DC5B845DD6995BA0644FD4EF00 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 72BBB8D54CE353B808481EBAFCAD212B /* Pods-LetterAvatarKitObjcExample.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = "Target Support Files/Pods-LetterAvatarKitObjcExample/Pods-LetterAvatarKitObjcExample-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; MODULEMAP_FILE = "Target Support Files/Pods-LetterAvatarKitObjcExample/Pods-LetterAvatarKitObjcExample.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; 8F17DC3A99F99FBAD606CE6963886315 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = ( "POD_CONFIGURATION_RELEASE=1", "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = NO; MTL_FAST_MATH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; STRIP_INSTALLED_PRODUCT = NO; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_OPTIMIZATION_LEVEL = "-O"; SWIFT_VERSION = 5.0; SYMROOT = "${SRCROOT}/../build"; }; name = Release; }; 916E0404255105F480DC4950B7625F7A /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_ENABLE_OBJC_WEAK = YES; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "POD_CONFIGURATION_DEBUG=1", "DEBUG=1", "$(inherited)", ); GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 9.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; ONLY_ACTIVE_ARCH = YES; PRODUCT_NAME = "$(TARGET_NAME)"; STRIP_INSTALLED_PRODUCT = NO; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; SYMROOT = "${SRCROOT}/../build"; }; name = Debug; }; BC5A75FDAB8203B1E49B3C21CCBD2253 /* Release */ = { isa = XCBuildConfiguration; baseConfigurationReference = 353245E92E269EFC1F09D150390FC13E /* LetterAvatarKit.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_PREFIX_HEADER = "Target Support Files/LetterAvatarKit/LetterAvatarKit-prefix.pch"; INFOPLIST_FILE = "Target Support Files/LetterAvatarKit/LetterAvatarKit-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MODULEMAP_FILE = "Target Support Files/LetterAvatarKit/LetterAvatarKit.modulemap"; PRODUCT_MODULE_NAME = LetterAvatarKit; PRODUCT_NAME = LetterAvatarKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Release; }; CD6202D1007CE72501CA574A30513B17 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 7A59E7C021AB8A1E75725C609C654583 /* Pods-LetterAvatarKitObjcExample.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; INFOPLIST_FILE = "Target Support Files/Pods-LetterAvatarKitObjcExample/Pods-LetterAvatarKitObjcExample-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 9.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MACH_O_TYPE = staticlib; MODULEMAP_FILE = "Target Support Files/Pods-LetterAvatarKitObjcExample/Pods-LetterAvatarKitObjcExample.modulemap"; OTHER_LDFLAGS = ""; OTHER_LIBTOOLFLAGS = ""; PODS_ROOT = "$(SRCROOT)"; PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; SDKROOT = iphoneos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; F6E7BA1528F475FF8DD495AF2A708E48 /* Debug */ = { isa = XCBuildConfiguration; baseConfigurationReference = 353245E92E269EFC1F09D150390FC13E /* LetterAvatarKit.xcconfig */; buildSettings = { CODE_SIGN_IDENTITY = ""; "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; CURRENT_PROJECT_VERSION = 1; DEFINES_MODULE = YES; DYLIB_COMPATIBILITY_VERSION = 1; DYLIB_CURRENT_VERSION = 1; DYLIB_INSTALL_NAME_BASE = "@rpath"; GCC_PREFIX_HEADER = "Target Support Files/LetterAvatarKit/LetterAvatarKit-prefix.pch"; INFOPLIST_FILE = "Target Support Files/LetterAvatarKit/LetterAvatarKit-Info.plist"; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; IPHONEOS_DEPLOYMENT_TARGET = 8.0; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; MODULEMAP_FILE = "Target Support Files/LetterAvatarKit/LetterAvatarKit.modulemap"; PRODUCT_MODULE_NAME = LetterAvatarKit; PRODUCT_NAME = LetterAvatarKit; SDKROOT = iphoneos; SKIP_INSTALL = YES; SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; VERSIONING_SYSTEM = "apple-generic"; VERSION_INFO_PREFIX = ""; }; name = Debug; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 21C81B05DC95C00DC105754220F0ABAA /* Build configuration list for PBXNativeTarget "Pods-LetterAvatarKitObjcExample" */ = { isa = XCConfigurationList; buildConfigurations = ( CD6202D1007CE72501CA574A30513B17 /* Debug */, 796BD5DC5B845DD6995BA0644FD4EF00 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 2DEE0AF4C0359DC99C7A3AD35023A462 /* Build configuration list for PBXNativeTarget "LetterAvatarKit" */ = { isa = XCConfigurationList; buildConfigurations = ( F6E7BA1528F475FF8DD495AF2A708E48 /* Debug */, BC5A75FDAB8203B1E49B3C21CCBD2253 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { isa = XCConfigurationList; buildConfigurations = ( 916E0404255105F480DC4950B7625F7A /* Debug */, 8F17DC3A99F99FBAD606CE6963886315 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; } ================================================ FILE: LetterAvatarKitObjcExample/Pods/Target Support Files/LetterAvatarKit/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier ${PRODUCT_BUNDLE_IDENTIFIER} CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType FMWK CFBundleShortVersionString 1.1.7 CFBundleSignature ???? CFBundleVersion ${CURRENT_PROJECT_VERSION} NSPrincipalClass ================================================ FILE: LetterAvatarKitObjcExample/Pods/Target Support Files/LetterAvatarKit/LetterAvatarKit-Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier ${PRODUCT_BUNDLE_IDENTIFIER} CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType FMWK CFBundleShortVersionString 1.2.1 CFBundleSignature ???? CFBundleVersion ${CURRENT_PROJECT_VERSION} NSPrincipalClass ================================================ FILE: LetterAvatarKitObjcExample/Pods/Target Support Files/LetterAvatarKit/LetterAvatarKit-dummy.m ================================================ #import @interface PodsDummy_LetterAvatarKit : NSObject @end @implementation PodsDummy_LetterAvatarKit @end ================================================ FILE: LetterAvatarKitObjcExample/Pods/Target Support Files/LetterAvatarKit/LetterAvatarKit-prefix.pch ================================================ #ifdef __OBJC__ #import #else #ifndef FOUNDATION_EXPORT #if defined(__cplusplus) #define FOUNDATION_EXPORT extern "C" #else #define FOUNDATION_EXPORT extern #endif #endif #endif ================================================ FILE: LetterAvatarKitObjcExample/Pods/Target Support Files/LetterAvatarKit/LetterAvatarKit-umbrella.h ================================================ #ifdef __OBJC__ #import #else #ifndef FOUNDATION_EXPORT #if defined(__cplusplus) #define FOUNDATION_EXPORT extern "C" #else #define FOUNDATION_EXPORT extern #endif #endif #endif #import "LetterAvatarKit.h" FOUNDATION_EXPORT double LetterAvatarKitVersionNumber; FOUNDATION_EXPORT const unsigned char LetterAvatarKitVersionString[]; ================================================ FILE: LetterAvatarKitObjcExample/Pods/Target Support Files/LetterAvatarKit/LetterAvatarKit.modulemap ================================================ framework module LetterAvatarKit { umbrella header "LetterAvatarKit-umbrella.h" export * module * { export * } } ================================================ FILE: LetterAvatarKitObjcExample/Pods/Target Support Files/LetterAvatarKit/LetterAvatarKit.xcconfig ================================================ CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/LetterAvatarKit GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "UIKit" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_ROOT = ${SRCROOT} PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} SKIP_INSTALL = YES USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES ================================================ FILE: LetterAvatarKitObjcExample/Pods/Target Support Files/Pods-LetterAvatarKitObjcExample/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier ${PRODUCT_BUNDLE_IDENTIFIER} CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType FMWK CFBundleShortVersionString 1.0.0 CFBundleSignature ???? CFBundleVersion ${CURRENT_PROJECT_VERSION} NSPrincipalClass ================================================ FILE: LetterAvatarKitObjcExample/Pods/Target Support Files/Pods-LetterAvatarKitObjcExample/Pods-LetterAvatarKitObjcExample-Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIdentifier ${PRODUCT_BUNDLE_IDENTIFIER} CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType FMWK CFBundleShortVersionString 1.0.0 CFBundleSignature ???? CFBundleVersion ${CURRENT_PROJECT_VERSION} NSPrincipalClass ================================================ FILE: LetterAvatarKitObjcExample/Pods/Target Support Files/Pods-LetterAvatarKitObjcExample/Pods-LetterAvatarKitObjcExample-acknowledgements.markdown ================================================ # Acknowledgements This application makes use of the following third party libraries: ## LetterAvatarKit MIT License Copyright (c) 2017 Victor Peschenkov Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. Generated by CocoaPods - https://cocoapods.org ================================================ FILE: LetterAvatarKitObjcExample/Pods/Target Support Files/Pods-LetterAvatarKitObjcExample/Pods-LetterAvatarKitObjcExample-acknowledgements.plist ================================================ PreferenceSpecifiers FooterText This application makes use of the following third party libraries: Title Acknowledgements Type PSGroupSpecifier FooterText MIT License Copyright (c) 2017 Victor Peschenkov Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. License MIT Title LetterAvatarKit Type PSGroupSpecifier FooterText Generated by CocoaPods - https://cocoapods.org Title Type PSGroupSpecifier StringsTable Acknowledgements Title Acknowledgements ================================================ FILE: LetterAvatarKitObjcExample/Pods/Target Support Files/Pods-LetterAvatarKitObjcExample/Pods-LetterAvatarKitObjcExample-dummy.m ================================================ #import @interface PodsDummy_Pods_LetterAvatarKitObjcExample : NSObject @end @implementation PodsDummy_Pods_LetterAvatarKitObjcExample @end ================================================ FILE: LetterAvatarKitObjcExample/Pods/Target Support Files/Pods-LetterAvatarKitObjcExample/Pods-LetterAvatarKitObjcExample-frameworks.sh ================================================ #!/bin/sh set -e set -u set -o pipefail function on_error { echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" } trap 'on_error $LINENO' ERR if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy # frameworks to, so exit 0 (signalling the script phase was successful). exit 0 fi echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" # Used as a return value for each invocation of `strip_invalid_archs` function. STRIP_BINARY_RETVAL=0 # This protects against multiple targets copying the same framework dependency at the same time. The solution # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") # Copies and strips a vendored framework install_framework() { if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then local source="${BUILT_PRODUCTS_DIR}/$1" elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" elif [ -r "$1" ]; then local source="$1" fi local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" if [ -L "${source}" ]; then echo "Symlinked..." source="$(readlink "${source}")" fi # Use filter instead of exclude so missing patterns don't throw errors. echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" local basename basename="$(basename -s .framework "$1")" binary="${destination}/${basename}.framework/${basename}" if ! [ -r "$binary" ]; then binary="${destination}/${basename}" elif [ -L "${binary}" ]; then echo "Destination binary is symlinked..." dirname="$(dirname "${binary}")" binary="${dirname}/$(readlink "${binary}")" fi # Strip invalid architectures so "fat" simulator / device frameworks work on device if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then strip_invalid_archs "$binary" fi # Resign the code if required by the build settings to avoid unstable apps code_sign_if_enabled "${destination}/$(basename "$1")" # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then local swift_runtime_libs swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) for lib in $swift_runtime_libs; do echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" code_sign_if_enabled "${destination}/${lib}" done fi } # Copies and strips a vendored dSYM install_dsym() { local source="$1" if [ -r "$source" ]; then # Copy the dSYM into a the targets temp dir. 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}\"" 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}" local basename basename="$(basename -s .framework.dSYM "$source")" binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}" # Strip invalid architectures so "fat" simulator / device frameworks work on device if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then strip_invalid_archs "$binary" fi if [[ $STRIP_BINARY_RETVAL == 1 ]]; then # Move the stripped file into its final destination. 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}\"" 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}" else # 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. touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM" fi fi } # Copies the bcsymbolmap files of a vendored framework install_bcsymbolmap() { local bcsymbolmap_path="$1" local destination="${BUILT_PRODUCTS_DIR}" 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}"" rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" } # Signs a framework with the provided identity code_sign_if_enabled() { if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then # Use the current code_sign_identity echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then code_sign_cmd="$code_sign_cmd &" fi echo "$code_sign_cmd" eval "$code_sign_cmd" fi } # Strip invalid architectures strip_invalid_archs() { binary="$1" # Get architectures for current target binary binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" # Intersect them with the architectures we are building for intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" # If there are no archs supported by this binary then warn the user if [[ -z "$intersected_archs" ]]; then echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." STRIP_BINARY_RETVAL=0 return fi stripped="" for arch in $binary_archs; do if ! [[ "${ARCHS}" == *"$arch"* ]]; then # Strip non-valid architectures in-place lipo -remove "$arch" -output "$binary" "$binary" stripped="$stripped $arch" fi done if [[ "$stripped" ]]; then echo "Stripped $binary of architectures:$stripped" fi STRIP_BINARY_RETVAL=1 } if [[ "$CONFIGURATION" == "Debug" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/LetterAvatarKit/LetterAvatarKit.framework" fi if [[ "$CONFIGURATION" == "Release" ]]; then install_framework "${BUILT_PRODUCTS_DIR}/LetterAvatarKit/LetterAvatarKit.framework" fi if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then wait fi ================================================ FILE: LetterAvatarKitObjcExample/Pods/Target Support Files/Pods-LetterAvatarKitObjcExample/Pods-LetterAvatarKitObjcExample-resources.sh ================================================ #!/bin/sh set -e set -u set -o pipefail if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy # resources to, so exit 0 (signalling the script phase was successful). exit 0 fi mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt > "$RESOURCES_TO_COPY" XCASSET_FILES=() # This protects against multiple targets copying the same framework dependency at the same time. The solution # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") case "${TARGETED_DEVICE_FAMILY:-}" in 1,2) TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" ;; 1) TARGET_DEVICE_ARGS="--target-device iphone" ;; 2) TARGET_DEVICE_ARGS="--target-device ipad" ;; 3) TARGET_DEVICE_ARGS="--target-device tv" ;; 4) TARGET_DEVICE_ARGS="--target-device watch" ;; *) TARGET_DEVICE_ARGS="--target-device mac" ;; esac install_resource() { if [[ "$1" = /* ]] ; then RESOURCE_PATH="$1" else RESOURCE_PATH="${PODS_ROOT}/$1" fi if [[ ! -e "$RESOURCE_PATH" ]] ; then cat << EOM error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. EOM exit 1 fi case $RESOURCE_PATH in *.storyboard) echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} ;; *.xib) echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" || true ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} ;; *.framework) echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" ;; *.xcdatamodel) echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" ;; *.xcdatamodeld) echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" ;; *.xcmappingmodel) echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" ;; *.xcassets) ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH" XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") ;; *) echo "$RESOURCE_PATH" || true echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" ;; esac } mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" fi rm -f "$RESOURCES_TO_COPY" if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ] then # Find all other xcassets (this unfortunately includes those of path pods and other targets). OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) while read line; do if [[ $line != "${PODS_ROOT}*" ]]; then XCASSET_FILES+=("$line") fi done <<<"$OTHER_XCASSETS" if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" else printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist" fi fi ================================================ FILE: LetterAvatarKitObjcExample/Pods/Target Support Files/Pods-LetterAvatarKitObjcExample/Pods-LetterAvatarKitObjcExample-umbrella.h ================================================ #ifdef __OBJC__ #import #else #ifndef FOUNDATION_EXPORT #if defined(__cplusplus) #define FOUNDATION_EXPORT extern "C" #else #define FOUNDATION_EXPORT extern #endif #endif #endif FOUNDATION_EXPORT double Pods_LetterAvatarKitObjcExampleVersionNumber; FOUNDATION_EXPORT const unsigned char Pods_LetterAvatarKitObjcExampleVersionString[]; ================================================ FILE: LetterAvatarKitObjcExample/Pods/Target Support Files/Pods-LetterAvatarKitObjcExample/Pods-LetterAvatarKitObjcExample.debug.xcconfig ================================================ EMBEDDED_CONTENT_CONTAINS_SWIFT = YES FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/LetterAvatarKit" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/LetterAvatarKit/LetterAvatarKit.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "LetterAvatarKit" -framework "UIKit" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES ================================================ FILE: LetterAvatarKitObjcExample/Pods/Target Support Files/Pods-LetterAvatarKitObjcExample/Pods-LetterAvatarKitObjcExample.modulemap ================================================ framework module Pods_LetterAvatarKitObjcExample { umbrella header "Pods-LetterAvatarKitObjcExample-umbrella.h" export * module * { export * } } ================================================ FILE: LetterAvatarKitObjcExample/Pods/Target Support Files/Pods-LetterAvatarKitObjcExample/Pods-LetterAvatarKitObjcExample.release.xcconfig ================================================ EMBEDDED_CONTENT_CONTAINS_SWIFT = YES FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/LetterAvatarKit" GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/LetterAvatarKit/LetterAvatarKit.framework/Headers" LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' OTHER_LDFLAGS = $(inherited) -framework "Foundation" -framework "LetterAvatarKit" -framework "UIKit" OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS PODS_BUILD_DIR = ${BUILD_DIR} PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) PODS_PODFILE_DIR_PATH = ${SRCROOT}/. PODS_ROOT = ${SRCROOT}/Pods USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES ================================================ FILE: LetterAvatarKitTests/Extensions/Character+LetterAvatarKitTests.swift ================================================ // // Character+LetterAvatarKitTests.swift // LetterAvatarKitTests // // Copyright 2017 Victor Peschenkov // // Permission is hereby granted, free of charge, to any person obtaining a copy // o this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // import XCTest import Foundation @testable import LetterAvatarKit class CharacterLetterAvatarKitTests: XCTestCase { func testASCIIVAlue() { let first = Character("A") let second = Character("B") // 65 is ASCII code of "A" XCTAssertEqual(first.ASCIIValue, 65) XCTAssertNotEqual(first.ASCIIValue, second.ASCIIValue) } } ================================================ FILE: LetterAvatarKitTests/Extensions/String+LetterAvatarKitTests.swift ================================================ // // String+LetterAvatarKitTests.swift // LetterAvatarKitTests // // Copyright 2017 Victor Peschenkov // // Permission is hereby granted, free of charge, to any person obtaining a copy // o this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // import XCTest import Foundation @testable import LetterAvatarKit class StringLetterAvatarKitTests: XCTestCase { func testGettingFirstCharacter() { XCTAssertEqual(Character("A"), "Avatar".first) XCTAssertNotEqual(Character("r"), "Avatar".first) } } ================================================ FILE: LetterAvatarKitTests/Extensions/UIColor+LetterAvatarKitTests.swift ================================================ // // UIColor+LetterAvatarKitTests.swift // LetterAvatarKitTests // // Copyright 2017 Victor Peschenkov // // Permission is hereby granted, free of charge, to any person obtaining a copy // o this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // import XCTest import Foundation @testable import LetterAvatarKit class UIColorLetterAvatarKitTests: XCTestCase { func testColorByHEX() { // TURQUOISE let color = LKUIColorByHEX(UIColor.HEXColor.turquoiseColor) XCTAssertEqual(CIColor(color: color).red, 26 / 255) XCTAssertEqual(CIColor(color: color).green, 188 / 255) XCTAssertEqual(CIColor(color: color).blue, 156 / 255) } func testColorByRGB() { // TURQUOISE let color = LKUIColorByRGB(red: 26, green: 188, blue: 156) XCTAssertEqual(CIColor(color: color).red, 26 / 255) XCTAssertEqual(CIColor(color: color).green, 188 / 255) XCTAssertEqual(CIColor(color: color).blue, 156 / 255) } } ================================================ FILE: LetterAvatarKitTests/Extensions/UIImage+LetterAvatarKitTests.swift ================================================ // // UIImage+LetterAvatarKitTests.swift // LetterAvatarKitTests // // Copyright 2017 Victor Peschenkov // // Permission is hereby granted, free of charge, to any person obtaining a copy // o this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // import XCTest import Foundation @testable import LetterAvatarKit class UIImageLetterAvatarKitTests: XCTestCase { func testAvatarBuild() { let avatarImage = UIImage.makeLetterAvatar(withUsername: "Letter Avatar") let testAvatarImage = UIImage(named: "LetterAvatarTestImage") XCTAssertEqual(avatarImage, testAvatarImage) } func testAvatarBuildWithCustomSize() { let size = CGSize(width: 100, height: 100) let avatarImage = UIImage.makeLetterAvatar(withUsername: "Letter Avatar", size: size) XCTAssertEqual(avatarImage?.size.width, size.width) XCTAssertEqual(avatarImage?.size.height, size.height) } func testAvatarBuildSingleLetterFlag() { // Make a configuration let configuration = LetterAvatarBuilderConfiguration() configuration.username = "Avatar Test" configuration.useSingleLetter = true // Make images let avatarImage = UIImage.makeLetterAvatar(withConfiguration: configuration) let testAvatarImage = UIImage(named: "LetterAvatarSingleLetterTestImage") // Test them XCTAssertEqual(avatarImage?.size.width, configuration.size.width) XCTAssertEqual(avatarImage?.size.height, configuration.size.height) XCTAssertEqual(avatarImage, testAvatarImage) } func testAvatarBuildWithConfiguration() { // Make a configuration let configuration = LetterAvatarBuilderConfiguration() configuration.username = "Letter Avatar" // Make images let avatarImage = UIImage.makeLetterAvatar(withConfiguration: configuration) let testAvatarImage = UIImage(named: "LetterAvatarTestImage") // Test them XCTAssertEqual(avatarImage?.size.width, configuration.size.width) XCTAssertEqual(avatarImage?.size.height, configuration.size.height) XCTAssertEqual(avatarImage!, testAvatarImage) } func testAvatarBuildWithOneWordUsername() { let avatarImage = UIImage.makeLetterAvatar(withUsername: "Avatar") let testAvatarImage = UIImage(named: "LetterAvatarOneWordTestImage") XCTAssertEqual(avatarImage, testAvatarImage) } func testAvatarBuildWithMoreThanTwoWordsUsername() { let avatarImage = UIImage.makeLetterAvatar(withUsername: "Letter Test Avatar") let testAvatarImage = UIImage(named: "LetterAvatarTestImage") XCTAssertNotEqual(avatarImage, testAvatarImage) } func testAvatarBuildWithOneWordUsernameAndSingleLetterFlag() { // Make a configuration let configuration = LetterAvatarBuilderConfiguration() configuration.username = "Avatar" configuration.useSingleLetter = true // Make images let avatarImage = UIImage.makeLetterAvatar(withConfiguration: configuration) let testAvatarImage = UIImage(named: "LetterAvatarSingleLetterTestImage") // Test them XCTAssertEqual(avatarImage, testAvatarImage) } } ================================================ FILE: LetterAvatarKitTests/Info.plist ================================================ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType BNDL CFBundleShortVersionString 1.0 CFBundleVersion 1 ================================================ FILE: LetterAvatarKitTests/LetterAvatarBuilderTests.swift ================================================ // // LetterAvatarBuilderTests.swift // LetterAvatarKitTests // // Copyright 2017 Victor Peschenkov // // Permission is hereby granted, free of charge, to any person obtaining a copy // o this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // import XCTest @testable import LetterAvatarKit class LetterAvatarBuilderTests: XCTestCase { func testAvatarBuild() { let configuration = LetterAvatarBuilderConfiguration() configuration.username = "Letter Avatar" let avatarImage = LetterAvatarBuilder().makeAvatar(with: configuration) XCTAssertEqual(avatarImage, UIImage(named: "LetterAvatarTestImage")) } func testAvatarBuildWithCustomSize() { let size = CGSize(width: 100, height: 100) let configuration = LetterAvatarBuilderConfiguration() configuration.username = "Letter Avatar" configuration.size = size let avatarImage = LetterAvatarBuilder().makeAvatar(with: configuration) XCTAssertTrue(avatarImage?.size.width == size.width) XCTAssertTrue(avatarImage?.size.height == size.height) } func testAvatarBuildSingleLetterFlag() { // Make a configuration let configuration = LetterAvatarBuilderConfiguration() configuration.username = "Avatar Test" configuration.useSingleLetter = true // Make images let avatarImage = LetterAvatarBuilder().makeAvatar(with: configuration) let testImage = UIImage(named: "LetterAvatarSingleLetterTestImage") // Test them XCTAssertTrue(avatarImage?.size.width == configuration.size.width) XCTAssertTrue(avatarImage?.size.height == configuration.size.height) XCTAssertEqual(avatarImage, testImage) } func testAvatarBuildWithEmptyUsername() { let configuration = LetterAvatarBuilderConfiguration() let avatarImage = LetterAvatarBuilder().makeAvatar(with: configuration) let testImage = UIImage(named: "LetterAvatarEmptyTestImage") XCTAssertEqual(avatarImage, testImage) } func testAvatarBuildWithOneWordUsername() { let configuration = LetterAvatarBuilderConfiguration() configuration.username = "Avatar" let avatarImage = LetterAvatarBuilder().makeAvatar(with: configuration) let testImage = UIImage(named: "LetterAvatarOneWordTestImage") XCTAssertEqual(avatarImage, testImage) } func testAvatarBuildWithMoreThanTwoWordsUsername() { let configuration = LetterAvatarBuilderConfiguration() configuration.username = "Letter Test Avatar" let avatarImage = LetterAvatarBuilder().makeAvatar(with: configuration) let testImage = UIImage(named: "LetterAvatarTestImage") XCTAssertNotEqual(avatarImage, testImage) } func testAvatarBuildWithOneWordUsernameAndSingleLetterFlag() { let configuration = LetterAvatarBuilderConfiguration() configuration.username = "Avatar" configuration.useSingleLetter = true let avatarImage = LetterAvatarBuilder().makeAvatar(with: configuration) let testImage = UIImage(named: "LetterAvatarSingleLetterTestImage") XCTAssertEqual(avatarImage, testImage) } func testAvatarBuildWithOnlyOneBackgroundColor() { let configuration = LetterAvatarBuilderConfiguration() configuration.username = "Avatar" configuration.useSingleLetter = true configuration.backgroundColors = [ .red ] let avatarImage = LetterAvatarBuilder().makeAvatar(with: configuration) XCTAssertNotNil(avatarImage) } /// If a single letter is passed as false but the string is a single char, /// this line fails due to out of bounds exception. /// https://github.com/vpeschenkov/LetterAvatarKit/issues/11 func testAvatarBuildFailureCannotIncrementBeyondEndIndex() { let configuration = LetterAvatarBuilderConfiguration() configuration.username = "N" configuration.useSingleLetter = true configuration.backgroundColors = [ .red ] let avatarImage = LetterAvatarBuilder().makeAvatar(with: configuration) XCTAssertNotNil(avatarImage) } } ================================================ FILE: LetterAvatarKitTests/LetterAvatarMakerTests.swift ================================================ // // LetterAvatarMakerTests.swift // LetterAvatarKitTests // // Copyright 2017 Victor Peschenkov // // Permission is hereby granted, free of charge, to any person obtaining a copy // o this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // import XCTest @testable import LetterAvatarKit class LetterAvatarMakerTests: XCTestCase { func testAvatarBuild() { let avatarImage = LetterAvatarMaker() .setUsername("Letter Avatar") .build() let testImage = UIImage(named: "LetterAvatarTestImage") XCTAssertEqual(avatarImage, testImage) } func testAvatarBuildWithCustomSize() { let size = CGSize(width: 100, height: 100) let avatarImage = LetterAvatarMaker() .setUsername("Letter Avatar") .setSize(size) .build() XCTAssertTrue(avatarImage?.size.width == size.width) XCTAssertTrue(avatarImage?.size.height == size.height) } func testAvatarBuildSingleLetterFlag() { // Make images let avatarImage = LetterAvatarMaker() .setUsername("Avatar Test") .useSingleLetter(true) .build() let testImage = UIImage(named: "LetterAvatarSingleLetterTestImage") XCTAssertEqual(avatarImage, testImage) } func testAvatarBuildWithEmptyUsername() { let avatarImage = LetterAvatarMaker().build() let testImage = UIImage(named: "LetterAvatarEmptyTestImage") XCTAssertEqual(avatarImage, testImage) } func testAvatarBuildWithOneWordUsername() { let avatarImage = LetterAvatarMaker() .setUsername("Avatar") .build() let testImage = UIImage(named: "LetterAvatarOneWordTestImage") XCTAssertEqual(avatarImage, testImage) } func testAvatarBuildWithMoreThanTwoWordsUsername() { let avatarImage = LetterAvatarMaker() .setUsername("Letter Test Avatar") .build() let testImage = UIImage(named: "LetterAvatarTestImage") XCTAssertNotEqual(avatarImage, testImage) } func testAvatarBuildWithOneWordUsernameAndSingleLetterFlag() { let avatarImage = LetterAvatarMaker() .setUsername("Avatar") .useSingleLetter(true) .build() let testImage = UIImage(named: "LetterAvatarSingleLetterTestImage") XCTAssertEqual(avatarImage, testImage) } func testAvatarBuildWithOnlyOneBackgroundColor() { let avatarImage = LetterAvatarMaker() .setUsername("Avatar") .useSingleLetter(true) .setBackgroundColors([ .red ]) .build() XCTAssertNotNil(avatarImage) } /// If a single letter is passed as false but the string is a single char, /// this line fails due to out of bounds exception. /// https://github.com/vpeschenkov/LetterAvatarKit/issues/11 func testAvatarBuildFailureCannotIncrementBeyondEndIndex() { let avatarImage = LetterAvatarMaker() .setUsername("N") .useSingleLetter(true) .setBackgroundColors([ .red ]) .build() XCTAssertNotNil(avatarImage) } func testAvatarBuildWithClosure() { let avatarImage = LetterAvatarMaker() .build { c in c.username = "Letter Avatar" } let testImage = UIImage(named: "LetterAvatarTestImage") XCTAssertEqual(avatarImage, testImage) } } ================================================ FILE: LetterAvatarKitTests/Utilities/UIImage+Compare.swift ================================================ // // UIImage+TestsUtilities.swift // LetterAvatarKitTests // // Copyright 2017 Victor Peschenkov // // Permission is hereby granted, free of charge, to any person obtaining a copy // o this software and associated documentation files (the "Software"), to deal // in the Software without restriction, including without limitation the rights // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell // copies of the Software, and to permit persons to whom the Software is // furnished to do so, subject to the following conditions: // // The above copyright notice and this permission notice shall be included in // all copies or substantial portions of the Software. // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // import UIKit extension UIImage { /// Returns the named image from test bundle. /// /// - name: The name of the image. For images in asset /// catalogs, specify the name of the image asset. For PNG /// image files, specify the filename without the filename /// extension. For all other image file formats, include /// the filename extension in the name. convenience init?(named name: String) { self.init( named: name, in: Bundle(identifier: "org.peschenkov.LetterAvatarKit.LetterAvatarKitTests"), compatibleWith: nil ) } open override func isEqual(_ object: Any?) -> Bool { guard let image = object as? UIImage else { return false } return compareImages(with: image, tolerance: 0.1) } // swiftlint:disable function_body_length // swiftlint:disable cyclomatic_complexity open func compareImages(with image: UIImage?, tolerance: CGFloat) -> Bool { guard let image = image else { return false } guard self.size == image.size else { return false } var lhsImage: CGImage? = self.cgImage var rhsImage: CGImage? = image.cgImage let convertToSuitableByteOrder = { (image: UIImage, size: CGSize) -> CGImage? in defer { UIGraphicsEndImageContext() } UIGraphicsBeginImageContext(size) if UIGraphicsGetCurrentContext() != nil { image.draw(in: CGRect( x: 0, y: 0, width: size.width, height: size.height )) return UIGraphicsGetImageFromCurrentImageContext()?.cgImage } return nil } if #available(iOS 12.0, *) { if lhsImage?.byteOrderInfo != rhsImage?.byteOrderInfo { lhsImage = convertToSuitableByteOrder(self, self.size) rhsImage = convertToSuitableByteOrder(image, image.size) } } else { lhsImage = convertToSuitableByteOrder(self, self.size) rhsImage = convertToSuitableByteOrder(image, image.size) } guard let lhs = lhsImage, let rhs = rhsImage else { return false } guard let lhsData = lhs.dataProvider?.data, let rhsData = rhs.dataProvider?.data else { return false } if lhsData == rhsData { return true } else { guard let lhsPixelsPointer: UnsafePointer = CFDataGetBytePtr(lhsData), let rhsPixelsPointer: UnsafePointer = CFDataGetBytePtr(rhsData) else { return false } var errorCount = 0 let numberOfPixels = Int(self.size.width * self.size.height * 4) // swiftlint:disable line_length for i in stride(from: 0, to: numberOfPixels, by: 1) where lhsPixelsPointer[i] != rhsPixelsPointer[i] { errorCount += 1 let error = CGFloat(CGFloat(errorCount) / CGFloat(numberOfPixels)) if error > tolerance { return false } } // swiftlint:enable line_length return true } } // swiftlint:enable cyclomatic_complexity // swiftlint:enable function_body_length } ================================================ FILE: PULL_REQUEST_TEMPLATE.md ================================================ ### Summary Describe the goal of this PR. Mention any related Issue numbers. ### Requirements (place an `x` in each `[ ]`) * [ ] I've read and agree to the [Code of Conduct](CODE_OF_CONDUCT.md). * [ ] I've written tests to cover the new code and functionality included in this PR. ================================================ FILE: Package.swift ================================================ // swift-tools-version:5.1 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package = Package( name: "LetterAvatarKit", platforms: [ .iOS(.v9), .tvOS(.v9) ], products: [ .library( name: "LetterAvatarKit", targets: ["LetterAvatarKit"] ), ], dependencies: [ ], targets: [ .target( name: "LetterAvatarKit", dependencies: [], path: "LetterAvatarKit" ), .testTarget( name: "LetterAvatarKitTests", dependencies: [], path: "LetterAvatarKitTests" ) ] ) ================================================ FILE: README.md ================================================ # LetterAvatarKit ![][Swift Version] ![][Pods] ![][Platform] ![][Carthage compatible] ![][Codacy Badge] ![][Travis] `LetterAvatarKit` provides an ```UIImage``` extension for generating letter-based avatars/placeholders. There are a few images showing what you can achive by using this framework: ![][screenshots] ## Requirements - iOS 8+ - tvOS 9+ - Swift 4.0+ ## Features - Easy to use and intuitive interface - Highly flexible API allows for customization and integration into various projects - Use of the builder pattern for constructing avatar configurations - Support for creating circular, square, or bordered images - Wide range of flat UI colors available - Compatible with tvOS platform ## Installation ### [CocoaPods](https://cocoapods.org) `LetterAvatarKit` is available through [CocoaPods](https://cocoapods.org). To install it, simply add the following line to your Podfile: ```ruby pod "LetterAvatarKit", "1.2.5" # Swift 5.0+, Xcode 12 pod "LetterAvatarKit", "1.2.3" # Swift 5.0+, Xcode 11 pod "LetterAvatarKit", "1.1.7" # Swift 4.2 pod "LetterAvatarKit", "1.1.5" # Swift 4.0 ``` ### [Carthage](https://github.com/Carthage/Carthage) Add this to `Cartfile` ```ruby github "vpeschenkov/LetterAvatarKit" == 1.2.5 # Swift 5.0+, Xcode 12 github "vpeschenkov/LetterAvatarKit" == 1.2.3 # Swift 5.0+, Xcode 11 github "vpeschenkov/LetterAvatarKit" == 1.1.7 # Swift 4.2 github "vpeschenkov/LetterAvatarKit" == 1.1.5 # Swift 4.0 ``` ```sh $ carthage update ``` ## Usage ### Swift Using `LetterAvatarMaker`: ```swift // Square avatar image let avatarImage = LetterAvatarMaker() .setUsername("Letter Avatar") .build() avatarImageView.image = avatarImage // Circle avatar image with white border let circleAvatarImage = LetterAvatarMaker() .setCircle(true) .setUsername("Letter Avatar") .setBorderWidth(1.0) .setBackgroundColors([ .red ]) .build() avatarImageView.image = circleAvatarImage ``` Using `LetterAvatarMaker` with closures: ```swift let avatarImage = LetterAvatarMaker() .build { c in c.username = "Letter Avatar" } avatarImageView.image = avatarImage let avatarImage = LetterAvatarMaker() .build { c in c.circle = true c.username = "Letter Avatar" c.borderWidth = 1.0 c.backgroundColors = [ .red ] } avatarImageView.image = avatarImage ``` Using `LetterAvatarBuilderConfiguration`: ```swift let configuration = LetterAvatarBuilderConfiguration() configuration.username = "Letter Avatar" avatarImageView.image = UIImage.makeLetterAvatar(withConfiguration: configuration) ``` Using UIImage extension: ```swift avatarImageView.image = UIImage.makeLetterAvatar(withUsername: "Letter Avatar") ``` ### Objective-C Using `LKLetterAvatarBuilderCongiguration`: ```objc LKLetterAvatarBuilderCongiguration *configuration = [[LKLetterAvatarBuilderCongiguration alloc] init]; configuration.username = @"Letter Avatar"; self.avatarImageView.image = [UIImage lk_makeLetterAvatarWithConfiguration:configuration]; ``` Using UIImage extension: ```objc self.avatarImageView.image = [UIImage lk_makeLetterAvatarWithUsername:@"Letter Avatar"]; ``` ## Customization You can configure the following properties of `LetterAvatarBuilderConfiguration`: ```swift /// The username. open var username: String? ``` ```swift /// The size of an avatar image. open var size: CGSize = CGSize(width: 80, height: 80) ``` ```swift /// The flag that indicates of using single only one letter, otherwise, /// as much as wil be possible to obtain. But no more than 3 letters. open var isSingleLettered: Bool = false ``` ```swift /// The letters font. open var lettersFont: UIFont = UIFont.systemFont(ofSize: 16.0) ``` ```swift /// The letters colors open var lettersColor: UIColor = LKUIColorByRGB(red: 236, green: 240, blue: 241) ``` ```swift /// The background colors of an image. open var backgroundColors: [UIColor] = UIColor.colors ``` ```swift /// The letters font attributes. open var lettersFontAttributes: [NSAttributedString.Key: Any]? ``` ```swift /// Indicates whether to generate circle or square image. open var circle: Bool = false ``` ```swift /// The border width of the image. open var borderWidth: CGFloat = 0.0 ``` ```swift /// The border color of the image. open var borderColor: UIColor = UIColor.white ``` ```swift /// A Boolean flag indicating whether the avatar is opaque. open var opaque: Bool = false ``` ## Community Questions, comments, issues, and pull requests are welcome! ## Contacts - [GitHub](https://github.com/vpeschenkov) - [Twitter](https://twitter.com/vpeschenkov) ## License Distributed under the MIT license. See [LICENSE](https://github.com/vpeschenkov/LetterAvatarKit/blob/master/LICENSE) for more information. [Screenshots]: https://i.imgur.com/n3SjH6q.jpg [Platform]: https://cocoapod-badges.herokuapp.com/p/LetterAvatarKit/badge.png [Travis]: https://travis-ci.org/vpeschenkov/LetterAvatarKit.svg?branch=master [Pods]: https://cocoapod-badges.herokuapp.com/v/LetterAvatarKit/badge.png [Swift Version]: https://img.shields.io/badge/swift-5.0-orange.svg?style=flat [Codacy Badge]: https://api.codacy.com/project/badge/Grade/d0f9b1a4ccb64d4aacd18a971e4cf8b7 [Carthage compatible]: https://img.shields.io/badge/Carthage-compatible-4BC51D.svg?style=flat(https://github.com/Carthage/Carthage) ================================================ FILE: docs/Classes/LetterAvatarBuilder.html ================================================ LetterAvatarBuilder Class Reference

LetterAvatarBuilder

@objc(LKLetterAvatarBuilder)
open class LetterAvatarBuilder : NSObject

Uses for making letter-based avatar images.

  • Makes a letter-based avatar image by using a given configuration.

    Declaration

    Swift

    @objc(makeAvatarWithConfiguration:)
    open func makeAvatar(with configuration: LetterAvatarBuilderConfiguration) -> UIImage?

    Parameters

    configuration

    A configuration that is used to draw a letter-based avatar image.

    Return Value

    Returns whether an instance of UIImage or nil.

================================================ FILE: docs/Classes/LetterAvatarBuilderConfiguration.html ================================================ LetterAvatarBuilderConfiguration Class Reference

LetterAvatarBuilderConfiguration

@objc(LKLetterAvatarBuilderConfiguration)
open class LetterAvatarBuilderConfiguration : NSObject

Uses for configurating a LetterAvatarBuilder instance.

  • A size of an avatar image.

    Declaration

    Swift

    @objc(size)
    open var size: CGSize
  • An username.

    Declaration

    Swift

    @objc(username)
    open var username: String?
  • A flag that indicates of using single only one letter, otherwise, as much as wil be possible to obtain. But no more than 3 letters.

    Declaration

    Swift

    @objc(useSingleLetter)
    open var useSingleLetter: Bool
  • Letters font.

    Declaration

    Swift

    @objc(lettersFont)
    open var lettersFont: UIFont?
  • Colors that are used to draw image.

    Declaration

    Swift

    @objc(lettersColor)
    open var lettersColor: UIColor
  • Background colors of the image.

    Declaration

    Swift

    @objc(backgroundColors)
    open var backgroundColors: [UIColor]
  • Letters font attributes.

    Declaration

    Swift

    @objc(lettersFontAttributes)
    open var lettersFontAttributes: [NSAttributedString.Key : Any]?
  • Indicates whether to generate circle or square image.

    Declaration

    Swift

    @objc(circle)
    open var circle: Bool
  • A border width of the image.

    Declaration

    Swift

    @objc(borderWidth)
    open var borderWidth: CGFloat
  • A border color of the image.

    Declaration

    Swift

    @objc(borderColor)
    open var borderColor: UIColor
  • A Boolean flag indicating whether the avatar is opaque.

    Declaration

    Swift

    @objc(isOpaque)
    open var isOpaque: Bool
================================================ FILE: docs/Classes.html ================================================ Classes Reference

Classes

The following classes are available globally.

  • Uses for making letter-based avatar images.

    See more

    Declaration

    Swift

    @objc(LKLetterAvatarBuilder)
    open class LetterAvatarBuilder : NSObject
  • Uses for configurating a LetterAvatarBuilder instance.

    See more

    Declaration

    Swift

    @objc(LKLetterAvatarBuilderConfiguration)
    open class LetterAvatarBuilderConfiguration : NSObject
================================================ FILE: docs/Extensions/UIColor.html ================================================ UIColor Extension Reference
================================================ FILE: docs/Extensions/UIImage.html ================================================ UIImage Extension Reference

UIImage

class UIImage : NSObject, NSSecureCoding
  • Makes an letter-based avatar image using given configuration.

    Declaration

    Swift

    @objc(lk_makeLetterAvatarWithConfiguration:)
    static public func makeLetterAvatar(
        withConfiguration configuration: LetterAvatarBuilderConfiguration
        ) -> UIImage?

    Parameters

    configuration

    The configuration that uses to draw a letter-based avatar image.

    Return Value

    Returns whether an instance of UIImage or nil.

  • Makes an letter-based avatar image using given username.

    Declaration

    Swift

    @objc(lk_makeLetterAvatarWithUsername:)
    public static func makeLetterAvatar(withUsername username: String?) -> UIImage?

    Parameters

    username

    The username that uses to draw a letter-based avatar image.

    Return Value

    Returns whether an instance of UIImage or nil.

  • Makes an letter-based avatar image using given username and size.

    Declaration

    Swift

    @objc(lk_makeLetterAvatarWithUsername:size:)
    public static func makeLetterAvatar(withUsername username: String?, size: CGSize) -> UIImage?

    Parameters

    username

    The username that uses to draw a letter-based avatar image.

    size

    The avatar size.

    Return Value

    Returns whether an instance of UIImage or nil.

================================================ FILE: docs/Extensions.html ================================================ Extensions Reference

Extensions

The following extensions are available globally.

  • Declaration

    Swift

    class UIColor : NSObject, NSSecureCoding, NSCopying
  • Declaration

    Swift

    class UIImage : NSObject, NSSecureCoding
================================================ FILE: docs/css/highlight.css ================================================ /* Credit to https://gist.github.com/wataru420/2048287 */ .highlight { /* Comment */ /* Error */ /* Keyword */ /* Operator */ /* Comment.Multiline */ /* Comment.Preproc */ /* Comment.Single */ /* Comment.Special */ /* Generic.Deleted */ /* Generic.Deleted.Specific */ /* Generic.Emph */ /* Generic.Error */ /* Generic.Heading */ /* Generic.Inserted */ /* Generic.Inserted.Specific */ /* Generic.Output */ /* Generic.Prompt */ /* Generic.Strong */ /* Generic.Subheading */ /* Generic.Traceback */ /* Keyword.Constant */ /* Keyword.Declaration */ /* Keyword.Pseudo */ /* Keyword.Reserved */ /* Keyword.Type */ /* Literal.Number */ /* Literal.String */ /* Name.Attribute */ /* Name.Builtin */ /* Name.Class */ /* Name.Constant */ /* Name.Entity */ /* Name.Exception */ /* Name.Function */ /* Name.Namespace */ /* Name.Tag */ /* Name.Variable */ /* Operator.Word */ /* Text.Whitespace */ /* Literal.Number.Float */ /* Literal.Number.Hex */ /* Literal.Number.Integer */ /* Literal.Number.Oct */ /* Literal.String.Backtick */ /* Literal.String.Char */ /* Literal.String.Doc */ /* Literal.String.Double */ /* Literal.String.Escape */ /* Literal.String.Heredoc */ /* Literal.String.Interpol */ /* Literal.String.Other */ /* Literal.String.Regex */ /* Literal.String.Single */ /* Literal.String.Symbol */ /* Name.Builtin.Pseudo */ /* Name.Variable.Class */ /* Name.Variable.Global */ /* Name.Variable.Instance */ /* Literal.Number.Integer.Long */ } .highlight .c { color: #999988; font-style: italic; } .highlight .err { color: #a61717; background-color: #e3d2d2; } .highlight .k { color: #000000; font-weight: bold; } .highlight .o { color: #000000; font-weight: bold; } .highlight .cm { color: #999988; font-style: italic; } .highlight .cp { color: #999999; font-weight: bold; } .highlight .c1 { color: #999988; font-style: italic; } .highlight .cs { color: #999999; font-weight: bold; font-style: italic; } .highlight .gd { color: #000000; background-color: #ffdddd; } .highlight .gd .x { color: #000000; background-color: #ffaaaa; } .highlight .ge { color: #000000; font-style: italic; } .highlight .gr { color: #aa0000; } .highlight .gh { color: #999999; } .highlight .gi { color: #000000; background-color: #ddffdd; } .highlight .gi .x { color: #000000; background-color: #aaffaa; } .highlight .go { color: #888888; } .highlight .gp { color: #555555; } .highlight .gs { font-weight: bold; } .highlight .gu { color: #aaaaaa; } .highlight .gt { color: #aa0000; } .highlight .kc { color: #000000; font-weight: bold; } .highlight .kd { color: #000000; font-weight: bold; } .highlight .kp { color: #000000; font-weight: bold; } .highlight .kr { color: #000000; font-weight: bold; } .highlight .kt { color: #445588; } .highlight .m { color: #009999; } .highlight .s { color: #d14; } .highlight .na { color: #008080; } .highlight .nb { color: #0086B3; } .highlight .nc { color: #445588; font-weight: bold; } .highlight .no { color: #008080; } .highlight .ni { color: #800080; } .highlight .ne { color: #990000; font-weight: bold; } .highlight .nf { color: #990000; } .highlight .nn { color: #555555; } .highlight .nt { color: #000080; } .highlight .nv { color: #008080; } .highlight .ow { color: #000000; font-weight: bold; } .highlight .w { color: #bbbbbb; } .highlight .mf { color: #009999; } .highlight .mh { color: #009999; } .highlight .mi { color: #009999; } .highlight .mo { color: #009999; } .highlight .sb { color: #d14; } .highlight .sc { color: #d14; } .highlight .sd { color: #d14; } .highlight .s2 { color: #d14; } .highlight .se { color: #d14; } .highlight .sh { color: #d14; } .highlight .si { color: #d14; } .highlight .sx { color: #d14; } .highlight .sr { color: #009926; } .highlight .s1 { color: #d14; } .highlight .ss { color: #990073; } .highlight .bp { color: #999999; } .highlight .vc { color: #008080; } .highlight .vg { color: #008080; } .highlight .vi { color: #008080; } .highlight .il { color: #009999; } ================================================ FILE: docs/css/jazzy.css ================================================ html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { background: transparent; border: 0; margin: 0; outline: 0; padding: 0; vertical-align: baseline; } body { background-color: #f2f2f2; font-family: Helvetica, freesans, Arial, sans-serif; font-size: 14px; -webkit-font-smoothing: subpixel-antialiased; word-wrap: break-word; } h1, h2, h3 { margin-top: 0.8em; margin-bottom: 0.3em; font-weight: 100; color: black; } h1 { font-size: 2.5em; } h2 { font-size: 2em; border-bottom: 1px solid #e2e2e2; } h4 { font-size: 13px; line-height: 1.5; margin-top: 21px; } h5 { font-size: 1.1em; } h6 { font-size: 1.1em; color: #777; } .section-name { color: gray; display: block; font-family: Helvetica; font-size: 22px; font-weight: 100; margin-bottom: 15px; } pre, code { font: 0.95em Menlo, monospace; color: #777; word-wrap: normal; } p code, li code { background-color: #eee; padding: 2px 4px; border-radius: 4px; } a { color: #0088cc; text-decoration: none; } ul { padding-left: 15px; } li { line-height: 1.8em; } img { max-width: 100%; } blockquote { margin-left: 0; padding: 0 10px; border-left: 4px solid #ccc; } .content-wrapper { margin: 0 auto; width: 980px; } header { font-size: 0.85em; line-height: 26px; background-color: #414141; position: fixed; width: 100%; z-index: 1; } header img { padding-right: 6px; vertical-align: -4px; height: 16px; } header a { color: #fff; } header p { float: left; color: #999; } header .header-right { float: right; margin-left: 16px; } #breadcrumbs { background-color: #f2f2f2; height: 27px; padding-top: 17px; position: fixed; width: 100%; z-index: 1; margin-top: 26px; } #breadcrumbs #carat { height: 10px; margin: 0 5px; } .sidebar { background-color: #f9f9f9; border: 1px solid #e2e2e2; overflow-y: auto; overflow-x: hidden; position: fixed; top: 70px; bottom: 0; width: 230px; word-wrap: normal; } .nav-groups { list-style-type: none; background: #fff; padding-left: 0; } .nav-group-name { border-bottom: 1px solid #e2e2e2; font-size: 1.1em; font-weight: 100; padding: 15px 0 15px 20px; } .nav-group-name > a { color: #333; } .nav-group-tasks { margin-top: 5px; } .nav-group-task { font-size: 0.9em; list-style-type: none; white-space: nowrap; } .nav-group-task a { color: #888; } .main-content { background-color: #fff; border: 1px solid #e2e2e2; margin-left: 246px; position: absolute; overflow: hidden; padding-bottom: 60px; top: 70px; width: 734px; } .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { margin-bottom: 1em; } .main-content p { line-height: 1.8em; } .main-content section .section:first-child { margin-top: 0; padding-top: 0; } .main-content section .task-group-section .task-group:first-of-type { padding-top: 10px; } .main-content section .task-group-section .task-group:first-of-type .section-name { padding-top: 15px; } .main-content section .heading:before { content: ""; display: block; padding-top: 70px; margin: -70px 0 0; } .section { padding: 0 25px; } .highlight { background-color: #eee; padding: 10px 12px; border: 1px solid #e2e2e2; border-radius: 4px; overflow-x: auto; } .declaration .highlight { overflow-x: initial; padding: 0 40px 40px 0; margin-bottom: -25px; background-color: transparent; border: none; } .section-name { margin: 0; margin-left: 18px; } .task-group-section { padding-left: 6px; border-top: 1px solid #e2e2e2; } .task-group { padding-top: 0px; } .task-name-container a[name]:before { content: ""; display: block; padding-top: 70px; margin: -70px 0 0; } .item { padding-top: 8px; width: 100%; list-style-type: none; } .item a[name]:before { content: ""; display: block; padding-top: 70px; margin: -70px 0 0; } .item code { background-color: transparent; padding: 0; } .item .token { padding-left: 3px; margin-left: 15px; font-size: 11.9px; } .item .declaration-note { font-size: .85em; color: gray; font-style: italic; } .pointer-container { border-bottom: 1px solid #e2e2e2; left: -23px; padding-bottom: 13px; position: relative; width: 110%; } .pointer { background: #f9f9f9; border-left: 1px solid #e2e2e2; border-top: 1px solid #e2e2e2; height: 12px; left: 21px; top: -7px; -webkit-transform: rotate(45deg); -moz-transform: rotate(45deg); -o-transform: rotate(45deg); transform: rotate(45deg); position: absolute; width: 12px; } .height-container { display: none; left: -25px; padding: 0 25px; position: relative; width: 100%; overflow: hidden; } .height-container .section { background: #f9f9f9; border-bottom: 1px solid #e2e2e2; left: -25px; position: relative; width: 100%; padding-top: 10px; padding-bottom: 5px; } .aside, .language { padding: 6px 12px; margin: 12px 0; border-left: 5px solid #dddddd; overflow-y: hidden; } .aside .aside-title, .language .aside-title { font-size: 9px; letter-spacing: 2px; text-transform: uppercase; padding-bottom: 0; margin: 0; color: #aaa; -webkit-user-select: none; } .aside p:last-child, .language p:last-child { margin-bottom: 0; } .language { border-left: 5px solid #cde9f4; } .language .aside-title { color: #4b8afb; } .aside-warning { border-left: 5px solid #ff6666; } .aside-warning .aside-title { color: #ff0000; } .graybox { border-collapse: collapse; width: 100%; } .graybox p { margin: 0; word-break: break-word; min-width: 50px; } .graybox td { border: 1px solid #e2e2e2; padding: 5px 25px 5px 10px; vertical-align: middle; } .graybox tr td:first-of-type { text-align: right; padding: 7px; vertical-align: top; word-break: normal; width: 40px; } .slightly-smaller { font-size: 0.9em; } #footer { position: absolute; bottom: 10px; margin-left: 25px; } #footer p { margin: 0; color: #aaa; font-size: 0.8em; } html.dash header, html.dash #breadcrumbs, html.dash .sidebar { display: none; } html.dash .main-content { width: 980px; margin-left: 0; border: none; width: 100%; top: 0; padding-bottom: 0; } html.dash .height-container { display: block; } html.dash .item .token { margin-left: 0; } html.dash .content-wrapper { width: auto; } html.dash #footer { position: static; } ================================================ FILE: docs/docsets/LetterAvatarKit.docset/Contents/Info.plist ================================================ CFBundleIdentifier com.jazzy.letteravatarkit CFBundleName LetterAvatarKit DocSetPlatformFamily letteravatarkit isDashDocset dashIndexFilePath index.html isJavaScriptEnabled DashDocSetFamily dashtoc ================================================ FILE: docs/docsets/LetterAvatarKit.docset/Contents/Resources/Documents/Classes/LetterAvatarBuilder.html ================================================ LetterAvatarBuilder Class Reference

LetterAvatarBuilder

@objc(LKLetterAvatarBuilder)
open class LetterAvatarBuilder : NSObject

Uses for making letter-based avatar images.

  • Makes a letter-based avatar image by using a given configuration.

    Declaration

    Swift

    @objc(makeAvatarWithConfiguration:)
    open func makeAvatar(with configuration: LetterAvatarBuilderConfiguration) -> UIImage?

    Parameters

    configuration

    A configuration that is used to draw a letter-based avatar image.

    Return Value

    Returns whether an instance of UIImage or nil.

================================================ FILE: docs/docsets/LetterAvatarKit.docset/Contents/Resources/Documents/Classes/LetterAvatarBuilderConfiguration.html ================================================ LetterAvatarBuilderConfiguration Class Reference

LetterAvatarBuilderConfiguration

@objc(LKLetterAvatarBuilderConfiguration)
open class LetterAvatarBuilderConfiguration : NSObject

Uses for configurating a LetterAvatarBuilder instance.

  • A size of an avatar image.

    Declaration

    Swift

    @objc(size)
    open var size: CGSize
  • An username.

    Declaration

    Swift

    @objc(username)
    open var username: String?
  • A flag that indicates of using single only one letter, otherwise, as much as wil be possible to obtain. But no more than 3 letters.

    Declaration

    Swift

    @objc(useSingleLetter)
    open var useSingleLetter: Bool
  • Letters font.

    Declaration

    Swift

    @objc(lettersFont)
    open var lettersFont: UIFont?
  • Colors that are used to draw image.

    Declaration

    Swift

    @objc(lettersColor)
    open var lettersColor: UIColor
  • Background colors of the image.

    Declaration

    Swift

    @objc(backgroundColors)
    open var backgroundColors: [UIColor]
  • Letters font attributes.

    Declaration

    Swift

    @objc(lettersFontAttributes)
    open var lettersFontAttributes: [NSAttributedString.Key : Any]?
  • Indicates whether to generate circle or square image.

    Declaration

    Swift

    @objc(circle)
    open var circle: Bool
  • A border width of the image.

    Declaration

    Swift

    @objc(borderWidth)
    open var borderWidth: CGFloat
  • A border color of the image.

    Declaration

    Swift

    @objc(borderColor)
    open var borderColor: UIColor
  • A Boolean flag indicating whether the avatar is opaque.

    Declaration

    Swift

    @objc(isOpaque)
    open var isOpaque: Bool
================================================ FILE: docs/docsets/LetterAvatarKit.docset/Contents/Resources/Documents/Classes.html ================================================ Classes Reference

Classes

The following classes are available globally.

  • Uses for making letter-based avatar images.

    See more

    Declaration

    Swift

    @objc(LKLetterAvatarBuilder)
    open class LetterAvatarBuilder : NSObject
  • Uses for configurating a LetterAvatarBuilder instance.

    See more

    Declaration

    Swift

    @objc(LKLetterAvatarBuilderConfiguration)
    open class LetterAvatarBuilderConfiguration : NSObject
================================================ FILE: docs/docsets/LetterAvatarKit.docset/Contents/Resources/Documents/Extensions/UIColor.html ================================================ UIColor Extension Reference
================================================ FILE: docs/docsets/LetterAvatarKit.docset/Contents/Resources/Documents/Extensions/UIImage.html ================================================ UIImage Extension Reference

UIImage

class UIImage : NSObject, NSSecureCoding
  • Makes an letter-based avatar image using given configuration.

    Declaration

    Swift

    @objc(lk_makeLetterAvatarWithConfiguration:)
    static public func makeLetterAvatar(
        withConfiguration configuration: LetterAvatarBuilderConfiguration
        ) -> UIImage?

    Parameters

    configuration

    The configuration that uses to draw a letter-based avatar image.

    Return Value

    Returns whether an instance of UIImage or nil.

  • Makes an letter-based avatar image using given username.

    Declaration

    Swift

    @objc(lk_makeLetterAvatarWithUsername:)
    public static func makeLetterAvatar(withUsername username: String?) -> UIImage?

    Parameters

    username

    The username that uses to draw a letter-based avatar image.

    Return Value

    Returns whether an instance of UIImage or nil.

  • Makes an letter-based avatar image using given username and size.

    Declaration

    Swift

    @objc(lk_makeLetterAvatarWithUsername:size:)
    public static func makeLetterAvatar(withUsername username: String?, size: CGSize) -> UIImage?

    Parameters

    username

    The username that uses to draw a letter-based avatar image.

    size

    The avatar size.

    Return Value

    Returns whether an instance of UIImage or nil.

================================================ FILE: docs/docsets/LetterAvatarKit.docset/Contents/Resources/Documents/Extensions.html ================================================ Extensions Reference

Extensions

The following extensions are available globally.

  • Declaration

    Swift

    class UIColor : NSObject, NSSecureCoding, NSCopying
  • Declaration

    Swift

    class UIImage : NSObject, NSSecureCoding
================================================ FILE: docs/docsets/LetterAvatarKit.docset/Contents/Resources/Documents/css/highlight.css ================================================ /* Credit to https://gist.github.com/wataru420/2048287 */ .highlight { /* Comment */ /* Error */ /* Keyword */ /* Operator */ /* Comment.Multiline */ /* Comment.Preproc */ /* Comment.Single */ /* Comment.Special */ /* Generic.Deleted */ /* Generic.Deleted.Specific */ /* Generic.Emph */ /* Generic.Error */ /* Generic.Heading */ /* Generic.Inserted */ /* Generic.Inserted.Specific */ /* Generic.Output */ /* Generic.Prompt */ /* Generic.Strong */ /* Generic.Subheading */ /* Generic.Traceback */ /* Keyword.Constant */ /* Keyword.Declaration */ /* Keyword.Pseudo */ /* Keyword.Reserved */ /* Keyword.Type */ /* Literal.Number */ /* Literal.String */ /* Name.Attribute */ /* Name.Builtin */ /* Name.Class */ /* Name.Constant */ /* Name.Entity */ /* Name.Exception */ /* Name.Function */ /* Name.Namespace */ /* Name.Tag */ /* Name.Variable */ /* Operator.Word */ /* Text.Whitespace */ /* Literal.Number.Float */ /* Literal.Number.Hex */ /* Literal.Number.Integer */ /* Literal.Number.Oct */ /* Literal.String.Backtick */ /* Literal.String.Char */ /* Literal.String.Doc */ /* Literal.String.Double */ /* Literal.String.Escape */ /* Literal.String.Heredoc */ /* Literal.String.Interpol */ /* Literal.String.Other */ /* Literal.String.Regex */ /* Literal.String.Single */ /* Literal.String.Symbol */ /* Name.Builtin.Pseudo */ /* Name.Variable.Class */ /* Name.Variable.Global */ /* Name.Variable.Instance */ /* Literal.Number.Integer.Long */ } .highlight .c { color: #999988; font-style: italic; } .highlight .err { color: #a61717; background-color: #e3d2d2; } .highlight .k { color: #000000; font-weight: bold; } .highlight .o { color: #000000; font-weight: bold; } .highlight .cm { color: #999988; font-style: italic; } .highlight .cp { color: #999999; font-weight: bold; } .highlight .c1 { color: #999988; font-style: italic; } .highlight .cs { color: #999999; font-weight: bold; font-style: italic; } .highlight .gd { color: #000000; background-color: #ffdddd; } .highlight .gd .x { color: #000000; background-color: #ffaaaa; } .highlight .ge { color: #000000; font-style: italic; } .highlight .gr { color: #aa0000; } .highlight .gh { color: #999999; } .highlight .gi { color: #000000; background-color: #ddffdd; } .highlight .gi .x { color: #000000; background-color: #aaffaa; } .highlight .go { color: #888888; } .highlight .gp { color: #555555; } .highlight .gs { font-weight: bold; } .highlight .gu { color: #aaaaaa; } .highlight .gt { color: #aa0000; } .highlight .kc { color: #000000; font-weight: bold; } .highlight .kd { color: #000000; font-weight: bold; } .highlight .kp { color: #000000; font-weight: bold; } .highlight .kr { color: #000000; font-weight: bold; } .highlight .kt { color: #445588; } .highlight .m { color: #009999; } .highlight .s { color: #d14; } .highlight .na { color: #008080; } .highlight .nb { color: #0086B3; } .highlight .nc { color: #445588; font-weight: bold; } .highlight .no { color: #008080; } .highlight .ni { color: #800080; } .highlight .ne { color: #990000; font-weight: bold; } .highlight .nf { color: #990000; } .highlight .nn { color: #555555; } .highlight .nt { color: #000080; } .highlight .nv { color: #008080; } .highlight .ow { color: #000000; font-weight: bold; } .highlight .w { color: #bbbbbb; } .highlight .mf { color: #009999; } .highlight .mh { color: #009999; } .highlight .mi { color: #009999; } .highlight .mo { color: #009999; } .highlight .sb { color: #d14; } .highlight .sc { color: #d14; } .highlight .sd { color: #d14; } .highlight .s2 { color: #d14; } .highlight .se { color: #d14; } .highlight .sh { color: #d14; } .highlight .si { color: #d14; } .highlight .sx { color: #d14; } .highlight .sr { color: #009926; } .highlight .s1 { color: #d14; } .highlight .ss { color: #990073; } .highlight .bp { color: #999999; } .highlight .vc { color: #008080; } .highlight .vg { color: #008080; } .highlight .vi { color: #008080; } .highlight .il { color: #009999; } ================================================ FILE: docs/docsets/LetterAvatarKit.docset/Contents/Resources/Documents/css/jazzy.css ================================================ html, body, div, span, h1, h3, h4, p, a, code, em, img, ul, li, table, tbody, tr, td { background: transparent; border: 0; margin: 0; outline: 0; padding: 0; vertical-align: baseline; } body { background-color: #f2f2f2; font-family: Helvetica, freesans, Arial, sans-serif; font-size: 14px; -webkit-font-smoothing: subpixel-antialiased; word-wrap: break-word; } h1, h2, h3 { margin-top: 0.8em; margin-bottom: 0.3em; font-weight: 100; color: black; } h1 { font-size: 2.5em; } h2 { font-size: 2em; border-bottom: 1px solid #e2e2e2; } h4 { font-size: 13px; line-height: 1.5; margin-top: 21px; } h5 { font-size: 1.1em; } h6 { font-size: 1.1em; color: #777; } .section-name { color: gray; display: block; font-family: Helvetica; font-size: 22px; font-weight: 100; margin-bottom: 15px; } pre, code { font: 0.95em Menlo, monospace; color: #777; word-wrap: normal; } p code, li code { background-color: #eee; padding: 2px 4px; border-radius: 4px; } a { color: #0088cc; text-decoration: none; } ul { padding-left: 15px; } li { line-height: 1.8em; } img { max-width: 100%; } blockquote { margin-left: 0; padding: 0 10px; border-left: 4px solid #ccc; } .content-wrapper { margin: 0 auto; width: 980px; } header { font-size: 0.85em; line-height: 26px; background-color: #414141; position: fixed; width: 100%; z-index: 1; } header img { padding-right: 6px; vertical-align: -4px; height: 16px; } header a { color: #fff; } header p { float: left; color: #999; } header .header-right { float: right; margin-left: 16px; } #breadcrumbs { background-color: #f2f2f2; height: 27px; padding-top: 17px; position: fixed; width: 100%; z-index: 1; margin-top: 26px; } #breadcrumbs #carat { height: 10px; margin: 0 5px; } .sidebar { background-color: #f9f9f9; border: 1px solid #e2e2e2; overflow-y: auto; overflow-x: hidden; position: fixed; top: 70px; bottom: 0; width: 230px; word-wrap: normal; } .nav-groups { list-style-type: none; background: #fff; padding-left: 0; } .nav-group-name { border-bottom: 1px solid #e2e2e2; font-size: 1.1em; font-weight: 100; padding: 15px 0 15px 20px; } .nav-group-name > a { color: #333; } .nav-group-tasks { margin-top: 5px; } .nav-group-task { font-size: 0.9em; list-style-type: none; white-space: nowrap; } .nav-group-task a { color: #888; } .main-content { background-color: #fff; border: 1px solid #e2e2e2; margin-left: 246px; position: absolute; overflow: hidden; padding-bottom: 60px; top: 70px; width: 734px; } .main-content p, .main-content a, .main-content code, .main-content em, .main-content ul, .main-content table, .main-content blockquote { margin-bottom: 1em; } .main-content p { line-height: 1.8em; } .main-content section .section:first-child { margin-top: 0; padding-top: 0; } .main-content section .task-group-section .task-group:first-of-type { padding-top: 10px; } .main-content section .task-group-section .task-group:first-of-type .section-name { padding-top: 15px; } .main-content section .heading:before { content: ""; display: block; padding-top: 70px; margin: -70px 0 0; } .section { padding: 0 25px; } .highlight { background-color: #eee; padding: 10px 12px; border: 1px solid #e2e2e2; border-radius: 4px; overflow-x: auto; } .declaration .highlight { overflow-x: initial; padding: 0 40px 40px 0; margin-bottom: -25px; background-color: transparent; border: none; } .section-name { margin: 0; margin-left: 18px; } .task-group-section { padding-left: 6px; border-top: 1px solid #e2e2e2; } .task-group { padding-top: 0px; } .task-name-container a[name]:before { content: ""; display: block; padding-top: 70px; margin: -70px 0 0; } .item { padding-top: 8px; width: 100%; list-style-type: none; } .item a[name]:before { content: ""; display: block; padding-top: 70px; margin: -70px 0 0; } .item code { background-color: transparent; padding: 0; } .item .token { padding-left: 3px; margin-left: 15px; font-size: 11.9px; } .item .declaration-note { font-size: .85em; color: gray; font-style: italic; } .pointer-container { border-bottom: 1px solid #e2e2e2; left: -23px; padding-bottom: 13px; position: relative; width: 110%; } .pointer { background: #f9f9f9; border-left: 1px solid #e2e2e2; border-top: 1px solid #e2e2e2; height: 12px; left: 21px; top: -7px; -webkit-transform: rotate(45deg); -moz-transform: rotate(45deg); -o-transform: rotate(45deg); transform: rotate(45deg); position: absolute; width: 12px; } .height-container { display: none; left: -25px; padding: 0 25px; position: relative; width: 100%; overflow: hidden; } .height-container .section { background: #f9f9f9; border-bottom: 1px solid #e2e2e2; left: -25px; position: relative; width: 100%; padding-top: 10px; padding-bottom: 5px; } .aside, .language { padding: 6px 12px; margin: 12px 0; border-left: 5px solid #dddddd; overflow-y: hidden; } .aside .aside-title, .language .aside-title { font-size: 9px; letter-spacing: 2px; text-transform: uppercase; padding-bottom: 0; margin: 0; color: #aaa; -webkit-user-select: none; } .aside p:last-child, .language p:last-child { margin-bottom: 0; } .language { border-left: 5px solid #cde9f4; } .language .aside-title { color: #4b8afb; } .aside-warning { border-left: 5px solid #ff6666; } .aside-warning .aside-title { color: #ff0000; } .graybox { border-collapse: collapse; width: 100%; } .graybox p { margin: 0; word-break: break-word; min-width: 50px; } .graybox td { border: 1px solid #e2e2e2; padding: 5px 25px 5px 10px; vertical-align: middle; } .graybox tr td:first-of-type { text-align: right; padding: 7px; vertical-align: top; word-break: normal; width: 40px; } .slightly-smaller { font-size: 0.9em; } #footer { position: absolute; bottom: 10px; margin-left: 25px; } #footer p { margin: 0; color: #aaa; font-size: 0.8em; } html.dash header, html.dash #breadcrumbs, html.dash .sidebar { display: none; } html.dash .main-content { width: 980px; margin-left: 0; border: none; width: 100%; top: 0; padding-bottom: 0; } html.dash .height-container { display: block; } html.dash .item .token { margin-left: 0; } html.dash .content-wrapper { width: auto; } html.dash #footer { position: static; } ================================================ FILE: docs/docsets/LetterAvatarKit.docset/Contents/Resources/Documents/index.html ================================================ LetterAvatarKit Reference

LetterAvatarKit

LetterAvatarKit provides an UIImage extension for generating letter-based avatars/placeholders. There are a few images showing what you can achive by using this framework:

Requirements

  • iOS 8 and later
  • Swift 4.0 and later

Features

  • Ease of use
  • Flexible API
  • Builder pattern
  • Circle/Square/Bordered image
  • Flat UI colors

Installation

CocoaPods

LetterAvatarKit is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod "LetterAvatarKit", "1.2.2" # Swift 5.0+
pod "LetterAvatarKit", "1.1.7" # Swift 4.2
pod "LetterAvatarKit", "1.1.5" # Swift 4.0

Carthage

Add this to Cartfile

github "vpeschenkov/LetterAvatarKit" == 1.2.2 # Swift 5.0+
github "vpeschenkov/LetterAvatarKit" == 1.1.7 # Swift 4.2
github "vpeschenkov/LetterAvatarKit" == 1.1.5 # Swift 4.0
$ carthage update

Usage

Swift

Using LetterAvatarMaker:

// Square avatar image
let avatarImage = LetterAvatarMaker()
    .setUsername("Letter Avatar")
    .build()
avatarImageView.image = avatarImage

// Circle avatar image with white border
let circleAvatarImage = LetterAvatarMaker()
    .setCircle(true)
    .setUsername("Letter Avatar")
    .setBorderWidth(1.0)
    .setBackgroundColors([ .red ])
    .build()
avatarImageView.image = circleAvatarImage

Using LetterAvatarMaker with closures:

let avatarImage = LetterAvatarMaker()
    .build { c in
        c.username = "Letter Avatar"
    }
avatarImageView.image = avatarImage

let avatarImage = LetterAvatarMaker()
    .build { c in
        c.isCircle = true
        c.username = "Letter Avatar"
        c.borderWidth = 1.0
        c.backgroundColors = [ .red ]
    }
avatarImageView.image = avatarImage

Using LetterAvatarBuilderConfiguration:

let configuration = LetterAvatarBuilderConfiguration()
configuration.username = "Letter Avatar"
avatarImageView.image = UIImage.makeLetterAvatar(withConfiguration: configuration)

Using UIImage extension:

avatarImageView.image = UIImage.makeLetterAvatar(withUsername: "Letter Avatar")

Objective-C

Using LKLetterAvatarBuilderCongiguration:

LKLetterAvatarBuilderCongiguration *configuration = [[LKLetterAvatarBuilderCongiguration alloc] init];
configuration.username = @"Letter Avatar";
self.avatarImageView.image = [UIImage lk_makeLetterAvatarWithConfiguration:configuration];

Using UIImage extension:

self.avatarImageView.image = [UIImage lk_makeLetterAvatarWithUsername:@"Letter Avatar"];

Customization

You can configure the following properties of LetterAvatarBuilderConfiguration:

/// The username.
open var username: String?
/// The size of an avatar image.
open var size: CGSize = CGSize(width: 80, height: 80)
/// The flag that indicates of using single only one letter, otherwise,
/// as much as wil be possible to obtain. But no more than 3 letters.
open var isSingleLettered: Bool = false
/// The letters font.
open var lettersFont: UIFont = UIFont.systemFont(ofSize: 16.0)
/// The letters colors
open var lettersColor: UIColor = LKUIColorByRGB(red: 236, green: 240, blue: 241)
/// The background colors of an image.
open var backgroundColors: [UIColor] = UIColor.colors
/// The letters font attributes.
open var lettersFontAttributes: [NSAttributedString.Key: Any]?
/// Indicates whether to generate circle or square image.
open var isCircle: Bool = false
/// The border width of the image.
open var borderWidth: CGFloat = 0.0
/// The border color of the image.
open var borderColor: UIColor = UIColor.white
/// A Boolean flag indicating whether the avatar is opaque.
open var opaque: Bool = false

Community

Questions, comments, issues, and pull requests are welcome!

Contacts

License

Distributed under the MIT license. See LICENSE for more information.

================================================ FILE: docs/docsets/LetterAvatarKit.docset/Contents/Resources/Documents/js/jazzy.js ================================================ window.jazzy = {'docset': false} if (typeof window.dash != 'undefined') { document.documentElement.className += ' dash' window.jazzy.docset = true } if (navigator.userAgent.match(/xcode/i)) { document.documentElement.className += ' xcode' window.jazzy.docset = true } // On doc load, toggle the URL hash discussion if present $(document).ready(function() { if (!window.jazzy.docset) { var linkToHash = $('a[href="' + window.location.hash +'"]'); linkToHash.trigger("click"); } }); // On token click, toggle its discussion and animate token.marginLeft $(".token").click(function(event) { if (window.jazzy.docset) { return; } var link = $(this); var animationDuration = 300; var tokenOffset = "15px"; var original = link.css('marginLeft') == tokenOffset; link.animate({'margin-left':original ? "0px" : tokenOffset}, animationDuration); $content = link.parent().parent().next(); $content.slideToggle(animationDuration); // Keeps the document from jumping to the hash. var href = $(this).attr('href'); if (history.pushState) { history.pushState({}, '', href); } else { location.hash = href; } event.preventDefault(); }); // Dumb down quotes within code blocks that delimit strings instead of quotations // https://github.com/realm/jazzy/issues/714 $("code q").replaceWith(function () { return ["\"", $(this).contents(), "\""]; }); ================================================ FILE: docs/docsets/LetterAvatarKit.docset/Contents/Resources/Documents/search.json ================================================ {"Extensions/UIImage.html#/c:@CM@LetterAvatarKit@@objc(cs)UIImage(cm)lk_makeLetterAvatarWithConfiguration:":{"name":"makeLetterAvatar(withConfiguration:)","abstract":"

Makes an letter-based avatar image using given configuration.

","parent_name":"UIImage"},"Extensions/UIImage.html#/c:@CM@LetterAvatarKit@@objc(cs)UIImage(cm)lk_makeLetterAvatarWithUsername:":{"name":"makeLetterAvatar(withUsername:)","abstract":"

Makes an letter-based avatar image using given username.

","parent_name":"UIImage"},"Extensions/UIImage.html#/c:@CM@LetterAvatarKit@@objc(cs)UIImage(cm)lk_makeLetterAvatarWithUsername:size:":{"name":"makeLetterAvatar(withUsername:size:)","abstract":"

Makes an letter-based avatar image using given username and size.

","parent_name":"UIImage"},"Extensions/UIColor.html#/s:So7UIColorC15LetterAvatarKitE8HEXColorO":{"name":"HEXColor","abstract":"

Colors from http://flatuicolors.com/

","parent_name":"UIColor"},"Extensions/UIColor.html":{"name":"UIColor"},"Extensions/UIImage.html":{"name":"UIImage"},"Classes/LetterAvatarBuilderConfiguration.html#/c:@M@LetterAvatarKit@objc(cs)LKLetterAvatarBuilderConfiguration(py)size":{"name":"size","abstract":"

A size of an avatar image.

","parent_name":"LetterAvatarBuilderConfiguration"},"Classes/LetterAvatarBuilderConfiguration.html#/c:@M@LetterAvatarKit@objc(cs)LKLetterAvatarBuilderConfiguration(py)username":{"name":"username","abstract":"

An username.

","parent_name":"LetterAvatarBuilderConfiguration"},"Classes/LetterAvatarBuilderConfiguration.html#/c:@M@LetterAvatarKit@objc(cs)LKLetterAvatarBuilderConfiguration(py)useSingleLetter":{"name":"useSingleLetter","abstract":"

A flag that indicates of using single only one letter, otherwise,","parent_name":"LetterAvatarBuilderConfiguration"},"Classes/LetterAvatarBuilderConfiguration.html#/c:@M@LetterAvatarKit@objc(cs)LKLetterAvatarBuilderConfiguration(py)lettersFont":{"name":"lettersFont","abstract":"

Letters font.

","parent_name":"LetterAvatarBuilderConfiguration"},"Classes/LetterAvatarBuilderConfiguration.html#/c:@M@LetterAvatarKit@objc(cs)LKLetterAvatarBuilderConfiguration(py)lettersColor":{"name":"lettersColor","abstract":"

Colors that are used to draw image.

","parent_name":"LetterAvatarBuilderConfiguration"},"Classes/LetterAvatarBuilderConfiguration.html#/c:@M@LetterAvatarKit@objc(cs)LKLetterAvatarBuilderConfiguration(py)backgroundColors":{"name":"backgroundColors","abstract":"

Background colors of the image.

","parent_name":"LetterAvatarBuilderConfiguration"},"Classes/LetterAvatarBuilderConfiguration.html#/c:@M@LetterAvatarKit@objc(cs)LKLetterAvatarBuilderConfiguration(py)lettersFontAttributes":{"name":"lettersFontAttributes","abstract":"

Letters font attributes.

","parent_name":"LetterAvatarBuilderConfiguration"},"Classes/LetterAvatarBuilderConfiguration.html#/c:@M@LetterAvatarKit@objc(cs)LKLetterAvatarBuilderConfiguration(py)circle":{"name":"circle","abstract":"

Indicates whether to generate circle or square image.

","parent_name":"LetterAvatarBuilderConfiguration"},"Classes/LetterAvatarBuilderConfiguration.html#/c:@M@LetterAvatarKit@objc(cs)LKLetterAvatarBuilderConfiguration(py)borderWidth":{"name":"borderWidth","abstract":"

A border width of the image.

","parent_name":"LetterAvatarBuilderConfiguration"},"Classes/LetterAvatarBuilderConfiguration.html#/c:@M@LetterAvatarKit@objc(cs)LKLetterAvatarBuilderConfiguration(py)borderColor":{"name":"borderColor","abstract":"

A border color of the image.

","parent_name":"LetterAvatarBuilderConfiguration"},"Classes/LetterAvatarBuilderConfiguration.html#/c:@M@LetterAvatarKit@objc(cs)LKLetterAvatarBuilderConfiguration(py)isOpaque":{"name":"isOpaque","abstract":"

A Boolean flag indicating whether the avatar is opaque.

","parent_name":"LetterAvatarBuilderConfiguration"},"Classes/LetterAvatarBuilder.html#/c:@M@LetterAvatarKit@objc(cs)LKLetterAvatarBuilder(im)makeAvatarWithConfiguration:":{"name":"makeAvatar(with:)","abstract":"

Makes a letter-based avatar image by using a given configuration.

","parent_name":"LetterAvatarBuilder"},"Classes/LetterAvatarBuilder.html":{"name":"LetterAvatarBuilder","abstract":"

Uses for making letter-based avatar images.

"},"Classes/LetterAvatarBuilderConfiguration.html":{"name":"LetterAvatarBuilderConfiguration","abstract":"

Uses for configurating a LetterAvatarBuilder instance.

"},"Classes.html":{"name":"Classes","abstract":"

The following classes are available globally.

"},"Extensions.html":{"name":"Extensions","abstract":"

The following extensions are available globally.

"}} ================================================ FILE: docs/index.html ================================================ LetterAvatarKit Reference

LetterAvatarKit

LetterAvatarKit provides an UIImage extension for generating letter-based avatars/placeholders. There are a few images showing what you can achive by using this framework:

Requirements

  • iOS 8 and later
  • Swift 4.0 and later

Features

  • Ease of use
  • Flexible API
  • Builder pattern
  • Circle/Square/Bordered image
  • Flat UI colors

Installation

CocoaPods

LetterAvatarKit is available through CocoaPods. To install it, simply add the following line to your Podfile:

pod "LetterAvatarKit", "1.2.2" # Swift 5.0+
pod "LetterAvatarKit", "1.1.7" # Swift 4.2
pod "LetterAvatarKit", "1.1.5" # Swift 4.0

Carthage

Add this to Cartfile

github "vpeschenkov/LetterAvatarKit" == 1.2.2 # Swift 5.0+
github "vpeschenkov/LetterAvatarKit" == 1.1.7 # Swift 4.2
github "vpeschenkov/LetterAvatarKit" == 1.1.5 # Swift 4.0
$ carthage update

Usage

Swift

Using LetterAvatarMaker:

// Square avatar image
let avatarImage = LetterAvatarMaker()
    .setUsername("Letter Avatar")
    .build()
avatarImageView.image = avatarImage

// Circle avatar image with white border
let circleAvatarImage = LetterAvatarMaker()
    .setCircle(true)
    .setUsername("Letter Avatar")
    .setBorderWidth(1.0)
    .setBackgroundColors([ .red ])
    .build()
avatarImageView.image = circleAvatarImage

Using LetterAvatarMaker with closures:

let avatarImage = LetterAvatarMaker()
    .build { c in
        c.username = "Letter Avatar"
    }
avatarImageView.image = avatarImage

let avatarImage = LetterAvatarMaker()
    .build { c in
        c.isCircle = true
        c.username = "Letter Avatar"
        c.borderWidth = 1.0
        c.backgroundColors = [ .red ]
    }
avatarImageView.image = avatarImage

Using LetterAvatarBuilderConfiguration:

let configuration = LetterAvatarBuilderConfiguration()
configuration.username = "Letter Avatar"
avatarImageView.image = UIImage.makeLetterAvatar(withConfiguration: configuration)

Using UIImage extension:

avatarImageView.image = UIImage.makeLetterAvatar(withUsername: "Letter Avatar")

Objective-C

Using LKLetterAvatarBuilderCongiguration:

LKLetterAvatarBuilderCongiguration *configuration = [[LKLetterAvatarBuilderCongiguration alloc] init];
configuration.username = @"Letter Avatar";
self.avatarImageView.image = [UIImage lk_makeLetterAvatarWithConfiguration:configuration];

Using UIImage extension:

self.avatarImageView.image = [UIImage lk_makeLetterAvatarWithUsername:@"Letter Avatar"];

Customization

You can configure the following properties of LetterAvatarBuilderConfiguration:

/// The username.
open var username: String?
/// The size of an avatar image.
open var size: CGSize = CGSize(width: 80, height: 80)
/// The flag that indicates of using single only one letter, otherwise,
/// as much as wil be possible to obtain. But no more than 3 letters.
open var isSingleLettered: Bool = false
/// The letters font.
open var lettersFont: UIFont = UIFont.systemFont(ofSize: 16.0)
/// The letters colors
open var lettersColor: UIColor = LKUIColorByRGB(red: 236, green: 240, blue: 241)
/// The background colors of an image.
open var backgroundColors: [UIColor] = UIColor.colors
/// The letters font attributes.
open var lettersFontAttributes: [NSAttributedString.Key: Any]?
/// Indicates whether to generate circle or square image.
open var isCircle: Bool = false
/// The border width of the image.
open var borderWidth: CGFloat = 0.0
/// The border color of the image.
open var borderColor: UIColor = UIColor.white
/// A Boolean flag indicating whether the avatar is opaque.
open var opaque: Bool = false

Community

Questions, comments, issues, and pull requests are welcome!

Contacts

License

Distributed under the MIT license. See LICENSE for more information.

================================================ FILE: docs/js/jazzy.js ================================================ window.jazzy = {'docset': false} if (typeof window.dash != 'undefined') { document.documentElement.className += ' dash' window.jazzy.docset = true } if (navigator.userAgent.match(/xcode/i)) { document.documentElement.className += ' xcode' window.jazzy.docset = true } // On doc load, toggle the URL hash discussion if present $(document).ready(function() { if (!window.jazzy.docset) { var linkToHash = $('a[href="' + window.location.hash +'"]'); linkToHash.trigger("click"); } }); // On token click, toggle its discussion and animate token.marginLeft $(".token").click(function(event) { if (window.jazzy.docset) { return; } var link = $(this); var animationDuration = 300; var tokenOffset = "15px"; var original = link.css('marginLeft') == tokenOffset; link.animate({'margin-left':original ? "0px" : tokenOffset}, animationDuration); $content = link.parent().parent().next(); $content.slideToggle(animationDuration); // Keeps the document from jumping to the hash. var href = $(this).attr('href'); if (history.pushState) { history.pushState({}, '', href); } else { location.hash = href; } event.preventDefault(); }); // Dumb down quotes within code blocks that delimit strings instead of quotations // https://github.com/realm/jazzy/issues/714 $("code q").replaceWith(function () { return ["\"", $(this).contents(), "\""]; }); ================================================ FILE: docs/search.json ================================================ {"Extensions/UIImage.html#/c:@CM@LetterAvatarKit@@objc(cs)UIImage(cm)lk_makeLetterAvatarWithConfiguration:":{"name":"makeLetterAvatar(withConfiguration:)","abstract":"

Makes an letter-based avatar image using given configuration.

","parent_name":"UIImage"},"Extensions/UIImage.html#/c:@CM@LetterAvatarKit@@objc(cs)UIImage(cm)lk_makeLetterAvatarWithUsername:":{"name":"makeLetterAvatar(withUsername:)","abstract":"

Makes an letter-based avatar image using given username.

","parent_name":"UIImage"},"Extensions/UIImage.html#/c:@CM@LetterAvatarKit@@objc(cs)UIImage(cm)lk_makeLetterAvatarWithUsername:size:":{"name":"makeLetterAvatar(withUsername:size:)","abstract":"

Makes an letter-based avatar image using given username and size.

","parent_name":"UIImage"},"Extensions/UIColor.html#/s:So7UIColorC15LetterAvatarKitE8HEXColorO":{"name":"HEXColor","abstract":"

Colors from http://flatuicolors.com/

","parent_name":"UIColor"},"Extensions/UIColor.html":{"name":"UIColor"},"Extensions/UIImage.html":{"name":"UIImage"},"Classes/LetterAvatarBuilderConfiguration.html#/c:@M@LetterAvatarKit@objc(cs)LKLetterAvatarBuilderConfiguration(py)size":{"name":"size","abstract":"

A size of an avatar image.

","parent_name":"LetterAvatarBuilderConfiguration"},"Classes/LetterAvatarBuilderConfiguration.html#/c:@M@LetterAvatarKit@objc(cs)LKLetterAvatarBuilderConfiguration(py)username":{"name":"username","abstract":"

An username.

","parent_name":"LetterAvatarBuilderConfiguration"},"Classes/LetterAvatarBuilderConfiguration.html#/c:@M@LetterAvatarKit@objc(cs)LKLetterAvatarBuilderConfiguration(py)useSingleLetter":{"name":"useSingleLetter","abstract":"

A flag that indicates of using single only one letter, otherwise,","parent_name":"LetterAvatarBuilderConfiguration"},"Classes/LetterAvatarBuilderConfiguration.html#/c:@M@LetterAvatarKit@objc(cs)LKLetterAvatarBuilderConfiguration(py)lettersFont":{"name":"lettersFont","abstract":"

Letters font.

","parent_name":"LetterAvatarBuilderConfiguration"},"Classes/LetterAvatarBuilderConfiguration.html#/c:@M@LetterAvatarKit@objc(cs)LKLetterAvatarBuilderConfiguration(py)lettersColor":{"name":"lettersColor","abstract":"

Colors that are used to draw image.

","parent_name":"LetterAvatarBuilderConfiguration"},"Classes/LetterAvatarBuilderConfiguration.html#/c:@M@LetterAvatarKit@objc(cs)LKLetterAvatarBuilderConfiguration(py)backgroundColors":{"name":"backgroundColors","abstract":"

Background colors of the image.

","parent_name":"LetterAvatarBuilderConfiguration"},"Classes/LetterAvatarBuilderConfiguration.html#/c:@M@LetterAvatarKit@objc(cs)LKLetterAvatarBuilderConfiguration(py)lettersFontAttributes":{"name":"lettersFontAttributes","abstract":"

Letters font attributes.

","parent_name":"LetterAvatarBuilderConfiguration"},"Classes/LetterAvatarBuilderConfiguration.html#/c:@M@LetterAvatarKit@objc(cs)LKLetterAvatarBuilderConfiguration(py)circle":{"name":"circle","abstract":"

Indicates whether to generate circle or square image.

","parent_name":"LetterAvatarBuilderConfiguration"},"Classes/LetterAvatarBuilderConfiguration.html#/c:@M@LetterAvatarKit@objc(cs)LKLetterAvatarBuilderConfiguration(py)borderWidth":{"name":"borderWidth","abstract":"

A border width of the image.

","parent_name":"LetterAvatarBuilderConfiguration"},"Classes/LetterAvatarBuilderConfiguration.html#/c:@M@LetterAvatarKit@objc(cs)LKLetterAvatarBuilderConfiguration(py)borderColor":{"name":"borderColor","abstract":"

A border color of the image.

","parent_name":"LetterAvatarBuilderConfiguration"},"Classes/LetterAvatarBuilderConfiguration.html#/c:@M@LetterAvatarKit@objc(cs)LKLetterAvatarBuilderConfiguration(py)isOpaque":{"name":"isOpaque","abstract":"

A Boolean flag indicating whether the avatar is opaque.

","parent_name":"LetterAvatarBuilderConfiguration"},"Classes/LetterAvatarBuilder.html#/c:@M@LetterAvatarKit@objc(cs)LKLetterAvatarBuilder(im)makeAvatarWithConfiguration:":{"name":"makeAvatar(with:)","abstract":"

Makes a letter-based avatar image by using a given configuration.

","parent_name":"LetterAvatarBuilder"},"Classes/LetterAvatarBuilder.html":{"name":"LetterAvatarBuilder","abstract":"

Uses for making letter-based avatar images.

"},"Classes/LetterAvatarBuilderConfiguration.html":{"name":"LetterAvatarBuilderConfiguration","abstract":"

Uses for configurating a LetterAvatarBuilder instance.

"},"Classes.html":{"name":"Classes","abstract":"

The following classes are available globally.

"},"Extensions.html":{"name":"Extensions","abstract":"

The following extensions are available globally.

"}} ================================================ FILE: docs/undocumented.json ================================================ { "warnings": [ { "file": "/Users/vpeschenkov/Documents/git/LetterAvatarKit/LetterAvatarKit/Extensions/UIColor+LetterAvatarKit.swift", "line": 99, "symbol": "UIColor.colors", "symbol_kind": "source.lang.swift.decl.var.static", "warning": "undocumented" }, { "file": "/Users/vpeschenkov/Documents/git/LetterAvatarKit/LetterAvatarKit/LetterAvatarMaker.swift", "line": null, "symbol": "LetterAvatarMaker", "symbol_kind": "source.lang.swift.decl.extension", "warning": "undocumented" }, { "file": "/Users/vpeschenkov/Documents/git/LetterAvatarKit/LetterAvatarKit/LetterAvatarMaker.swift", "line": 29, "symbol": "LetterAvatarMaker", "symbol_kind": "source.lang.swift.decl.class", "warning": "undocumented" }, { "file": "/Users/vpeschenkov/Documents/git/LetterAvatarKit/LetterAvatarKit/LetterAvatarMakerExtendable.swift", "line": 29, "symbol": "LetterAvatarMakerExtendable", "symbol_kind": "source.lang.swift.decl.protocol", "warning": "undocumented" } ], "source_directory": "/Users/vpeschenkov/Documents/git/LetterAvatarKit" } ================================================ FILE: fastlane/Appfile ================================================ # app_identifier "[[APP_IDENTIFIER]]" # The bundle identifier of your app # apple_id "[[APPLE_ID]]" # Your Apple email address # For more information about the Appfile, see: # https://docs.fastlane.tools/advanced/#appfile ================================================ FILE: fastlane/Fastfile ================================================ # This file contains the fastlane.tools configuration # You can find the documentation at https://docs.fastlane.tools # # For a list of all available actions, check out # # https://docs.fastlane.tools/actions # # Uncomment the line if you want fastlane to automatically update itself # update_fastlane setup_travis default_platform(:ios) platform :ios do lane :test do swiftlint() scan( scheme: "LetterAvatarKit", clean: true ) end end ================================================ FILE: fastlane/README.md ================================================ fastlane documentation ================ # Installation Make sure you have the latest version of the Xcode command line tools installed: ``` xcode-select --install ``` Install _fastlane_ using ``` [sudo] gem install fastlane -NV ``` or alternatively using `brew cask install fastlane` # Available Actions ## iOS ### ios test ``` fastlane ios test ``` ---- This README.md is auto-generated and will be re-generated every time [fastlane](https://fastlane.tools) is run. More information about fastlane can be found on [fastlane.tools](https://fastlane.tools). The documentation of fastlane can be found on [docs.fastlane.tools](https://docs.fastlane.tools). ================================================ FILE: scripts/generate_docs.sh ================================================ #!/bin/sh jazzy \ -x USE_SWIFT_RESPONSE_FILE=NO \ --clean \ --author Victor Peschenkov \ --author_url hhttps://github.com/vpeschenkov \ --github_url https://github.com/vpeschenkov/LetterAvatarKit \ --include=/*/LetterAvatar*.*,/*/Extensions/UIImage* \ --skip-undocumented \ --output docs