├── .gitignore ├── .travis.yml ├── AttributedStringSugar.podspec ├── AttributedStringSugar.xcodeproj ├── project.pbxproj ├── project.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist └── xcshareddata │ └── xcschemes │ └── AttributedStringSugar.xcscheme ├── AttributedStringSugar ├── Assets │ └── .gitkeep ├── AttributedStringSugar.h ├── Classes │ ├── .gitkeep │ ├── AttributedStringSugar.swift │ └── Operator.swift └── Info.plist ├── Example ├── AttributedStringSugar.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ └── contents.xcworkspacedata │ └── xcshareddata │ │ └── xcschemes │ │ └── AttributedStringSugar-Example.xcscheme ├── AttributedStringSugar.xcworkspace │ ├── contents.xcworkspacedata │ └── xcshareddata │ │ └── IDEWorkspaceChecks.plist ├── AttributedStringSugar │ ├── AppDelegate.swift │ ├── Base.lproj │ │ ├── LaunchScreen.xib │ │ └── Main.storyboard │ ├── Images.xcassets │ │ └── AppIcon.appiconset │ │ │ └── Contents.json │ ├── Info.plist │ └── ViewController.swift ├── Podfile ├── Podfile.lock ├── Pods │ ├── Local Podspecs │ │ └── AttributedStringSugar.podspec.json │ ├── Manifest.lock │ ├── Pods.xcodeproj │ │ ├── project.pbxproj │ │ └── project.xcworkspace │ │ │ ├── contents.xcworkspacedata │ │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── Target Support Files │ │ ├── AttributedStringSugar │ │ ├── AttributedStringSugar-Info.plist │ │ ├── AttributedStringSugar-dummy.m │ │ ├── AttributedStringSugar-prefix.pch │ │ ├── AttributedStringSugar-umbrella.h │ │ ├── AttributedStringSugar.debug.xcconfig │ │ ├── AttributedStringSugar.modulemap │ │ └── AttributedStringSugar.release.xcconfig │ │ ├── Pods-AttributedStringSugar_Example │ │ ├── Pods-AttributedStringSugar_Example-Info.plist │ │ ├── Pods-AttributedStringSugar_Example-acknowledgements.markdown │ │ ├── Pods-AttributedStringSugar_Example-acknowledgements.plist │ │ ├── Pods-AttributedStringSugar_Example-dummy.m │ │ ├── Pods-AttributedStringSugar_Example-frameworks.sh │ │ ├── Pods-AttributedStringSugar_Example-umbrella.h │ │ ├── Pods-AttributedStringSugar_Example.debug.xcconfig │ │ ├── Pods-AttributedStringSugar_Example.modulemap │ │ └── Pods-AttributedStringSugar_Example.release.xcconfig │ │ └── Pods-AttributedStringSugar_Tests │ │ ├── Pods-AttributedStringSugar_Tests-Info.plist │ │ ├── Pods-AttributedStringSugar_Tests-acknowledgements.markdown │ │ ├── Pods-AttributedStringSugar_Tests-acknowledgements.plist │ │ ├── Pods-AttributedStringSugar_Tests-dummy.m │ │ ├── Pods-AttributedStringSugar_Tests-umbrella.h │ │ ├── Pods-AttributedStringSugar_Tests.debug.xcconfig │ │ ├── Pods-AttributedStringSugar_Tests.modulemap │ │ └── Pods-AttributedStringSugar_Tests.release.xcconfig └── Tests │ ├── Info.plist │ └── Tests.swift ├── LICENSE ├── README.md └── _Pods.xcodeproj /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## User settings 6 | xcuserdata/ 7 | 8 | ## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9) 9 | *.xcscmblueprint 10 | *.xccheckout 11 | 12 | ## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4) 13 | build/ 14 | DerivedData/ 15 | *.moved-aside 16 | *.pbxuser 17 | !default.pbxuser 18 | *.mode1v3 19 | !default.mode1v3 20 | *.mode2v3 21 | !default.mode2v3 22 | *.perspectivev3 23 | !default.perspectivev3 24 | 25 | ## Obj-C/Swift specific 26 | *.hmap 27 | 28 | ## App packaging 29 | *.ipa 30 | *.dSYM.zip 31 | *.dSYM 32 | 33 | ## Playgrounds 34 | timeline.xctimeline 35 | playground.xcworkspace 36 | 37 | # Swift Package Manager 38 | # 39 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 40 | # Packages/ 41 | # Package.pins 42 | # Package.resolved 43 | # *.xcodeproj 44 | # 45 | # Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata 46 | # hence it is not needed unless you have added a package configuration file to your project 47 | # .swiftpm 48 | 49 | .build/ 50 | 51 | # CocoaPods 52 | # 53 | # We recommend against adding the Pods directory to your .gitignore. However 54 | # you should judge for yourself, the pros and cons are mentioned at: 55 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 56 | # 57 | # Pods/ 58 | # 59 | # Add this line if you want to avoid checking in source code from the Xcode workspace 60 | # *.xcworkspace 61 | 62 | # Carthage 63 | # 64 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 65 | # Carthage/Checkouts 66 | 67 | Carthage/Build/ 68 | 69 | # Accio dependency management 70 | Dependencies/ 71 | .accio/ 72 | 73 | # fastlane 74 | # 75 | # It is recommended to not store the screenshots in the git repo. 76 | # Instead, use fastlane to re-generate the screenshots whenever they are needed. 77 | # For more information about the recommended setup visit: 78 | # https://docs.fastlane.tools/best-practices/source-control/#source-control 79 | 80 | fastlane/report.xml 81 | fastlane/Preview.html 82 | fastlane/screenshots/**/*.png 83 | fastlane/test_output 84 | 85 | # Code Injection 86 | # 87 | # After new code Injection tools there's a generated folder /iOSInjectionProject 88 | # https://github.com/johnno1962/injectionforxcode 89 | 90 | iOSInjectionProject/ 91 | -------------------------------------------------------------------------------- /.travis.yml: -------------------------------------------------------------------------------- 1 | # references: 2 | # * https://www.objc.io/issues/6-build-tools/travis-ci/ 3 | # * https://github.com/supermarin/xcpretty#usage 4 | 5 | osx_image: xcode7.3 6 | language: objective-c 7 | # cache: cocoapods 8 | # podfile: Example/Podfile 9 | # before_install: 10 | # - gem install cocoapods # Since Travis is not always on latest version 11 | # - pod install --project-directory=Example 12 | script: 13 | - set -o pipefail && xcodebuild test -enableCodeCoverage YES -workspace Example/AttributedStringSugar.xcworkspace -scheme AttributedStringSugar-Example -sdk iphonesimulator9.3 ONLY_ACTIVE_ARCH=NO | xcpretty 14 | - pod lib lint 15 | -------------------------------------------------------------------------------- /AttributedStringSugar.podspec: -------------------------------------------------------------------------------- 1 | # 2 | # Be sure to run `pod lib lint AttributedStringSugar.podspec' to ensure this is a 3 | # valid spec before submitting. 4 | # 5 | # Any lines starting with a # are optional, but their use is encouraged 6 | # To learn more about a Podspec see https://guides.cocoapods.org/syntax/podspec.html 7 | # 8 | 9 | Pod::Spec.new do |s| 10 | s.name = 'AttributedStringSugar' 11 | s.version = '1.0.5' 12 | s.swift_versions = '5.0' 13 | s.summary = 'NSAttributedString sugar using builder pattern.' 14 | 15 | # This description is used to generate tags and improve search results. 16 | # * Think: What does it do? Why did you write it? What is the focus? 17 | # * Try to keep it short, snappy and to the point. 18 | # * Write the description between the DESC delimiters below. 19 | # * Finally, don't worry about the indent, CocoaPods strips it! 20 | 21 | s.description = <<-DESC 22 | NSAttributedString sugar using builder pattern 23 | using like this 24 | ```swift 25 | let text = "Hello".attribute 26 | .systemFont(ofSize: 20, weight: .bold) 27 | .paragraphStyle(alignment: .center) 28 | ``` 29 | DESC 30 | 31 | s.homepage = 'https://github.com/ElonPark/AttributedStringSugar' 32 | s.screenshots = 'https://user-images.githubusercontent.com/13270453/77228119-7348bf00-6bc8-11ea-95c4-06c624ff8ca3.png' 33 | s.license = { :type => 'MIT', :file => 'LICENSE' } 34 | s.author = { 'Elon' => 'sungwoon.park92@gmail.com' } 35 | s.source = { :git => 'https://github.com/ElonPark/AttributedStringSugar.git', :tag => s.version.to_s } 36 | 37 | s.ios.deployment_target = '9.0' 38 | s.source_files = 'AttributedStringSugar/Classes/**/*' 39 | s.frameworks = 'UIKit' 40 | end 41 | -------------------------------------------------------------------------------- /AttributedStringSugar.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | DB5A5D442539BF9B004D07AC /* AttributedStringSugar.h in Headers */ = {isa = PBXBuildFile; fileRef = DB5A5D422539BF9B004D07AC /* AttributedStringSugar.h */; settings = {ATTRIBUTES = (Public, ); }; }; 11 | DB5A5D4C2539C044004D07AC /* Operator.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB5A5D4A2539C044004D07AC /* Operator.swift */; }; 12 | DB5A5D4D2539C044004D07AC /* AttributedStringSugar.swift in Sources */ = {isa = PBXBuildFile; fileRef = DB5A5D4B2539C044004D07AC /* AttributedStringSugar.swift */; }; 13 | /* End PBXBuildFile section */ 14 | 15 | /* Begin PBXFileReference section */ 16 | DB5A5D3F2539BF9B004D07AC /* AttributedStringSugar.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = AttributedStringSugar.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 17 | DB5A5D422539BF9B004D07AC /* AttributedStringSugar.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AttributedStringSugar.h; sourceTree = ""; }; 18 | DB5A5D432539BF9B004D07AC /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 19 | DB5A5D4A2539C044004D07AC /* Operator.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = Operator.swift; path = Classes/Operator.swift; sourceTree = ""; }; 20 | DB5A5D4B2539C044004D07AC /* AttributedStringSugar.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = AttributedStringSugar.swift; path = Classes/AttributedStringSugar.swift; sourceTree = ""; }; 21 | /* End PBXFileReference section */ 22 | 23 | /* Begin PBXFrameworksBuildPhase section */ 24 | DB5A5D3C2539BF9B004D07AC /* Frameworks */ = { 25 | isa = PBXFrameworksBuildPhase; 26 | buildActionMask = 2147483647; 27 | files = ( 28 | ); 29 | runOnlyForDeploymentPostprocessing = 0; 30 | }; 31 | /* End PBXFrameworksBuildPhase section */ 32 | 33 | /* Begin PBXGroup section */ 34 | DB5A5D352539BF9B004D07AC = { 35 | isa = PBXGroup; 36 | children = ( 37 | DB5A5D412539BF9B004D07AC /* AttributedStringSugar */, 38 | DB5A5D402539BF9B004D07AC /* Products */, 39 | ); 40 | sourceTree = ""; 41 | }; 42 | DB5A5D402539BF9B004D07AC /* Products */ = { 43 | isa = PBXGroup; 44 | children = ( 45 | DB5A5D3F2539BF9B004D07AC /* AttributedStringSugar.framework */, 46 | ); 47 | name = Products; 48 | sourceTree = ""; 49 | }; 50 | DB5A5D412539BF9B004D07AC /* AttributedStringSugar */ = { 51 | isa = PBXGroup; 52 | children = ( 53 | DB5A5D4B2539C044004D07AC /* AttributedStringSugar.swift */, 54 | DB5A5D4A2539C044004D07AC /* Operator.swift */, 55 | DB5A5D422539BF9B004D07AC /* AttributedStringSugar.h */, 56 | DB5A5D432539BF9B004D07AC /* Info.plist */, 57 | ); 58 | path = AttributedStringSugar; 59 | sourceTree = ""; 60 | }; 61 | /* End PBXGroup section */ 62 | 63 | /* Begin PBXHeadersBuildPhase section */ 64 | DB5A5D3A2539BF9B004D07AC /* Headers */ = { 65 | isa = PBXHeadersBuildPhase; 66 | buildActionMask = 2147483647; 67 | files = ( 68 | DB5A5D442539BF9B004D07AC /* AttributedStringSugar.h in Headers */, 69 | ); 70 | runOnlyForDeploymentPostprocessing = 0; 71 | }; 72 | /* End PBXHeadersBuildPhase section */ 73 | 74 | /* Begin PBXNativeTarget section */ 75 | DB5A5D3E2539BF9B004D07AC /* AttributedStringSugar */ = { 76 | isa = PBXNativeTarget; 77 | buildConfigurationList = DB5A5D472539BF9B004D07AC /* Build configuration list for PBXNativeTarget "AttributedStringSugar" */; 78 | buildPhases = ( 79 | DB5A5D3A2539BF9B004D07AC /* Headers */, 80 | DB5A5D3B2539BF9B004D07AC /* Sources */, 81 | DB5A5D3C2539BF9B004D07AC /* Frameworks */, 82 | DB5A5D3D2539BF9B004D07AC /* Resources */, 83 | ); 84 | buildRules = ( 85 | ); 86 | dependencies = ( 87 | ); 88 | name = AttributedStringSugar; 89 | productName = AttributedStringSugar; 90 | productReference = DB5A5D3F2539BF9B004D07AC /* AttributedStringSugar.framework */; 91 | productType = "com.apple.product-type.framework"; 92 | }; 93 | /* End PBXNativeTarget section */ 94 | 95 | /* Begin PBXProject section */ 96 | DB5A5D362539BF9B004D07AC /* Project object */ = { 97 | isa = PBXProject; 98 | attributes = { 99 | LastUpgradeCheck = 1170; 100 | ORGANIZATIONNAME = ElonPark; 101 | TargetAttributes = { 102 | DB5A5D3E2539BF9B004D07AC = { 103 | CreatedOnToolsVersion = 11.7; 104 | LastSwiftMigration = 1170; 105 | }; 106 | }; 107 | }; 108 | buildConfigurationList = DB5A5D392539BF9B004D07AC /* Build configuration list for PBXProject "AttributedStringSugar" */; 109 | compatibilityVersion = "Xcode 9.3"; 110 | developmentRegion = en; 111 | hasScannedForEncodings = 0; 112 | knownRegions = ( 113 | en, 114 | Base, 115 | ); 116 | mainGroup = DB5A5D352539BF9B004D07AC; 117 | productRefGroup = DB5A5D402539BF9B004D07AC /* Products */; 118 | projectDirPath = ""; 119 | projectRoot = ""; 120 | targets = ( 121 | DB5A5D3E2539BF9B004D07AC /* AttributedStringSugar */, 122 | ); 123 | }; 124 | /* End PBXProject section */ 125 | 126 | /* Begin PBXResourcesBuildPhase section */ 127 | DB5A5D3D2539BF9B004D07AC /* Resources */ = { 128 | isa = PBXResourcesBuildPhase; 129 | buildActionMask = 2147483647; 130 | files = ( 131 | ); 132 | runOnlyForDeploymentPostprocessing = 0; 133 | }; 134 | /* End PBXResourcesBuildPhase section */ 135 | 136 | /* Begin PBXSourcesBuildPhase section */ 137 | DB5A5D3B2539BF9B004D07AC /* Sources */ = { 138 | isa = PBXSourcesBuildPhase; 139 | buildActionMask = 2147483647; 140 | files = ( 141 | DB5A5D4C2539C044004D07AC /* Operator.swift in Sources */, 142 | DB5A5D4D2539C044004D07AC /* AttributedStringSugar.swift in Sources */, 143 | ); 144 | runOnlyForDeploymentPostprocessing = 0; 145 | }; 146 | /* End PBXSourcesBuildPhase section */ 147 | 148 | /* Begin XCBuildConfiguration section */ 149 | DB5A5D452539BF9B004D07AC /* Debug */ = { 150 | isa = XCBuildConfiguration; 151 | buildSettings = { 152 | ALWAYS_SEARCH_USER_PATHS = NO; 153 | CLANG_ANALYZER_NONNULL = YES; 154 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 155 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 156 | CLANG_CXX_LIBRARY = "libc++"; 157 | CLANG_ENABLE_MODULES = YES; 158 | CLANG_ENABLE_OBJC_ARC = YES; 159 | CLANG_ENABLE_OBJC_WEAK = YES; 160 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 161 | CLANG_WARN_BOOL_CONVERSION = YES; 162 | CLANG_WARN_COMMA = YES; 163 | CLANG_WARN_CONSTANT_CONVERSION = YES; 164 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 165 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 166 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 167 | CLANG_WARN_EMPTY_BODY = YES; 168 | CLANG_WARN_ENUM_CONVERSION = YES; 169 | CLANG_WARN_INFINITE_RECURSION = YES; 170 | CLANG_WARN_INT_CONVERSION = YES; 171 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 172 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 173 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 174 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 175 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 176 | CLANG_WARN_STRICT_PROTOTYPES = YES; 177 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 178 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 179 | CLANG_WARN_UNREACHABLE_CODE = YES; 180 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 181 | COPY_PHASE_STRIP = NO; 182 | CURRENT_PROJECT_VERSION = 1; 183 | DEBUG_INFORMATION_FORMAT = dwarf; 184 | ENABLE_STRICT_OBJC_MSGSEND = YES; 185 | ENABLE_TESTABILITY = YES; 186 | GCC_C_LANGUAGE_STANDARD = gnu11; 187 | GCC_DYNAMIC_NO_PIC = NO; 188 | GCC_NO_COMMON_BLOCKS = YES; 189 | GCC_OPTIMIZATION_LEVEL = 0; 190 | GCC_PREPROCESSOR_DEFINITIONS = ( 191 | "DEBUG=1", 192 | "$(inherited)", 193 | ); 194 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 195 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 196 | GCC_WARN_UNDECLARED_SELECTOR = YES; 197 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 198 | GCC_WARN_UNUSED_FUNCTION = YES; 199 | GCC_WARN_UNUSED_VARIABLE = YES; 200 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 201 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 202 | MTL_FAST_MATH = YES; 203 | ONLY_ACTIVE_ARCH = YES; 204 | SDKROOT = iphoneos; 205 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 206 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 207 | VERSIONING_SYSTEM = "apple-generic"; 208 | VERSION_INFO_PREFIX = ""; 209 | }; 210 | name = Debug; 211 | }; 212 | DB5A5D462539BF9B004D07AC /* Release */ = { 213 | isa = XCBuildConfiguration; 214 | buildSettings = { 215 | ALWAYS_SEARCH_USER_PATHS = NO; 216 | CLANG_ANALYZER_NONNULL = YES; 217 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 218 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 219 | CLANG_CXX_LIBRARY = "libc++"; 220 | CLANG_ENABLE_MODULES = YES; 221 | CLANG_ENABLE_OBJC_ARC = YES; 222 | CLANG_ENABLE_OBJC_WEAK = YES; 223 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 224 | CLANG_WARN_BOOL_CONVERSION = YES; 225 | CLANG_WARN_COMMA = YES; 226 | CLANG_WARN_CONSTANT_CONVERSION = YES; 227 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 228 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 229 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 230 | CLANG_WARN_EMPTY_BODY = YES; 231 | CLANG_WARN_ENUM_CONVERSION = YES; 232 | CLANG_WARN_INFINITE_RECURSION = YES; 233 | CLANG_WARN_INT_CONVERSION = YES; 234 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 235 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 236 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 237 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 238 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 239 | CLANG_WARN_STRICT_PROTOTYPES = YES; 240 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 241 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 242 | CLANG_WARN_UNREACHABLE_CODE = YES; 243 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 244 | COPY_PHASE_STRIP = NO; 245 | CURRENT_PROJECT_VERSION = 1; 246 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 247 | ENABLE_NS_ASSERTIONS = NO; 248 | ENABLE_STRICT_OBJC_MSGSEND = YES; 249 | GCC_C_LANGUAGE_STANDARD = gnu11; 250 | GCC_NO_COMMON_BLOCKS = YES; 251 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 252 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 253 | GCC_WARN_UNDECLARED_SELECTOR = YES; 254 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 255 | GCC_WARN_UNUSED_FUNCTION = YES; 256 | GCC_WARN_UNUSED_VARIABLE = YES; 257 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 258 | MTL_ENABLE_DEBUG_INFO = NO; 259 | MTL_FAST_MATH = YES; 260 | SDKROOT = iphoneos; 261 | SWIFT_COMPILATION_MODE = wholemodule; 262 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 263 | VALIDATE_PRODUCT = YES; 264 | VERSIONING_SYSTEM = "apple-generic"; 265 | VERSION_INFO_PREFIX = ""; 266 | }; 267 | name = Release; 268 | }; 269 | DB5A5D482539BF9B004D07AC /* Debug */ = { 270 | isa = XCBuildConfiguration; 271 | buildSettings = { 272 | CLANG_ENABLE_MODULES = YES; 273 | CODE_SIGN_STYLE = Automatic; 274 | DEFINES_MODULE = YES; 275 | DEVELOPMENT_TEAM = M77W68G9P5; 276 | DYLIB_COMPATIBILITY_VERSION = 1; 277 | DYLIB_CURRENT_VERSION = 1; 278 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 279 | INFOPLIST_FILE = AttributedStringSugar/Info.plist; 280 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 281 | LD_RUNPATH_SEARCH_PATHS = ( 282 | "$(inherited)", 283 | "@executable_path/Frameworks", 284 | "@loader_path/Frameworks", 285 | ); 286 | MARKETING_VERSION = 1.0.5; 287 | PRODUCT_BUNDLE_IDENTIFIER = com.elonparks.AttributedStringSugar; 288 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 289 | SKIP_INSTALL = YES; 290 | SUPPORTS_MACCATALYST = NO; 291 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 292 | SWIFT_VERSION = 5.0; 293 | TARGETED_DEVICE_FAMILY = "1,2"; 294 | }; 295 | name = Debug; 296 | }; 297 | DB5A5D492539BF9B004D07AC /* Release */ = { 298 | isa = XCBuildConfiguration; 299 | buildSettings = { 300 | CLANG_ENABLE_MODULES = YES; 301 | CODE_SIGN_STYLE = Automatic; 302 | DEFINES_MODULE = YES; 303 | DEVELOPMENT_TEAM = M77W68G9P5; 304 | DYLIB_COMPATIBILITY_VERSION = 1; 305 | DYLIB_CURRENT_VERSION = 1; 306 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 307 | INFOPLIST_FILE = AttributedStringSugar/Info.plist; 308 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 309 | LD_RUNPATH_SEARCH_PATHS = ( 310 | "$(inherited)", 311 | "@executable_path/Frameworks", 312 | "@loader_path/Frameworks", 313 | ); 314 | MARKETING_VERSION = 1.0.5; 315 | PRODUCT_BUNDLE_IDENTIFIER = com.elonparks.AttributedStringSugar; 316 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 317 | SKIP_INSTALL = YES; 318 | SUPPORTS_MACCATALYST = NO; 319 | SWIFT_VERSION = 5.0; 320 | TARGETED_DEVICE_FAMILY = "1,2"; 321 | }; 322 | name = Release; 323 | }; 324 | /* End XCBuildConfiguration section */ 325 | 326 | /* Begin XCConfigurationList section */ 327 | DB5A5D392539BF9B004D07AC /* Build configuration list for PBXProject "AttributedStringSugar" */ = { 328 | isa = XCConfigurationList; 329 | buildConfigurations = ( 330 | DB5A5D452539BF9B004D07AC /* Debug */, 331 | DB5A5D462539BF9B004D07AC /* Release */, 332 | ); 333 | defaultConfigurationIsVisible = 0; 334 | defaultConfigurationName = Release; 335 | }; 336 | DB5A5D472539BF9B004D07AC /* Build configuration list for PBXNativeTarget "AttributedStringSugar" */ = { 337 | isa = XCConfigurationList; 338 | buildConfigurations = ( 339 | DB5A5D482539BF9B004D07AC /* Debug */, 340 | DB5A5D492539BF9B004D07AC /* Release */, 341 | ); 342 | defaultConfigurationIsVisible = 0; 343 | defaultConfigurationName = Release; 344 | }; 345 | /* End XCConfigurationList section */ 346 | }; 347 | rootObject = DB5A5D362539BF9B004D07AC /* Project object */; 348 | } 349 | -------------------------------------------------------------------------------- /AttributedStringSugar.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /AttributedStringSugar.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /AttributedStringSugar.xcodeproj/xcshareddata/xcschemes/AttributedStringSugar.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 50 | 51 | 57 | 58 | 59 | 60 | 62 | 63 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /AttributedStringSugar/Assets/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElonPark/AttributedStringSugar/6f4498c9285bcaed85561a16aca9f6d484a5ec82/AttributedStringSugar/Assets/.gitkeep -------------------------------------------------------------------------------- /AttributedStringSugar/AttributedStringSugar.h: -------------------------------------------------------------------------------- 1 | // 2 | // AttributedStringSugar.h 3 | // AttributedStringSugar 4 | // 5 | // Created by Elon on 2020/10/16. 6 | // Copyright © 2020 ElonPark. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for AttributedStringSugar. 12 | FOUNDATION_EXPORT double AttributedStringSugarVersionNumber; 13 | 14 | //! Project version string for AttributedStringSugar. 15 | FOUNDATION_EXPORT const unsigned char AttributedStringSugarVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /AttributedStringSugar/Classes/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ElonPark/AttributedStringSugar/6f4498c9285bcaed85561a16aca9f6d484a5ec82/AttributedStringSugar/Classes/.gitkeep -------------------------------------------------------------------------------- /AttributedStringSugar/Classes/AttributedStringSugar.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AttributedStringSugar.swift 3 | // AttributedStringSugar 4 | // 5 | // Created by Elon on 2020/03/17. 6 | // 7 | 8 | import UIKit 9 | 10 | @available(iOS 9.0, *) 11 | public extension String { 12 | var attribute: NSMutableAttributedString { 13 | return NSMutableAttributedString(string: self) 14 | } 15 | 16 | var attributedFromHTML: NSMutableAttributedString { 17 | return NSMutableAttributedString(html: self) ?? NSMutableAttributedString(string: self) 18 | } 19 | } 20 | 21 | @available(iOS 9.0, *) 22 | public extension NSMutableAttributedString { 23 | internal convenience init?(html: String) { 24 | guard let data = html.data(using: String.Encoding.utf16, allowLossyConversion: false) else { 25 | return nil 26 | } 27 | 28 | do { 29 | let attributedString = try NSMutableAttributedString( 30 | data: data, 31 | options: [ 32 | .documentType: NSAttributedString.DocumentType.html, 33 | .characterEncoding: String.Encoding.utf8.rawValue 34 | ], 35 | documentAttributes: nil 36 | ) 37 | 38 | self.init(attributedString: attributedString) 39 | } catch { 40 | print(error.localizedDescription) 41 | return nil 42 | } 43 | } 44 | 45 | /** 46 | Adds an attribute with the given name and value to the characters in the specified range. 47 | 48 | You may assign any name/value pair you wish to a range of characters. Raises an invalidArgumentException 49 | if name or value is nil and an rangeException 50 | if any part of aRange lies beyond the end of the receiver’s characters. 51 | 52 | - Parameters: 53 | - key: A string specifying the attribute name. 54 | Attribute keys can be supplied by another framework or can be custom ones you define. 55 | For information about the system-supplied attribute keys, see the Constants section in NSAttributedString. 56 | - value: The attribute value associated with name. 57 | - range: Range to apply. The value `nil` means full range. 58 | */ 59 | @discardableResult 60 | func addAttribute(_ key: NSAttributedString.Key, value: Any, range: NSRange? = nil) -> NSMutableAttributedString { 61 | if let range = range { 62 | self.addAttribute(key, value: value, range: range) 63 | } else { 64 | let range = NSRange(location: 0, length: length) 65 | self.addAttribute(key, value: value, range: range) 66 | } 67 | 68 | return self 69 | } 70 | 71 | /** 72 | Adds the given collection of attributes to the characters in the specified range. 73 | 74 | You may assign any name/value pair you wish to a range of characters. 75 | Raises an invalidArgumentException if attributes is nil and an rangeException 76 | if any part of aRange lies beyond the end of the receiver’s characters. 77 | 78 | - Parameters: 79 | - attrs: A dictionary containing the attributes to add. 80 | Attribute keys can be supplied by another framework or can be custom ones you define. 81 | For information about the system-supplied attribute keys, see the Constants section in NSAttributedString. 82 | - range: Range to apply. The value `nil` means full range. 83 | */ 84 | @discardableResult 85 | func addAttributes(_ attrs: [NSAttributedString.Key : Any], range: NSRange? = nil) -> NSMutableAttributedString { 86 | if let range = range { 87 | self.addAttributes(attrs, range: range) 88 | } else { 89 | let range = NSRange(location: 0, length: length) 90 | self.addAttributes(attrs, range: range) 91 | } 92 | 93 | return self 94 | } 95 | 96 | /** 97 | The value of this attribute is a UIFont object. Use this attribute to change the font for a range of text. 98 | If you do not specify this attribute, the string uses a 12-point Helvetica(Neue) font by default. 99 | 100 | - Parameters: 101 | - font: string uses a 12-point Helvetica(Neue) font by default. 102 | - range: Range to apply. The value `nil` means full range. 103 | */ 104 | func font(_ font: UIFont, range: NSRange? = nil) -> NSMutableAttributedString { 105 | return self.addAttribute(.font, value: font, range: range) 106 | } 107 | 108 | /** 109 | The value of this attribute is a UIFont object. Use this attribute to change the font for a range of text. 110 | If you do not specify this attribute, return nil 111 | 112 | - Parameters: 113 | - name: costom font name. `UIFont(name: "String")` 114 | - size: font size 115 | - range: Range to apply. The value `nil` means full range. 116 | */ 117 | func customFont(name: String, ofSize size: CGFloat, range: NSRange? = nil) -> NSMutableAttributedString? { 118 | guard let font = UIFont(name: name, size: size) else { 119 | print("\(name) font does not exist") 120 | return nil 121 | } 122 | 123 | return self.font(font, range: range) 124 | } 125 | 126 | /** 127 | font object used for standard interface items in the specified size and weight. 128 | 129 | - Parameters: 130 | - size: The size (in points) to which the font is scaled. This value must be greater than 0.0. 131 | - weight: The weight of the font, specified as a font weight constant. 132 | For a list of possible values, see "Font Weights” in UIFontDescriptor. 133 | Avoid passing an arbitrary floating-point number for weight, 134 | because a font might not include a variant for every weight. 135 | 136 | - range: Range to apply. The value `nil` means full range. 137 | */ 138 | func systemFont( 139 | ofSize size: CGFloat, 140 | weight: UIFont.Weight = .regular, 141 | range: NSRange? = nil 142 | ) -> NSMutableAttributedString { 143 | return self.font(UIFont.systemFont(ofSize: size, weight: weight), range: range) 144 | } 145 | 146 | /** 147 | Append String 148 | 149 | - Parameters: 150 | - string: input string 151 | - makeAttribute: make attribute to input string 152 | - input: input string 153 | 154 | - Example 155 | ```swift 156 | "Hello, ".attribute 157 | .systemFont(ofSize: 30, weight: .bold) 158 | .append(string: "World!", makeAttribute: { 159 | $0.attribute 160 | .systemFont(ofSize: 25, weight: .light) 161 | .foreground(color: .blue) 162 | .background(color: .gray) 163 | }) 164 | ``` 165 | */ 166 | func append( 167 | string: String, 168 | makeAttribute: (_ input: String) -> NSMutableAttributedString 169 | ) -> NSMutableAttributedString { 170 | self.append(makeAttribute(string)) 171 | return self 172 | } 173 | 174 | /** 175 | The value of this attribute is a UIColor object. 176 | Use this attribute to specify the color of the text during rendering. 177 | If you do not specify this attribute, the text is rendered in black. 178 | 179 | - Parameters: 180 | - color: specify the color of the text during rendering. 181 | - range: Range to apply. The value `nil` means full range. 182 | */ 183 | func foreground(color: UIColor, range: NSRange? = nil) -> NSMutableAttributedString { 184 | return self.addAttribute(.foregroundColor, value: color, range: range) 185 | } 186 | 187 | /** 188 | The value of this attribute is a UIColor object. 189 | Use this attribute to specify the color of the background area behind the text. 190 | If you do not specify this attribute, no background color is drawn. 191 | 192 | - Parameters: 193 | - color: specify the color of the background area behind the text. 194 | - range: Range to apply. The value `nil` means full range. 195 | */ 196 | func background(color: UIColor, range: NSRange? = nil) -> NSMutableAttributedString { 197 | return self.addAttribute(.backgroundColor, value: color, range: range) 198 | } 199 | 200 | /** 201 | The value of this attribute is an NSParagraphStyle object. 202 | Use this attribute to apply multiple attributes to a range of text. 203 | If you do not specify this attribute, the string uses the default paragraph attributes, 204 | as returned by the default method of NSParagraphStyle. 205 | 206 | - Parameters: 207 | - lineSpacing: The distance in points between the bottom of one line fragment and the top of the next. 208 | This value is always nonnegative. This value is included in the line fragment heights in the layout manager. 209 | 210 | - minimumLineHeight: The receiver’s minimum height. 211 | This property contains the minimum height in points that any line in the receiver will occupy, regardless of the font size or size of any attached graphic. This value must be nonnegative. 212 | 213 | - maximumLineHeight: The receiver’s maximum line height. 214 | This property contains the maximum height in points that any line in the receiver will occupy, regardless of the font size or size of any attached graphic. This value is always nonnegative. The default value is 0. 215 | 216 | Glyphs and graphics exceeding this height will overlap neighboring lines; however, a maximum height of 0 implies no line height limit. Although this limit applies to the line itself, line spacing adds extra space between adjacent lines. 217 | 218 | - lineHeightMultiple: The line height multiple. 219 | The natural line height of the receiver is multiplied by this factor (if positive) before being constrained by minimum and maximum line height. The default value of this property is 0.0. 220 | 221 | - alignment: The text alignment of the receiver. 222 | Natural text alignment is realized as left or right alignment depending on the line sweep direction of the 223 | first script contained in the paragraph. For a list of alignment constants, see the “Constants” section of 224 | NSString UIKit Additions Reference. 225 | 226 | - lineBreakMode: The mode that should be used to break lines in the receiver. 227 | This property contains the line break mode to be used laying out the paragraph’s text. 228 | For a list of line break constants, see the “Constants” section of NSParagraphStyle. 229 | 230 | - firstLineHeadIndent: The indentation of the first line of the receiver. 231 | This property contains the distance (in points) from the leading margin of a text container to the beginning of the paragraph’s first line. This value is always nonnegative. 232 | 233 | - headIndent: The indentation of the receiver’s lines other than the first. 234 | This property contains the distance (in points) from the leading margin of a text container to the beginning of lines other than the first. This value is always nonnegative. 235 | 236 | - tailIndent: The indentation of the receiver’s lines other than the first. 237 | If positive, this value is the distance from the leading margin (for example, the left margin in left-to-right text). If 0 or negative, it’s the distance from the trailing margin. 238 | 239 | For example, a paragraph style designed to fit exactly in a 2-inch wide container has a head indent of 0.0 and a tail indent of 0.0. One designed to fit with a quarter-inch margin has a head indent of 0.25 and a tail indent of –0.25. 240 | 241 | - paragraphSpacingBefore: The distance between the paragraph’s top and the beginning of its text content. 242 | This property contains the space (measured in points) between the paragraph’s top and the beginning of its text content. The default value of this property is 0.0. 243 | 244 | - paragraphSpacing: The space after the end of the paragraph. 245 | This property contains the space (measured in points) added at the end of the paragraph to separate it from the following paragraph. This value must be nonnegative. The space between paragraphs is determined by adding the previous paragraph’s paragraphSpacing and the current paragraph’s paragraphSpacingBefore. 246 | 247 | - baseWritingDirection: The base writing direction for the receiver. 248 | If you specify NSWritingDirectionNaturalDirection, the receiver resolves the writing direction to either NSWritingDirectionLeftToRight or NSWritingDirectionRightToLeft, depending on the direction for the user’s language preference setting. 249 | 250 | - range: Range to apply. The value `nil` means full range. 251 | */ 252 | func paragraphStyle( 253 | lineSpacing: CGFloat? = nil, 254 | minimumLineHeight: CGFloat? = nil, 255 | maximumLineHeight: CGFloat? = nil, 256 | lineHeightMultiple: CGFloat? = nil, 257 | alignment: NSTextAlignment? = nil, 258 | lineBreakMode: NSLineBreakMode? = nil, 259 | firstLineHeadIndent: CGFloat? = nil, 260 | headIndent: CGFloat? = nil, 261 | tailIndent: CGFloat? = nil, 262 | paragraphSpacingBefore: CGFloat? = nil, 263 | paragraphSpacing: CGFloat? = nil, 264 | baseWritingDirection: NSWritingDirection? = nil, 265 | range: NSRange? = nil 266 | ) -> NSMutableAttributedString { 267 | let paragraphStyle = NSMutableParagraphStyle() 268 | 269 | if let lineSpacing = lineSpacing { 270 | paragraphStyle.lineSpacing = lineSpacing 271 | } 272 | if let minimumLineHeight = minimumLineHeight { 273 | paragraphStyle.minimumLineHeight = minimumLineHeight 274 | } 275 | if let maximumLineHeight = maximumLineHeight { 276 | paragraphStyle.maximumLineHeight = maximumLineHeight 277 | } 278 | if let lineHeightMultiple = lineHeightMultiple { 279 | paragraphStyle.lineHeightMultiple = lineHeightMultiple 280 | } 281 | if let alignment = alignment { 282 | paragraphStyle.alignment = alignment 283 | } 284 | if let lineBreakMode = lineBreakMode { 285 | paragraphStyle.lineBreakMode = lineBreakMode 286 | } 287 | if let firstLineHeadIndent = firstLineHeadIndent { 288 | paragraphStyle.firstLineHeadIndent = firstLineHeadIndent 289 | } 290 | if let headIndent = headIndent { 291 | paragraphStyle.headIndent = headIndent 292 | } 293 | if let tailIndent = tailIndent { 294 | paragraphStyle.tailIndent = tailIndent 295 | } 296 | if let paragraphSpacingBefore = paragraphSpacingBefore { 297 | paragraphStyle.paragraphSpacingBefore = paragraphSpacingBefore 298 | } 299 | if let paragraphSpacing = paragraphSpacing { 300 | paragraphStyle.paragraphSpacing = paragraphSpacing 301 | } 302 | if let baseWritingDirection = baseWritingDirection { 303 | paragraphStyle.baseWritingDirection = baseWritingDirection 304 | } 305 | 306 | return self.addAttribute(.paragraphStyle, value: paragraphStyle, range: range) 307 | } 308 | 309 | /** 310 | The value of this attribute is an NSNumber object containing an integer. 311 | This value indicates whether the text is underlined and corresponds to one of the constants described in 312 | NSUnderlineStyle. 313 | The default value for this attribute is styleNone. 314 | 315 | - Parameters: 316 | - style: The default value for this attribute is styleNone. 317 | 318 | - color: The value of this attribute is a UIColor object. The default value is nil, indicating same as foreground color. 319 | 320 | - range: Range to apply. The value `nil` means full range. 321 | */ 322 | func underline(style: NSUnderlineStyle, color: UIColor? = nil, range: NSRange? = nil) -> NSMutableAttributedString { 323 | var attributes: [NSAttributedString.Key: Any] = [ 324 | .underlineStyle: style.rawValue 325 | ] 326 | 327 | if let color = color { 328 | attributes[.underlineColor] = color 329 | } 330 | 331 | return self.addAttributes(attributes, range: range) 332 | } 333 | 334 | /** 335 | The value of this attribute is an NSNumber object containing an integer. 336 | This value indicates whether the text has a line through it and corresponds to one of the constants described in 337 | NSUnderlineStyle. The default value for this attribute is styleNone. 338 | 339 | - Parameters: 340 | - style: The default value for this attribute is styleNone. 341 | 342 | - color: The value of this attribute is a UIColor object. The default value is nil, 343 | indicating same as foreground color. 344 | 345 | - range: Range to apply. The value `nil` means full range. 346 | */ 347 | func strikeThrough( 348 | style: NSUnderlineStyle, 349 | color: UIColor? = nil, 350 | range: NSRange? = nil 351 | ) -> NSMutableAttributedString { 352 | var attributes: [NSAttributedString.Key: Any] = [ 353 | .strikethroughStyle: style.rawValue 354 | ] 355 | 356 | if let color = color { 357 | attributes[.strikethroughColor] = color 358 | } 359 | 360 | return self.addAttributes(attributes, range: range) 361 | } 362 | 363 | /** 364 | stroke and fill the text. 365 | 366 | - Parameters: 367 | - width: The value of this attribute is an NSNumber object containing a floating-point value. 368 | This value represents the amount to change the stroke width and is specified as a percentage of the font point size. 369 | Specify 0 (the default) for no additional changes. 370 | Specify positive values to change the stroke width alone. 371 | Specify negative values to stroke and fill the text. For example, a typical value for outlined text would be 3.0. 372 | 373 | - color: The value of this parameter is a UIColor object. 374 | If it is not defined (which is the case by default), it is assumed to be the same as the value of foregroundColor; 375 | otherwise, it describes the outline color. 376 | For more details, see Drawing attributed strings that are both filled and stroked. 377 | 378 | - range: Range to apply. The value `nil` means full range. 379 | */ 380 | func stroke(width: Double, color: UIColor? = nil, range: NSRange? = nil) -> NSMutableAttributedString { 381 | var attributes: [NSAttributedString.Key: Any] = [ 382 | .strokeWidth: width 383 | ] 384 | 385 | if let color = color { 386 | attributes[.strokeColor] = color 387 | } 388 | 389 | return self.addAttributes(attributes, range: range) 390 | } 391 | 392 | /** 393 | The value of this attribute is an NSNumber object containing a floating-point value. 394 | This value specifies the number of points by which to adjust kern-pair characters. 395 | Kerning prevents unwanted space from occurring between specific characters and depends on the font. 396 | The value 0 means kerning is disabled. The default value for this attribute is 0. 397 | 398 | - Parameters: 399 | - value: The default value for this attribute is 0 400 | - range: Range to apply. The value `nil` means full range. 401 | */ 402 | func kerning(_ value: Double, range: NSRange? = nil) -> NSMutableAttributedString { 403 | return self.addAttribute(.kern, value: value, range: range) 404 | } 405 | 406 | /** 407 | The value of this attribute is an NSShadow object. 408 | 409 | - Parameters: 410 | - offset: The offset values of the shadow. 411 | This property contains the horizontal and vertical offset values, 412 | specified using the width and height fields of the CGSize data type. 413 | These offsets are measured using the default user coordinate space and are not affected by custom transformations. 414 | This means that positive values always extend down and to the right from the user's perspective. 415 | 416 | - color: The color of the shadow. 417 | The default shadow color is black with an alpha of 1/3. If you set this property to nil, 418 | the shadow is not drawn. The color you specify must be convertible to an RGBA color and may contain alpha 419 | information. 420 | 421 | - blurRadius: The blur radius of the shadow. 422 | This property contains the blur radius, as measured in the default user coordinate space. 423 | A value of 0 indicates no blur, while larger values produce correspondingly larger blurring. 424 | This value must not be negative. The default value is 0. 425 | 426 | - range: Range to apply. The value `nil` means full range. 427 | */ 428 | func shadow( 429 | offset: CGSize? = nil, 430 | color: UIColor? = nil, 431 | blurRadius: CGFloat? = nil, 432 | range: NSRange? = nil 433 | ) -> NSMutableAttributedString { 434 | let shadow = NSShadow() 435 | if let offset = offset { 436 | shadow.shadowOffset = offset 437 | } 438 | 439 | if let color = color { 440 | shadow.shadowColor = color 441 | } 442 | 443 | if let blurRadius = blurRadius { 444 | shadow.shadowBlurRadius = blurRadius 445 | } 446 | 447 | return self.addAttribute(.shadow, value: shadow, range: range) 448 | } 449 | 450 | 451 | /// The value of this attribute is an URL object. The default value of this property is nil, indicating no link. 452 | /// - Parameters: 453 | /// - url: URL 454 | /// - range: Range to apply. The value `nil` means full range. 455 | func link(url: URL, range: NSRange? = nil) -> NSMutableAttributedString { 456 | return self.addAttribute(.link, value: url, range: range) 457 | } 458 | 459 | /** 460 | The value of this attribute is an NSTextAttachment object. The default value of this property is nil, indicating no attachment. 461 | 462 | - Parameters: 463 | - image: Image representing the text attachment contents. 464 | - bounds: Defines the layout bounds of the receiver's graphical representation in the text coordinate system. The bounds rectangle origin is at the current glyph location on the text baseline. The default value is CGRectZero. 465 | - range: Range to apply. The value `nil` means full range. 466 | ```swift 467 | let attributedText = "text".attachment(image: UIImage(named: "image name")) 468 | 469 | let label = UILabel() 470 | label.attributedText = attributedText 471 | label.sizeToFit() // Required 472 | ``` 473 | */ 474 | func attachment(image: UIImage?, bounds: CGRect? = nil, range: NSRange? = nil) -> NSMutableAttributedString { 475 | let attachment = NSTextAttachment() 476 | attachment.image = image 477 | 478 | if let bounds = bounds { 479 | attachment.bounds = bounds 480 | } 481 | 482 | return self.addAttribute(.attachment, value: attachment, range: range) 483 | } 484 | 485 | /** 486 | The value of this attribute is an NSTextAttachment object. 487 | 488 | - Parameters: 489 | - image: Image representing the text attachment contents. 490 | - bounds: imageBounds The rectangle in which the image is laid out. 491 | - textContainer: The text container in which the image is laid out. 492 | - characterIndex: The character location inside the text storage for the attachment character. 493 | - range: Range to apply. The value `nil` means full range. 494 | ```swift 495 | let imageSize = CGRect(x: 0, y: 0, width: 30, height: 30) 496 | let attributedText = "text".attachment(image: UIImage(named: "image name"), bound: imageSize) 497 | 498 | let label = UILabel() 499 | label.attributedText = attributedText 500 | label.sizeToFit() // Required 501 | ``` 502 | */ 503 | func attachment( 504 | image: UIImage?, 505 | bounds imageBounds: CGRect, 506 | textContainer: NSTextContainer? = nil, 507 | characterIndex: Int, 508 | range: NSRange? = nil 509 | ) -> NSMutableAttributedString { 510 | let attachment = NSTextAttachment() 511 | attachment.image = image 512 | 513 | attachment.image( 514 | forBounds: imageBounds, 515 | textContainer: textContainer, 516 | characterIndex: characterIndex 517 | ) 518 | 519 | return self.addAttribute(.attachment, value: attachment, range: range) 520 | } 521 | } 522 | -------------------------------------------------------------------------------- /AttributedStringSugar/Classes/Operator.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Operator.swift 3 | // AttributedStringSugar 4 | // 5 | // Created by Elon on 2020/03/17. 6 | // 7 | 8 | import UIKit 9 | 10 | public func + (lhs: NSAttributedString, rhs: NSAttributedString) -> NSAttributedString { 11 | let attributedString = NSMutableAttributedString(attributedString: lhs) 12 | attributedString.append(rhs) 13 | return attributedString 14 | } 15 | 16 | public func + (lhs: String, rhs: NSAttributedString) -> NSAttributedString { 17 | let attributedString = NSMutableAttributedString(string: lhs) 18 | attributedString.append(rhs) 19 | return attributedString 20 | } 21 | 22 | public func + (lhs: NSAttributedString, rhs: String) -> NSAttributedString { 23 | let attributedString = NSMutableAttributedString(attributedString: lhs) 24 | attributedString.append(NSAttributedString(string: rhs)) 25 | return attributedString 26 | } 27 | -------------------------------------------------------------------------------- /AttributedStringSugar/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | $(MARKETING_VERSION) 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /Example/AttributedStringSugar.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 5208716C781B65E82644A4DB /* Pods_AttributedStringSugar_Tests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F49DC010521AF4F70989ABF8 /* Pods_AttributedStringSugar_Tests.framework */; }; 11 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACD51AFB9204008FA782 /* AppDelegate.swift */; }; 12 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 607FACD91AFB9204008FA782 /* Main.storyboard */; }; 13 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDC1AFB9204008FA782 /* Images.xcassets */; }; 14 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */; }; 15 | 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 607FACEB1AFB9204008FA782 /* Tests.swift */; }; 16 | 8B5F0234F13D5E98B071B779 /* Pods_AttributedStringSugar_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7B9240853BE7C3F21556A1EE /* Pods_AttributedStringSugar_Example.framework */; }; 17 | DBBE6EDC247E22A100552C05 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = DBBE6EDA247E22A000552C05 /* ViewController.swift */; }; 18 | /* End PBXBuildFile section */ 19 | 20 | /* Begin PBXContainerItemProxy section */ 21 | 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */ = { 22 | isa = PBXContainerItemProxy; 23 | containerPortal = 607FACC81AFB9204008FA782 /* Project object */; 24 | proxyType = 1; 25 | remoteGlobalIDString = 607FACCF1AFB9204008FA782; 26 | remoteInfo = AttributedStringSugar; 27 | }; 28 | /* End PBXContainerItemProxy section */ 29 | 30 | /* Begin PBXFileReference section */ 31 | 25F607583A68DFCFEB921922 /* AttributedStringSugar.podspec */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = AttributedStringSugar.podspec; path = ../AttributedStringSugar.podspec; sourceTree = ""; }; 32 | 29DC70A509125261E05FA524 /* Pods-AttributedStringSugar_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AttributedStringSugar_Example.release.xcconfig"; path = "Target Support Files/Pods-AttributedStringSugar_Example/Pods-AttributedStringSugar_Example.release.xcconfig"; sourceTree = ""; }; 33 | 3DD10DC4FAF5F75F852193B8 /* Pods-AttributedStringSugar_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AttributedStringSugar_Tests.debug.xcconfig"; path = "Target Support Files/Pods-AttributedStringSugar_Tests/Pods-AttributedStringSugar_Tests.debug.xcconfig"; sourceTree = ""; }; 34 | 5D7F5B803F238E713277F61E /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; }; 35 | 607FACD01AFB9204008FA782 /* AttributedStringSugarExample.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AttributedStringSugarExample.app; sourceTree = BUILT_PRODUCTS_DIR; }; 36 | 607FACD41AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 37 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 38 | 607FACDA1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 39 | 607FACDC1AFB9204008FA782 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 40 | 607FACDF1AFB9204008FA782 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 41 | 607FACE51AFB9204008FA782 /* AttributedStringSugar_Tests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AttributedStringSugar_Tests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 42 | 607FACEA1AFB9204008FA782 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 43 | 607FACEB1AFB9204008FA782 /* Tests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Tests.swift; sourceTree = ""; }; 44 | 7B9240853BE7C3F21556A1EE /* Pods_AttributedStringSugar_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AttributedStringSugar_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 45 | 9947E5DFF08F111CC33E8733 /* Pods-AttributedStringSugar_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AttributedStringSugar_Example.debug.xcconfig"; path = "Target Support Files/Pods-AttributedStringSugar_Example/Pods-AttributedStringSugar_Example.debug.xcconfig"; sourceTree = ""; }; 46 | 9BC2E11EA4C87090268A53D9 /* Pods-AttributedStringSugar_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AttributedStringSugar_Tests.release.xcconfig"; path = "Target Support Files/Pods-AttributedStringSugar_Tests/Pods-AttributedStringSugar_Tests.release.xcconfig"; sourceTree = ""; }; 47 | CAF62CEA39A19F4E7014D473 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; name = LICENSE; path = ../LICENSE; sourceTree = ""; }; 48 | DBBE6EDA247E22A000552C05 /* ViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 49 | F49DC010521AF4F70989ABF8 /* Pods_AttributedStringSugar_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AttributedStringSugar_Tests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 50 | /* End PBXFileReference section */ 51 | 52 | /* Begin PBXFrameworksBuildPhase section */ 53 | 607FACCD1AFB9204008FA782 /* Frameworks */ = { 54 | isa = PBXFrameworksBuildPhase; 55 | buildActionMask = 2147483647; 56 | files = ( 57 | 8B5F0234F13D5E98B071B779 /* Pods_AttributedStringSugar_Example.framework in Frameworks */, 58 | ); 59 | runOnlyForDeploymentPostprocessing = 0; 60 | }; 61 | 607FACE21AFB9204008FA782 /* Frameworks */ = { 62 | isa = PBXFrameworksBuildPhase; 63 | buildActionMask = 2147483647; 64 | files = ( 65 | 5208716C781B65E82644A4DB /* Pods_AttributedStringSugar_Tests.framework in Frameworks */, 66 | ); 67 | runOnlyForDeploymentPostprocessing = 0; 68 | }; 69 | /* End PBXFrameworksBuildPhase section */ 70 | 71 | /* Begin PBXGroup section */ 72 | 5566CD967E2376DC0D50C450 /* Pods */ = { 73 | isa = PBXGroup; 74 | children = ( 75 | 9947E5DFF08F111CC33E8733 /* Pods-AttributedStringSugar_Example.debug.xcconfig */, 76 | 29DC70A509125261E05FA524 /* Pods-AttributedStringSugar_Example.release.xcconfig */, 77 | 3DD10DC4FAF5F75F852193B8 /* Pods-AttributedStringSugar_Tests.debug.xcconfig */, 78 | 9BC2E11EA4C87090268A53D9 /* Pods-AttributedStringSugar_Tests.release.xcconfig */, 79 | ); 80 | path = Pods; 81 | sourceTree = ""; 82 | }; 83 | 607FACC71AFB9204008FA782 = { 84 | isa = PBXGroup; 85 | children = ( 86 | 607FACF51AFB993E008FA782 /* Podspec Metadata */, 87 | 607FACD21AFB9204008FA782 /* Example for AttributedStringSugar */, 88 | 607FACE81AFB9204008FA782 /* Tests */, 89 | 607FACD11AFB9204008FA782 /* Products */, 90 | 5566CD967E2376DC0D50C450 /* Pods */, 91 | 663E07A033B9959F9A5BF306 /* Frameworks */, 92 | ); 93 | sourceTree = ""; 94 | }; 95 | 607FACD11AFB9204008FA782 /* Products */ = { 96 | isa = PBXGroup; 97 | children = ( 98 | 607FACD01AFB9204008FA782 /* AttributedStringSugarExample.app */, 99 | 607FACE51AFB9204008FA782 /* AttributedStringSugar_Tests.xctest */, 100 | ); 101 | name = Products; 102 | sourceTree = ""; 103 | }; 104 | 607FACD21AFB9204008FA782 /* Example for AttributedStringSugar */ = { 105 | isa = PBXGroup; 106 | children = ( 107 | 607FACD51AFB9204008FA782 /* AppDelegate.swift */, 108 | DBBE6EDA247E22A000552C05 /* ViewController.swift */, 109 | 607FACD91AFB9204008FA782 /* Main.storyboard */, 110 | 607FACDC1AFB9204008FA782 /* Images.xcassets */, 111 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */, 112 | 607FACD31AFB9204008FA782 /* Supporting Files */, 113 | ); 114 | name = "Example for AttributedStringSugar"; 115 | path = AttributedStringSugar; 116 | sourceTree = ""; 117 | }; 118 | 607FACD31AFB9204008FA782 /* Supporting Files */ = { 119 | isa = PBXGroup; 120 | children = ( 121 | 607FACD41AFB9204008FA782 /* Info.plist */, 122 | ); 123 | name = "Supporting Files"; 124 | sourceTree = ""; 125 | }; 126 | 607FACE81AFB9204008FA782 /* Tests */ = { 127 | isa = PBXGroup; 128 | children = ( 129 | 607FACEB1AFB9204008FA782 /* Tests.swift */, 130 | 607FACE91AFB9204008FA782 /* Supporting Files */, 131 | ); 132 | path = Tests; 133 | sourceTree = ""; 134 | }; 135 | 607FACE91AFB9204008FA782 /* Supporting Files */ = { 136 | isa = PBXGroup; 137 | children = ( 138 | 607FACEA1AFB9204008FA782 /* Info.plist */, 139 | ); 140 | name = "Supporting Files"; 141 | sourceTree = ""; 142 | }; 143 | 607FACF51AFB993E008FA782 /* Podspec Metadata */ = { 144 | isa = PBXGroup; 145 | children = ( 146 | 25F607583A68DFCFEB921922 /* AttributedStringSugar.podspec */, 147 | 5D7F5B803F238E713277F61E /* README.md */, 148 | CAF62CEA39A19F4E7014D473 /* LICENSE */, 149 | ); 150 | name = "Podspec Metadata"; 151 | sourceTree = ""; 152 | }; 153 | 663E07A033B9959F9A5BF306 /* Frameworks */ = { 154 | isa = PBXGroup; 155 | children = ( 156 | 7B9240853BE7C3F21556A1EE /* Pods_AttributedStringSugar_Example.framework */, 157 | F49DC010521AF4F70989ABF8 /* Pods_AttributedStringSugar_Tests.framework */, 158 | ); 159 | name = Frameworks; 160 | sourceTree = ""; 161 | }; 162 | /* End PBXGroup section */ 163 | 164 | /* Begin PBXNativeTarget section */ 165 | 607FACCF1AFB9204008FA782 /* AttributedStringSugar_Example */ = { 166 | isa = PBXNativeTarget; 167 | buildConfigurationList = 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "AttributedStringSugar_Example" */; 168 | buildPhases = ( 169 | 6BCCA25FCE6FC8F58962027D /* [CP] Check Pods Manifest.lock */, 170 | 607FACCC1AFB9204008FA782 /* Sources */, 171 | 607FACCD1AFB9204008FA782 /* Frameworks */, 172 | 607FACCE1AFB9204008FA782 /* Resources */, 173 | A414A9351478F9D64992E703 /* [CP] Embed Pods Frameworks */, 174 | ); 175 | buildRules = ( 176 | ); 177 | dependencies = ( 178 | ); 179 | name = AttributedStringSugar_Example; 180 | productName = AttributedStringSugar; 181 | productReference = 607FACD01AFB9204008FA782 /* AttributedStringSugarExample.app */; 182 | productType = "com.apple.product-type.application"; 183 | }; 184 | 607FACE41AFB9204008FA782 /* AttributedStringSugar_Tests */ = { 185 | isa = PBXNativeTarget; 186 | buildConfigurationList = 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "AttributedStringSugar_Tests" */; 187 | buildPhases = ( 188 | 6336FA10AD19E0D78699AEDB /* [CP] Check Pods Manifest.lock */, 189 | 607FACE11AFB9204008FA782 /* Sources */, 190 | 607FACE21AFB9204008FA782 /* Frameworks */, 191 | 607FACE31AFB9204008FA782 /* Resources */, 192 | ); 193 | buildRules = ( 194 | ); 195 | dependencies = ( 196 | 607FACE71AFB9204008FA782 /* PBXTargetDependency */, 197 | ); 198 | name = AttributedStringSugar_Tests; 199 | productName = Tests; 200 | productReference = 607FACE51AFB9204008FA782 /* AttributedStringSugar_Tests.xctest */; 201 | productType = "com.apple.product-type.bundle.unit-test"; 202 | }; 203 | /* End PBXNativeTarget section */ 204 | 205 | /* Begin PBXProject section */ 206 | 607FACC81AFB9204008FA782 /* Project object */ = { 207 | isa = PBXProject; 208 | attributes = { 209 | LastSwiftUpdateCheck = 0830; 210 | LastUpgradeCheck = 0830; 211 | ORGANIZATIONNAME = CocoaPods; 212 | TargetAttributes = { 213 | 607FACCF1AFB9204008FA782 = { 214 | CreatedOnToolsVersion = 6.3.1; 215 | DevelopmentTeam = M77W68G9P5; 216 | LastSwiftMigration = 0900; 217 | }; 218 | 607FACE41AFB9204008FA782 = { 219 | CreatedOnToolsVersion = 6.3.1; 220 | DevelopmentTeam = M77W68G9P5; 221 | LastSwiftMigration = 0900; 222 | TestTargetID = 607FACCF1AFB9204008FA782; 223 | }; 224 | }; 225 | }; 226 | buildConfigurationList = 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "AttributedStringSugar" */; 227 | compatibilityVersion = "Xcode 3.2"; 228 | developmentRegion = English; 229 | hasScannedForEncodings = 0; 230 | knownRegions = ( 231 | English, 232 | en, 233 | Base, 234 | ); 235 | mainGroup = 607FACC71AFB9204008FA782; 236 | productRefGroup = 607FACD11AFB9204008FA782 /* Products */; 237 | projectDirPath = ""; 238 | projectRoot = ""; 239 | targets = ( 240 | 607FACCF1AFB9204008FA782 /* AttributedStringSugar_Example */, 241 | 607FACE41AFB9204008FA782 /* AttributedStringSugar_Tests */, 242 | ); 243 | }; 244 | /* End PBXProject section */ 245 | 246 | /* Begin PBXResourcesBuildPhase section */ 247 | 607FACCE1AFB9204008FA782 /* Resources */ = { 248 | isa = PBXResourcesBuildPhase; 249 | buildActionMask = 2147483647; 250 | files = ( 251 | 607FACDB1AFB9204008FA782 /* Main.storyboard in Resources */, 252 | 607FACE01AFB9204008FA782 /* LaunchScreen.xib in Resources */, 253 | 607FACDD1AFB9204008FA782 /* Images.xcassets in Resources */, 254 | ); 255 | runOnlyForDeploymentPostprocessing = 0; 256 | }; 257 | 607FACE31AFB9204008FA782 /* Resources */ = { 258 | isa = PBXResourcesBuildPhase; 259 | buildActionMask = 2147483647; 260 | files = ( 261 | ); 262 | runOnlyForDeploymentPostprocessing = 0; 263 | }; 264 | /* End PBXResourcesBuildPhase section */ 265 | 266 | /* Begin PBXShellScriptBuildPhase section */ 267 | 6336FA10AD19E0D78699AEDB /* [CP] Check Pods Manifest.lock */ = { 268 | isa = PBXShellScriptBuildPhase; 269 | buildActionMask = 2147483647; 270 | files = ( 271 | ); 272 | inputFileListPaths = ( 273 | ); 274 | inputPaths = ( 275 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 276 | "${PODS_ROOT}/Manifest.lock", 277 | ); 278 | name = "[CP] Check Pods Manifest.lock"; 279 | outputFileListPaths = ( 280 | ); 281 | outputPaths = ( 282 | "$(DERIVED_FILE_DIR)/Pods-AttributedStringSugar_Tests-checkManifestLockResult.txt", 283 | ); 284 | runOnlyForDeploymentPostprocessing = 0; 285 | shellPath = /bin/sh; 286 | 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"; 287 | showEnvVarsInLog = 0; 288 | }; 289 | 6BCCA25FCE6FC8F58962027D /* [CP] Check Pods Manifest.lock */ = { 290 | isa = PBXShellScriptBuildPhase; 291 | buildActionMask = 2147483647; 292 | files = ( 293 | ); 294 | inputFileListPaths = ( 295 | ); 296 | inputPaths = ( 297 | "${PODS_PODFILE_DIR_PATH}/Podfile.lock", 298 | "${PODS_ROOT}/Manifest.lock", 299 | ); 300 | name = "[CP] Check Pods Manifest.lock"; 301 | outputFileListPaths = ( 302 | ); 303 | outputPaths = ( 304 | "$(DERIVED_FILE_DIR)/Pods-AttributedStringSugar_Example-checkManifestLockResult.txt", 305 | ); 306 | runOnlyForDeploymentPostprocessing = 0; 307 | shellPath = /bin/sh; 308 | 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"; 309 | showEnvVarsInLog = 0; 310 | }; 311 | A414A9351478F9D64992E703 /* [CP] Embed Pods Frameworks */ = { 312 | isa = PBXShellScriptBuildPhase; 313 | buildActionMask = 2147483647; 314 | files = ( 315 | ); 316 | inputPaths = ( 317 | "${PODS_ROOT}/Target Support Files/Pods-AttributedStringSugar_Example/Pods-AttributedStringSugar_Example-frameworks.sh", 318 | "${BUILT_PRODUCTS_DIR}/AttributedStringSugar/AttributedStringSugar.framework", 319 | ); 320 | name = "[CP] Embed Pods Frameworks"; 321 | outputPaths = ( 322 | "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}/AttributedStringSugar.framework", 323 | ); 324 | runOnlyForDeploymentPostprocessing = 0; 325 | shellPath = /bin/sh; 326 | shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-AttributedStringSugar_Example/Pods-AttributedStringSugar_Example-frameworks.sh\"\n"; 327 | showEnvVarsInLog = 0; 328 | }; 329 | /* End PBXShellScriptBuildPhase section */ 330 | 331 | /* Begin PBXSourcesBuildPhase section */ 332 | 607FACCC1AFB9204008FA782 /* Sources */ = { 333 | isa = PBXSourcesBuildPhase; 334 | buildActionMask = 2147483647; 335 | files = ( 336 | DBBE6EDC247E22A100552C05 /* ViewController.swift in Sources */, 337 | 607FACD61AFB9204008FA782 /* AppDelegate.swift in Sources */, 338 | ); 339 | runOnlyForDeploymentPostprocessing = 0; 340 | }; 341 | 607FACE11AFB9204008FA782 /* Sources */ = { 342 | isa = PBXSourcesBuildPhase; 343 | buildActionMask = 2147483647; 344 | files = ( 345 | 607FACEC1AFB9204008FA782 /* Tests.swift in Sources */, 346 | ); 347 | runOnlyForDeploymentPostprocessing = 0; 348 | }; 349 | /* End PBXSourcesBuildPhase section */ 350 | 351 | /* Begin PBXTargetDependency section */ 352 | 607FACE71AFB9204008FA782 /* PBXTargetDependency */ = { 353 | isa = PBXTargetDependency; 354 | target = 607FACCF1AFB9204008FA782 /* AttributedStringSugar_Example */; 355 | targetProxy = 607FACE61AFB9204008FA782 /* PBXContainerItemProxy */; 356 | }; 357 | /* End PBXTargetDependency section */ 358 | 359 | /* Begin PBXVariantGroup section */ 360 | 607FACD91AFB9204008FA782 /* Main.storyboard */ = { 361 | isa = PBXVariantGroup; 362 | children = ( 363 | 607FACDA1AFB9204008FA782 /* Base */, 364 | ); 365 | name = Main.storyboard; 366 | sourceTree = ""; 367 | }; 368 | 607FACDE1AFB9204008FA782 /* LaunchScreen.xib */ = { 369 | isa = PBXVariantGroup; 370 | children = ( 371 | 607FACDF1AFB9204008FA782 /* Base */, 372 | ); 373 | name = LaunchScreen.xib; 374 | sourceTree = ""; 375 | }; 376 | /* End PBXVariantGroup section */ 377 | 378 | /* Begin XCBuildConfiguration section */ 379 | 607FACED1AFB9204008FA782 /* Debug */ = { 380 | isa = XCBuildConfiguration; 381 | buildSettings = { 382 | ALWAYS_SEARCH_USER_PATHS = NO; 383 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 384 | CLANG_CXX_LIBRARY = "libc++"; 385 | CLANG_ENABLE_MODULES = YES; 386 | CLANG_ENABLE_OBJC_ARC = YES; 387 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 388 | CLANG_WARN_BOOL_CONVERSION = YES; 389 | CLANG_WARN_COMMA = YES; 390 | CLANG_WARN_CONSTANT_CONVERSION = YES; 391 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 392 | CLANG_WARN_EMPTY_BODY = YES; 393 | CLANG_WARN_ENUM_CONVERSION = YES; 394 | CLANG_WARN_INFINITE_RECURSION = YES; 395 | CLANG_WARN_INT_CONVERSION = YES; 396 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 397 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 398 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 399 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 400 | CLANG_WARN_STRICT_PROTOTYPES = YES; 401 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 402 | CLANG_WARN_UNREACHABLE_CODE = YES; 403 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 404 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 405 | COPY_PHASE_STRIP = NO; 406 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 407 | ENABLE_STRICT_OBJC_MSGSEND = YES; 408 | ENABLE_TESTABILITY = YES; 409 | GCC_C_LANGUAGE_STANDARD = gnu99; 410 | GCC_DYNAMIC_NO_PIC = NO; 411 | GCC_NO_COMMON_BLOCKS = YES; 412 | GCC_OPTIMIZATION_LEVEL = 0; 413 | GCC_PREPROCESSOR_DEFINITIONS = ( 414 | "DEBUG=1", 415 | "$(inherited)", 416 | ); 417 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 418 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 419 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 420 | GCC_WARN_UNDECLARED_SELECTOR = YES; 421 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 422 | GCC_WARN_UNUSED_FUNCTION = YES; 423 | GCC_WARN_UNUSED_VARIABLE = YES; 424 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 425 | MTL_ENABLE_DEBUG_INFO = YES; 426 | ONLY_ACTIVE_ARCH = YES; 427 | SDKROOT = iphoneos; 428 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 429 | }; 430 | name = Debug; 431 | }; 432 | 607FACEE1AFB9204008FA782 /* Release */ = { 433 | isa = XCBuildConfiguration; 434 | buildSettings = { 435 | ALWAYS_SEARCH_USER_PATHS = NO; 436 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 437 | CLANG_CXX_LIBRARY = "libc++"; 438 | CLANG_ENABLE_MODULES = YES; 439 | CLANG_ENABLE_OBJC_ARC = YES; 440 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 441 | CLANG_WARN_BOOL_CONVERSION = YES; 442 | CLANG_WARN_COMMA = YES; 443 | CLANG_WARN_CONSTANT_CONVERSION = YES; 444 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 445 | CLANG_WARN_EMPTY_BODY = YES; 446 | CLANG_WARN_ENUM_CONVERSION = YES; 447 | CLANG_WARN_INFINITE_RECURSION = YES; 448 | CLANG_WARN_INT_CONVERSION = YES; 449 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 450 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 451 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 452 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 453 | CLANG_WARN_STRICT_PROTOTYPES = YES; 454 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 455 | CLANG_WARN_UNREACHABLE_CODE = YES; 456 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 457 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; 458 | COPY_PHASE_STRIP = NO; 459 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 460 | ENABLE_NS_ASSERTIONS = NO; 461 | ENABLE_STRICT_OBJC_MSGSEND = YES; 462 | GCC_C_LANGUAGE_STANDARD = gnu99; 463 | GCC_NO_COMMON_BLOCKS = YES; 464 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 465 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 466 | GCC_WARN_UNDECLARED_SELECTOR = YES; 467 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 468 | GCC_WARN_UNUSED_FUNCTION = YES; 469 | GCC_WARN_UNUSED_VARIABLE = YES; 470 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 471 | MTL_ENABLE_DEBUG_INFO = NO; 472 | SDKROOT = iphoneos; 473 | SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; 474 | VALIDATE_PRODUCT = YES; 475 | }; 476 | name = Release; 477 | }; 478 | 607FACF01AFB9204008FA782 /* Debug */ = { 479 | isa = XCBuildConfiguration; 480 | baseConfigurationReference = 9947E5DFF08F111CC33E8733 /* Pods-AttributedStringSugar_Example.debug.xcconfig */; 481 | buildSettings = { 482 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 483 | DEVELOPMENT_TEAM = M77W68G9P5; 484 | ENABLE_PREVIEWS = YES; 485 | INFOPLIST_FILE = AttributedStringSugar/Info.plist; 486 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 487 | MARKETING_VERSION = 1.0.5; 488 | MODULE_NAME = ExampleApp; 489 | OTHER_SWIFT_FLAGS = "$(inherited) -D COCOAPODS -D DEBUG"; 490 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; 491 | PRODUCT_NAME = AttributedStringSugarExample; 492 | SWIFT_SWIFT3_OBJC_INFERENCE = Default; 493 | SWIFT_VERSION = 4.0; 494 | }; 495 | name = Debug; 496 | }; 497 | 607FACF11AFB9204008FA782 /* Release */ = { 498 | isa = XCBuildConfiguration; 499 | baseConfigurationReference = 29DC70A509125261E05FA524 /* Pods-AttributedStringSugar_Example.release.xcconfig */; 500 | buildSettings = { 501 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 502 | DEVELOPMENT_TEAM = M77W68G9P5; 503 | ENABLE_PREVIEWS = YES; 504 | INFOPLIST_FILE = AttributedStringSugar/Info.plist; 505 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; 506 | MARKETING_VERSION = 1.0.5; 507 | MODULE_NAME = ExampleApp; 508 | OTHER_SWIFT_FLAGS = "$(inherited) -D COCOAPODS -D DEBUG"; 509 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.demo.$(PRODUCT_NAME:rfc1034identifier)"; 510 | PRODUCT_NAME = AttributedStringSugarExample; 511 | SWIFT_SWIFT3_OBJC_INFERENCE = Default; 512 | SWIFT_VERSION = 4.0; 513 | }; 514 | name = Release; 515 | }; 516 | 607FACF31AFB9204008FA782 /* Debug */ = { 517 | isa = XCBuildConfiguration; 518 | baseConfigurationReference = 3DD10DC4FAF5F75F852193B8 /* Pods-AttributedStringSugar_Tests.debug.xcconfig */; 519 | buildSettings = { 520 | DEVELOPMENT_TEAM = M77W68G9P5; 521 | FRAMEWORK_SEARCH_PATHS = ( 522 | "$(PLATFORM_DIR)/Developer/Library/Frameworks", 523 | "$(inherited)", 524 | ); 525 | GCC_PREPROCESSOR_DEFINITIONS = ( 526 | "DEBUG=1", 527 | "$(inherited)", 528 | ); 529 | INFOPLIST_FILE = Tests/Info.plist; 530 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 531 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; 532 | PRODUCT_NAME = "$(TARGET_NAME)"; 533 | SWIFT_SWIFT3_OBJC_INFERENCE = Default; 534 | SWIFT_VERSION = 4.0; 535 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/AttributedStringSugar_Example.app/AttributedStringSugar_Example"; 536 | }; 537 | name = Debug; 538 | }; 539 | 607FACF41AFB9204008FA782 /* Release */ = { 540 | isa = XCBuildConfiguration; 541 | baseConfigurationReference = 9BC2E11EA4C87090268A53D9 /* Pods-AttributedStringSugar_Tests.release.xcconfig */; 542 | buildSettings = { 543 | DEVELOPMENT_TEAM = M77W68G9P5; 544 | FRAMEWORK_SEARCH_PATHS = ( 545 | "$(PLATFORM_DIR)/Developer/Library/Frameworks", 546 | "$(inherited)", 547 | ); 548 | INFOPLIST_FILE = Tests/Info.plist; 549 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 550 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.$(PRODUCT_NAME:rfc1034identifier)"; 551 | PRODUCT_NAME = "$(TARGET_NAME)"; 552 | SWIFT_SWIFT3_OBJC_INFERENCE = Default; 553 | SWIFT_VERSION = 4.0; 554 | TEST_HOST = "$(BUILT_PRODUCTS_DIR)/AttributedStringSugar_Example.app/AttributedStringSugar_Example"; 555 | }; 556 | name = Release; 557 | }; 558 | /* End XCBuildConfiguration section */ 559 | 560 | /* Begin XCConfigurationList section */ 561 | 607FACCB1AFB9204008FA782 /* Build configuration list for PBXProject "AttributedStringSugar" */ = { 562 | isa = XCConfigurationList; 563 | buildConfigurations = ( 564 | 607FACED1AFB9204008FA782 /* Debug */, 565 | 607FACEE1AFB9204008FA782 /* Release */, 566 | ); 567 | defaultConfigurationIsVisible = 0; 568 | defaultConfigurationName = Release; 569 | }; 570 | 607FACEF1AFB9204008FA782 /* Build configuration list for PBXNativeTarget "AttributedStringSugar_Example" */ = { 571 | isa = XCConfigurationList; 572 | buildConfigurations = ( 573 | 607FACF01AFB9204008FA782 /* Debug */, 574 | 607FACF11AFB9204008FA782 /* Release */, 575 | ); 576 | defaultConfigurationIsVisible = 0; 577 | defaultConfigurationName = Release; 578 | }; 579 | 607FACF21AFB9204008FA782 /* Build configuration list for PBXNativeTarget "AttributedStringSugar_Tests" */ = { 580 | isa = XCConfigurationList; 581 | buildConfigurations = ( 582 | 607FACF31AFB9204008FA782 /* Debug */, 583 | 607FACF41AFB9204008FA782 /* Release */, 584 | ); 585 | defaultConfigurationIsVisible = 0; 586 | defaultConfigurationName = Release; 587 | }; 588 | /* End XCConfigurationList section */ 589 | }; 590 | rootObject = 607FACC81AFB9204008FA782 /* Project object */; 591 | } 592 | -------------------------------------------------------------------------------- /Example/AttributedStringSugar.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/AttributedStringSugar.xcodeproj/xcshareddata/xcschemes/AttributedStringSugar-Example.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 29 | 35 | 36 | 37 | 38 | 39 | 44 | 45 | 51 | 52 | 53 | 54 | 56 | 62 | 63 | 64 | 65 | 66 | 76 | 78 | 84 | 85 | 86 | 87 | 93 | 95 | 101 | 102 | 103 | 104 | 106 | 107 | 110 | 111 | 112 | -------------------------------------------------------------------------------- /Example/AttributedStringSugar.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example/AttributedStringSugar.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/AttributedStringSugar/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // AttributedStringSugar 4 | // 5 | // Created by ElonPark on 03/16/2020. 6 | // Copyright (c) 2020 ElonPark. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | 11 | @UIApplicationMain 12 | class AppDelegate: UIResponder, UIApplicationDelegate { 13 | 14 | var window: UIWindow? 15 | 16 | 17 | func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 18 | // Override point for customization after application launch. 19 | return true 20 | } 21 | 22 | func applicationWillResignActive(_ application: UIApplication) { 23 | // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 24 | // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 25 | } 26 | 27 | func applicationDidEnterBackground(_ application: UIApplication) { 28 | // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. 29 | // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. 30 | } 31 | 32 | func applicationWillEnterForeground(_ application: UIApplication) { 33 | // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background. 34 | } 35 | 36 | func applicationDidBecomeActive(_ application: UIApplication) { 37 | // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 38 | } 39 | 40 | func applicationWillTerminate(_ application: UIApplication) { 41 | // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. 42 | } 43 | 44 | 45 | } 46 | 47 | -------------------------------------------------------------------------------- /Example/AttributedStringSugar/Base.lproj/LaunchScreen.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 25 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | -------------------------------------------------------------------------------- /Example/AttributedStringSugar/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /Example/AttributedStringSugar/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "iphone", 5 | "size" : "20x20", 6 | "scale" : "2x" 7 | }, 8 | { 9 | "idiom" : "iphone", 10 | "size" : "20x20", 11 | "scale" : "3x" 12 | }, 13 | { 14 | "idiom" : "iphone", 15 | "size" : "29x29", 16 | "scale" : "2x" 17 | }, 18 | { 19 | "idiom" : "iphone", 20 | "size" : "29x29", 21 | "scale" : "3x" 22 | }, 23 | { 24 | "idiom" : "iphone", 25 | "size" : "40x40", 26 | "scale" : "2x" 27 | }, 28 | { 29 | "idiom" : "iphone", 30 | "size" : "40x40", 31 | "scale" : "3x" 32 | }, 33 | { 34 | "idiom" : "iphone", 35 | "size" : "60x60", 36 | "scale" : "2x" 37 | }, 38 | { 39 | "idiom" : "iphone", 40 | "size" : "60x60", 41 | "scale" : "3x" 42 | }, 43 | { 44 | "idiom" : "ios-marketing", 45 | "size" : "1024x1024", 46 | "scale" : "1x" 47 | } 48 | ], 49 | "info" : { 50 | "version" : 1, 51 | "author" : "xcode" 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Example/AttributedStringSugar/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | APPL 17 | CFBundleShortVersionString 18 | $(MARKETING_VERSION) 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | LSRequiresIPhoneOS 24 | 25 | UILaunchStoryboardName 26 | LaunchScreen 27 | UIMainStoryboardFile 28 | Main 29 | UIRequiredDeviceCapabilities 30 | 31 | armv7 32 | 33 | UISupportedInterfaceOrientations 34 | 35 | UIInterfaceOrientationPortrait 36 | UIInterfaceOrientationLandscapeLeft 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /Example/AttributedStringSugar/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // AttributedStringSugar 4 | // 5 | // Created by ElonPark on 03/16/2020. 6 | // Copyright (c) 2020 ElonPark. All rights reserved. 7 | // 8 | 9 | import UIKit 10 | import AttributedStringSugar 11 | 12 | class ViewController: UIViewController { 13 | 14 | override func viewDidLoad() { 15 | super.viewDidLoad() 16 | let text = "Hello".attribute 17 | .paragraphStyle(alignment: .center) 18 | .systemFont(ofSize: 20, weight: .bold) 19 | .underline(style: .styleDouble, color: .green) 20 | .append(string: ", .........", makeAttribute: { 21 | $0.attribute 22 | .foreground(color: .blue) 23 | .background(color: .cyan) 24 | }) 25 | .append(string: "wolrd!", makeAttribute: { 26 | $0.attribute 27 | .systemFont(ofSize: 25, weight: .black) 28 | .stroke(width: 5, color: .yellow) 29 | .background(color: .red) 30 | .strikeThrough(style: .styleDouble) 31 | }) 32 | .append(string: "\nlink", makeAttribute: { 33 | $0.attribute 34 | .systemFont(ofSize: 30, weight: .bold) 35 | .link(url: URL(string: "https://github.com")!) 36 | }) 37 | 38 | let textView = UITextView() 39 | textView.attributedText = text + "!!!!!!!" 40 | textView.isEditable = false 41 | textView.isSelectable = true 42 | textView.delegate = self 43 | 44 | textView.translatesAutoresizingMaskIntoConstraints = false 45 | self.view.addSubview(textView) 46 | 47 | NSLayoutConstraint.activate([ 48 | textView.widthAnchor.constraint(equalToConstant: UIScreen.main.bounds.width), 49 | textView.heightAnchor.constraint(equalToConstant: UIScreen.main.bounds.width), 50 | textView.centerYAnchor.constraint(equalTo: self.view.centerYAnchor), 51 | textView.centerXAnchor.constraint(equalTo: self.view.centerXAnchor) 52 | ]) 53 | } 54 | } 55 | 56 | extension ViewController: UITextViewDelegate { 57 | func textView(_ textView: UITextView, shouldInteractWith URL: URL, in characterRange: NSRange) -> Bool { 58 | print(URL) 59 | if #available(iOS 10.0, *) { 60 | UIApplication.shared.open(URL) 61 | } 62 | 63 | return false 64 | } 65 | } 66 | 67 | -------------------------------------------------------------------------------- /Example/Podfile: -------------------------------------------------------------------------------- 1 | use_frameworks! 2 | 3 | target 'AttributedStringSugar_Example' do 4 | pod 'AttributedStringSugar', :path => '../' 5 | 6 | target 'AttributedStringSugar_Tests' do 7 | inherit! :search_paths 8 | 9 | 10 | end 11 | end 12 | -------------------------------------------------------------------------------- /Example/Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - AttributedStringSugar (1.0.5) 3 | 4 | DEPENDENCIES: 5 | - AttributedStringSugar (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | AttributedStringSugar: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | AttributedStringSugar: 9e46800f40b7d68fc02367f12a23255a2b988864 13 | 14 | PODFILE CHECKSUM: 05863bb7faeecdca48a8d55198b9618aa4a1b60d 15 | 16 | COCOAPODS: 1.9.3 17 | -------------------------------------------------------------------------------- /Example/Pods/Local Podspecs/AttributedStringSugar.podspec.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AttributedStringSugar", 3 | "version": "1.0.5", 4 | "swift_versions": "5.0", 5 | "summary": "NSAttributedString sugar using builder pattern.", 6 | "description": "NSAttributedString sugar using builder pattern\nusing like this\n```swift\n let text = \"Hello\".attribute\n .systemFont(ofSize: 20, weight: .bold)\n .paragraphStyle(alignment: .center)\n```", 7 | "homepage": "https://github.com/ElonPark/AttributedStringSugar", 8 | "screenshots": "https://user-images.githubusercontent.com/13270453/77228119-7348bf00-6bc8-11ea-95c4-06c624ff8ca3.png", 9 | "license": { 10 | "type": "MIT", 11 | "file": "LICENSE" 12 | }, 13 | "authors": { 14 | "Elon": "sungwoon.park92@gmail.com" 15 | }, 16 | "source": { 17 | "git": "https://github.com/ElonPark/AttributedStringSugar.git", 18 | "tag": "1.0.5" 19 | }, 20 | "platforms": { 21 | "ios": "9.0" 22 | }, 23 | "source_files": "AttributedStringSugar/Classes/**/*", 24 | "frameworks": "UIKit", 25 | "swift_version": "5.0" 26 | } 27 | -------------------------------------------------------------------------------- /Example/Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - AttributedStringSugar (1.0.5) 3 | 4 | DEPENDENCIES: 5 | - AttributedStringSugar (from `../`) 6 | 7 | EXTERNAL SOURCES: 8 | AttributedStringSugar: 9 | :path: "../" 10 | 11 | SPEC CHECKSUMS: 12 | AttributedStringSugar: 9e46800f40b7d68fc02367f12a23255a2b988864 13 | 14 | PODFILE CHECKSUM: 05863bb7faeecdca48a8d55198b9618aa4a1b60d 15 | 16 | COCOAPODS: 1.9.3 17 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 004A00EAEB6063A4F27BB1BA95C8B8A8 /* AttributedStringSugar.swift in Sources */ = {isa = PBXBuildFile; fileRef = 961B9ECBDEFE543996707A430E92BEEE /* AttributedStringSugar.swift */; }; 11 | 2A25E8575448C59A01B1C7F28871CABE /* AttributedStringSugar-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 5AB271D889499B20C99BB5A5CFD71277 /* AttributedStringSugar-dummy.m */; }; 12 | 3706FE3DF5294D4294F859B176C6B865 /* Pods-AttributedStringSugar_Example-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = 3DE47C95FA82BB4474C8E5EAC84F11AC /* Pods-AttributedStringSugar_Example-dummy.m */; }; 13 | 3A7A689BDCDAF2E3756F40A23123A3F5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */; }; 14 | A692AFE2B118F21D891C83945E87A92B /* AttributedStringSugar-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = E807C0C709F3B0B34AC03B9DD2B105F3 /* AttributedStringSugar-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 15 | C11B3861347521A7858EA8F3F6B6BFB5 /* Pods-AttributedStringSugar_Tests-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 8DF83E1EB2C4CF16F683B2BD63997200 /* Pods-AttributedStringSugar_Tests-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 16 | C36D52493896697D6FA45887DF2605EA /* Operator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 34FE9CAED0B6F757FE4AAAC36D2C85EB /* Operator.swift */; }; 17 | D015670BFEDE9AAA0153255A864B313D /* Pods-AttributedStringSugar_Example-umbrella.h in Headers */ = {isa = PBXBuildFile; fileRef = 82909769F13662817BE99CBEBD12A920 /* Pods-AttributedStringSugar_Example-umbrella.h */; settings = {ATTRIBUTES = (Public, ); }; }; 18 | D6704F0F865130A74812C65D254BE0A5 /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */; }; 19 | E764FDC827D2268C4369655D5921C02D /* Pods-AttributedStringSugar_Tests-dummy.m in Sources */ = {isa = PBXBuildFile; fileRef = DDAD1CE2E4FCB4D44E8A25357A4A5557 /* Pods-AttributedStringSugar_Tests-dummy.m */; }; 20 | EC79906BF7458B7CD42F36382B8AB24D /* Foundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */; }; 21 | F4D91CB99EE09F4B28370B7B49333EB9 /* UIKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 312B988EF117AE4DE76A268D970131FE /* UIKit.framework */; }; 22 | /* End PBXBuildFile section */ 23 | 24 | /* Begin PBXContainerItemProxy section */ 25 | 53DF68C3C6A78B304B08C0A1B0DE73ED /* PBXContainerItemProxy */ = { 26 | isa = PBXContainerItemProxy; 27 | containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; 28 | proxyType = 1; 29 | remoteGlobalIDString = A7246C9A6D093AB1471A0E0B904C08C6; 30 | remoteInfo = AttributedStringSugar; 31 | }; 32 | 79AD9C9C351AA022C3A93373E09D826C /* PBXContainerItemProxy */ = { 33 | isa = PBXContainerItemProxy; 34 | containerPortal = BFDFE7DC352907FC980B868725387E98 /* Project object */; 35 | proxyType = 1; 36 | remoteGlobalIDString = B11DBD99A3584CBE8D907A674A2DC6F7; 37 | remoteInfo = "Pods-AttributedStringSugar_Example"; 38 | }; 39 | /* End PBXContainerItemProxy section */ 40 | 41 | /* Begin PBXFileReference section */ 42 | 0613441568E832D39B98DD8176B6CE09 /* Pods-AttributedStringSugar_Tests.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-AttributedStringSugar_Tests.modulemap"; sourceTree = ""; }; 43 | 0620D952F936594FB573C7F49DA4220A /* AttributedStringSugar.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AttributedStringSugar.debug.xcconfig; sourceTree = ""; }; 44 | 12115573859C328BA06EC4C6274C2D25 /* Pods-AttributedStringSugar_Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AttributedStringSugar_Example.debug.xcconfig"; sourceTree = ""; }; 45 | 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; }; 46 | 34FE9CAED0B6F757FE4AAAC36D2C85EB /* Operator.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = Operator.swift; path = AttributedStringSugar/Classes/Operator.swift; sourceTree = ""; }; 47 | 37D7451CC0B79BF969F1D069605CE71C /* Pods-AttributedStringSugar_Tests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AttributedStringSugar_Tests.debug.xcconfig"; sourceTree = ""; }; 48 | 3DE47C95FA82BB4474C8E5EAC84F11AC /* Pods-AttributedStringSugar_Example-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-AttributedStringSugar_Example-dummy.m"; sourceTree = ""; }; 49 | 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; }; 50 | 45A95C5B8BDEE4A54391A9B6202EFEF7 /* Pods-AttributedStringSugar_Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AttributedStringSugar_Example.release.xcconfig"; sourceTree = ""; }; 51 | 4BEF70BB2C2E777BCF7FFAFE3A17E170 /* Pods-AttributedStringSugar_Example.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = "Pods-AttributedStringSugar_Example.modulemap"; sourceTree = ""; }; 52 | 4F3699446D4A08E379ECE6D246ABE717 /* LICENSE */ = {isa = PBXFileReference; includeInIndex = 1; path = LICENSE; sourceTree = ""; }; 53 | 5177FA22A3EE2D226B62473949577143 /* Pods_AttributedStringSugar_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_AttributedStringSugar_Example.framework; path = "Pods-AttributedStringSugar_Example.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 54 | 5AB271D889499B20C99BB5A5CFD71277 /* AttributedStringSugar-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "AttributedStringSugar-dummy.m"; sourceTree = ""; }; 55 | 63ADD3A6D01CF11AFED9094866EE70B8 /* Pods-AttributedStringSugar_Tests-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-AttributedStringSugar_Tests-acknowledgements.markdown"; sourceTree = ""; }; 56 | 65146DEBAB1D914E12E48D0CA0FDA6D2 /* AttributedStringSugar-prefix.pch */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AttributedStringSugar-prefix.pch"; sourceTree = ""; }; 57 | 6F1EC948DF289017C7850BB6EBEB8E81 /* AttributedStringSugar.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = AttributedStringSugar.framework; path = AttributedStringSugar.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 58 | 701AB43132494CBEA151E4D7E6B0BD03 /* Pods-AttributedStringSugar_Example-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AttributedStringSugar_Example-Info.plist"; sourceTree = ""; }; 59 | 7E0EA59FA11CEACCB0D63F597DE04525 /* AttributedStringSugar-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "AttributedStringSugar-Info.plist"; sourceTree = ""; }; 60 | 7ECA5F5ADC2562D92711D1CAF20B7CD8 /* Pods-AttributedStringSugar_Example-acknowledgements.markdown */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text; path = "Pods-AttributedStringSugar_Example-acknowledgements.markdown"; sourceTree = ""; }; 61 | 82909769F13662817BE99CBEBD12A920 /* Pods-AttributedStringSugar_Example-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-AttributedStringSugar_Example-umbrella.h"; sourceTree = ""; }; 62 | 8DF83E1EB2C4CF16F683B2BD63997200 /* Pods-AttributedStringSugar_Tests-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "Pods-AttributedStringSugar_Tests-umbrella.h"; sourceTree = ""; }; 63 | 9415044B50875D2DF6B68C1C9025EBE4 /* README.md */ = {isa = PBXFileReference; includeInIndex = 1; path = README.md; sourceTree = ""; }; 64 | 961B9ECBDEFE543996707A430E92BEEE /* AttributedStringSugar.swift */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.swift; name = AttributedStringSugar.swift; path = AttributedStringSugar/Classes/AttributedStringSugar.swift; sourceTree = ""; }; 65 | 9C30AF6177508862968D58C006EE1410 /* AttributedStringSugar.modulemap */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.module; path = AttributedStringSugar.modulemap; sourceTree = ""; }; 66 | 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; }; 67 | A1A81CB6B6E34967600F1746F9E5E16A /* Pods-AttributedStringSugar_Tests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = "Pods-AttributedStringSugar_Tests.release.xcconfig"; sourceTree = ""; }; 68 | A97C0816F3E98BA536E8DE2CD3591714 /* Pods-AttributedStringSugar_Example-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AttributedStringSugar_Example-acknowledgements.plist"; sourceTree = ""; }; 69 | BC4FAAA446D5AB223B62AFEC8880B8B0 /* Pods-AttributedStringSugar_Example-frameworks.sh */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.script.sh; path = "Pods-AttributedStringSugar_Example-frameworks.sh"; sourceTree = ""; }; 70 | CEB1B4F4DC0036AB056F229AF7C5ED4D /* Pods-AttributedStringSugar_Tests-acknowledgements.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AttributedStringSugar_Tests-acknowledgements.plist"; sourceTree = ""; }; 71 | D13D44A9F55CCC0D95150461BF44480E /* AttributedStringSugar.podspec */ = {isa = PBXFileReference; explicitFileType = text.script.ruby; includeInIndex = 1; indentWidth = 2; lastKnownFileType = text; path = AttributedStringSugar.podspec; sourceTree = ""; tabWidth = 2; xcLanguageSpecificationIdentifier = xcode.lang.ruby; }; 72 | DDAD1CE2E4FCB4D44E8A25357A4A5557 /* Pods-AttributedStringSugar_Tests-dummy.m */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.objc; path = "Pods-AttributedStringSugar_Tests-dummy.m"; sourceTree = ""; }; 73 | E1F7EA885CB238E5766714E7A9143CAA /* AttributedStringSugar.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; path = AttributedStringSugar.release.xcconfig; sourceTree = ""; }; 74 | E807C0C709F3B0B34AC03B9DD2B105F3 /* AttributedStringSugar-umbrella.h */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = sourcecode.c.h; path = "AttributedStringSugar-umbrella.h"; sourceTree = ""; }; 75 | E83589D2FA4E5FF4A5EE61CB926E5C22 /* Pods_AttributedStringSugar_Tests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; name = Pods_AttributedStringSugar_Tests.framework; path = "Pods-AttributedStringSugar_Tests.framework"; sourceTree = BUILT_PRODUCTS_DIR; }; 76 | F67878F584DACF18AEE049732785E9B7 /* Pods-AttributedStringSugar_Tests-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; path = "Pods-AttributedStringSugar_Tests-Info.plist"; sourceTree = ""; }; 77 | /* End PBXFileReference section */ 78 | 79 | /* Begin PBXFrameworksBuildPhase section */ 80 | 9550D17C38013A4AEAC10DBFC7508419 /* Frameworks */ = { 81 | isa = PBXFrameworksBuildPhase; 82 | buildActionMask = 2147483647; 83 | files = ( 84 | D6704F0F865130A74812C65D254BE0A5 /* Foundation.framework in Frameworks */, 85 | ); 86 | runOnlyForDeploymentPostprocessing = 0; 87 | }; 88 | C2EEE7D0F530827223DF745BC26A5519 /* Frameworks */ = { 89 | isa = PBXFrameworksBuildPhase; 90 | buildActionMask = 2147483647; 91 | files = ( 92 | EC79906BF7458B7CD42F36382B8AB24D /* Foundation.framework in Frameworks */, 93 | ); 94 | runOnlyForDeploymentPostprocessing = 0; 95 | }; 96 | D64C1C194B374DA86657CB144D3DDFB0 /* Frameworks */ = { 97 | isa = PBXFrameworksBuildPhase; 98 | buildActionMask = 2147483647; 99 | files = ( 100 | 3A7A689BDCDAF2E3756F40A23123A3F5 /* Foundation.framework in Frameworks */, 101 | F4D91CB99EE09F4B28370B7B49333EB9 /* UIKit.framework in Frameworks */, 102 | ); 103 | runOnlyForDeploymentPostprocessing = 0; 104 | }; 105 | /* End PBXFrameworksBuildPhase section */ 106 | 107 | /* Begin PBXGroup section */ 108 | 0BE3F8B747E16A08DCA0C07649638BC2 /* Products */ = { 109 | isa = PBXGroup; 110 | children = ( 111 | 6F1EC948DF289017C7850BB6EBEB8E81 /* AttributedStringSugar.framework */, 112 | 5177FA22A3EE2D226B62473949577143 /* Pods_AttributedStringSugar_Example.framework */, 113 | E83589D2FA4E5FF4A5EE61CB926E5C22 /* Pods_AttributedStringSugar_Tests.framework */, 114 | ); 115 | name = Products; 116 | sourceTree = ""; 117 | }; 118 | 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */ = { 119 | isa = PBXGroup; 120 | children = ( 121 | E2983683FD097A93297E2F5D4E382B36 /* iOS */, 122 | ); 123 | name = Frameworks; 124 | sourceTree = ""; 125 | }; 126 | 18FC317D0B7473A0A3DA4E791B283F29 /* Pod */ = { 127 | isa = PBXGroup; 128 | children = ( 129 | D13D44A9F55CCC0D95150461BF44480E /* AttributedStringSugar.podspec */, 130 | 4F3699446D4A08E379ECE6D246ABE717 /* LICENSE */, 131 | 9415044B50875D2DF6B68C1C9025EBE4 /* README.md */, 132 | ); 133 | name = Pod; 134 | sourceTree = ""; 135 | }; 136 | 4F0B44C4529DE03DAEDDF15858D96D66 /* Targets Support Files */ = { 137 | isa = PBXGroup; 138 | children = ( 139 | 7C33F5DD9E72C48D9B59F8C4462D1C61 /* Pods-AttributedStringSugar_Example */, 140 | AABA95DA1D5D5FDA5C4E1EC175181487 /* Pods-AttributedStringSugar_Tests */, 141 | ); 142 | name = "Targets Support Files"; 143 | sourceTree = ""; 144 | }; 145 | 7C33F5DD9E72C48D9B59F8C4462D1C61 /* Pods-AttributedStringSugar_Example */ = { 146 | isa = PBXGroup; 147 | children = ( 148 | 4BEF70BB2C2E777BCF7FFAFE3A17E170 /* Pods-AttributedStringSugar_Example.modulemap */, 149 | 7ECA5F5ADC2562D92711D1CAF20B7CD8 /* Pods-AttributedStringSugar_Example-acknowledgements.markdown */, 150 | A97C0816F3E98BA536E8DE2CD3591714 /* Pods-AttributedStringSugar_Example-acknowledgements.plist */, 151 | 3DE47C95FA82BB4474C8E5EAC84F11AC /* Pods-AttributedStringSugar_Example-dummy.m */, 152 | BC4FAAA446D5AB223B62AFEC8880B8B0 /* Pods-AttributedStringSugar_Example-frameworks.sh */, 153 | 701AB43132494CBEA151E4D7E6B0BD03 /* Pods-AttributedStringSugar_Example-Info.plist */, 154 | 82909769F13662817BE99CBEBD12A920 /* Pods-AttributedStringSugar_Example-umbrella.h */, 155 | 12115573859C328BA06EC4C6274C2D25 /* Pods-AttributedStringSugar_Example.debug.xcconfig */, 156 | 45A95C5B8BDEE4A54391A9B6202EFEF7 /* Pods-AttributedStringSugar_Example.release.xcconfig */, 157 | ); 158 | name = "Pods-AttributedStringSugar_Example"; 159 | path = "Target Support Files/Pods-AttributedStringSugar_Example"; 160 | sourceTree = ""; 161 | }; 162 | AABA95DA1D5D5FDA5C4E1EC175181487 /* Pods-AttributedStringSugar_Tests */ = { 163 | isa = PBXGroup; 164 | children = ( 165 | 0613441568E832D39B98DD8176B6CE09 /* Pods-AttributedStringSugar_Tests.modulemap */, 166 | 63ADD3A6D01CF11AFED9094866EE70B8 /* Pods-AttributedStringSugar_Tests-acknowledgements.markdown */, 167 | CEB1B4F4DC0036AB056F229AF7C5ED4D /* Pods-AttributedStringSugar_Tests-acknowledgements.plist */, 168 | DDAD1CE2E4FCB4D44E8A25357A4A5557 /* Pods-AttributedStringSugar_Tests-dummy.m */, 169 | F67878F584DACF18AEE049732785E9B7 /* Pods-AttributedStringSugar_Tests-Info.plist */, 170 | 8DF83E1EB2C4CF16F683B2BD63997200 /* Pods-AttributedStringSugar_Tests-umbrella.h */, 171 | 37D7451CC0B79BF969F1D069605CE71C /* Pods-AttributedStringSugar_Tests.debug.xcconfig */, 172 | A1A81CB6B6E34967600F1746F9E5E16A /* Pods-AttributedStringSugar_Tests.release.xcconfig */, 173 | ); 174 | name = "Pods-AttributedStringSugar_Tests"; 175 | path = "Target Support Files/Pods-AttributedStringSugar_Tests"; 176 | sourceTree = ""; 177 | }; 178 | B005B827B336F867BA34BA2859E400E3 /* Development Pods */ = { 179 | isa = PBXGroup; 180 | children = ( 181 | C2CA03D3BB428E588BB8E003743BB37E /* AttributedStringSugar */, 182 | ); 183 | name = "Development Pods"; 184 | sourceTree = ""; 185 | }; 186 | C2CA03D3BB428E588BB8E003743BB37E /* AttributedStringSugar */ = { 187 | isa = PBXGroup; 188 | children = ( 189 | 961B9ECBDEFE543996707A430E92BEEE /* AttributedStringSugar.swift */, 190 | 34FE9CAED0B6F757FE4AAAC36D2C85EB /* Operator.swift */, 191 | 18FC317D0B7473A0A3DA4E791B283F29 /* Pod */, 192 | EF7F0BF1DF2E704462B8FE532AE9677E /* Support Files */, 193 | ); 194 | name = AttributedStringSugar; 195 | path = ../..; 196 | sourceTree = ""; 197 | }; 198 | CF1408CF629C7361332E53B88F7BD30C = { 199 | isa = PBXGroup; 200 | children = ( 201 | 9D940727FF8FB9C785EB98E56350EF41 /* Podfile */, 202 | B005B827B336F867BA34BA2859E400E3 /* Development Pods */, 203 | 1628BF05B4CAFDCC3549A101F5A10A17 /* Frameworks */, 204 | 0BE3F8B747E16A08DCA0C07649638BC2 /* Products */, 205 | 4F0B44C4529DE03DAEDDF15858D96D66 /* Targets Support Files */, 206 | ); 207 | sourceTree = ""; 208 | }; 209 | E2983683FD097A93297E2F5D4E382B36 /* iOS */ = { 210 | isa = PBXGroup; 211 | children = ( 212 | 436BAA54A31999B53B3CC7115C55FE50 /* Foundation.framework */, 213 | 312B988EF117AE4DE76A268D970131FE /* UIKit.framework */, 214 | ); 215 | name = iOS; 216 | sourceTree = ""; 217 | }; 218 | EF7F0BF1DF2E704462B8FE532AE9677E /* Support Files */ = { 219 | isa = PBXGroup; 220 | children = ( 221 | 9C30AF6177508862968D58C006EE1410 /* AttributedStringSugar.modulemap */, 222 | 5AB271D889499B20C99BB5A5CFD71277 /* AttributedStringSugar-dummy.m */, 223 | 7E0EA59FA11CEACCB0D63F597DE04525 /* AttributedStringSugar-Info.plist */, 224 | 65146DEBAB1D914E12E48D0CA0FDA6D2 /* AttributedStringSugar-prefix.pch */, 225 | E807C0C709F3B0B34AC03B9DD2B105F3 /* AttributedStringSugar-umbrella.h */, 226 | 0620D952F936594FB573C7F49DA4220A /* AttributedStringSugar.debug.xcconfig */, 227 | E1F7EA885CB238E5766714E7A9143CAA /* AttributedStringSugar.release.xcconfig */, 228 | ); 229 | name = "Support Files"; 230 | path = "Example/Pods/Target Support Files/AttributedStringSugar"; 231 | sourceTree = ""; 232 | }; 233 | /* End PBXGroup section */ 234 | 235 | /* Begin PBXHeadersBuildPhase section */ 236 | 458B45D11FF3895F535621DB0DF7ACB0 /* Headers */ = { 237 | isa = PBXHeadersBuildPhase; 238 | buildActionMask = 2147483647; 239 | files = ( 240 | C11B3861347521A7858EA8F3F6B6BFB5 /* Pods-AttributedStringSugar_Tests-umbrella.h in Headers */, 241 | ); 242 | runOnlyForDeploymentPostprocessing = 0; 243 | }; 244 | 68F8147CD67C8442922772ED85F9B13A /* Headers */ = { 245 | isa = PBXHeadersBuildPhase; 246 | buildActionMask = 2147483647; 247 | files = ( 248 | A692AFE2B118F21D891C83945E87A92B /* AttributedStringSugar-umbrella.h in Headers */, 249 | ); 250 | runOnlyForDeploymentPostprocessing = 0; 251 | }; 252 | E5A25C5622E818912D34E62C975E74A2 /* Headers */ = { 253 | isa = PBXHeadersBuildPhase; 254 | buildActionMask = 2147483647; 255 | files = ( 256 | D015670BFEDE9AAA0153255A864B313D /* Pods-AttributedStringSugar_Example-umbrella.h in Headers */, 257 | ); 258 | runOnlyForDeploymentPostprocessing = 0; 259 | }; 260 | /* End PBXHeadersBuildPhase section */ 261 | 262 | /* Begin PBXNativeTarget section */ 263 | 66FAD2A640A9C49896BC1147CE87AB5F /* Pods-AttributedStringSugar_Tests */ = { 264 | isa = PBXNativeTarget; 265 | buildConfigurationList = 576C8F62E047A7EBA1570BC1C5CCA4F2 /* Build configuration list for PBXNativeTarget "Pods-AttributedStringSugar_Tests" */; 266 | buildPhases = ( 267 | 458B45D11FF3895F535621DB0DF7ACB0 /* Headers */, 268 | 43706ECC0952ADC3D5B4712E0936C996 /* Sources */, 269 | C2EEE7D0F530827223DF745BC26A5519 /* Frameworks */, 270 | 6529743441EE38E6C29021C52FB06384 /* Resources */, 271 | ); 272 | buildRules = ( 273 | ); 274 | dependencies = ( 275 | 8C753E78D293681E66DD5B3E7A352D4D /* PBXTargetDependency */, 276 | ); 277 | name = "Pods-AttributedStringSugar_Tests"; 278 | productName = "Pods-AttributedStringSugar_Tests"; 279 | productReference = E83589D2FA4E5FF4A5EE61CB926E5C22 /* Pods_AttributedStringSugar_Tests.framework */; 280 | productType = "com.apple.product-type.framework"; 281 | }; 282 | A7246C9A6D093AB1471A0E0B904C08C6 /* AttributedStringSugar */ = { 283 | isa = PBXNativeTarget; 284 | buildConfigurationList = 68F5CCEEC2BC643ECD7817F5CC1EF3D9 /* Build configuration list for PBXNativeTarget "AttributedStringSugar" */; 285 | buildPhases = ( 286 | 68F8147CD67C8442922772ED85F9B13A /* Headers */, 287 | E53E7DA6176229BF1F829D7488688CC0 /* Sources */, 288 | D64C1C194B374DA86657CB144D3DDFB0 /* Frameworks */, 289 | D1A392D8C788217FE3C1AAF710AF649B /* Resources */, 290 | ); 291 | buildRules = ( 292 | ); 293 | dependencies = ( 294 | ); 295 | name = AttributedStringSugar; 296 | productName = AttributedStringSugar; 297 | productReference = 6F1EC948DF289017C7850BB6EBEB8E81 /* AttributedStringSugar.framework */; 298 | productType = "com.apple.product-type.framework"; 299 | }; 300 | B11DBD99A3584CBE8D907A674A2DC6F7 /* Pods-AttributedStringSugar_Example */ = { 301 | isa = PBXNativeTarget; 302 | buildConfigurationList = A8974CD2738CD73B7828EBC0AD5D35E6 /* Build configuration list for PBXNativeTarget "Pods-AttributedStringSugar_Example" */; 303 | buildPhases = ( 304 | E5A25C5622E818912D34E62C975E74A2 /* Headers */, 305 | 9B7E071A035F325D3AD85B1BBDF5EC78 /* Sources */, 306 | 9550D17C38013A4AEAC10DBFC7508419 /* Frameworks */, 307 | 90FA106D8275551BF0B17B556D298A67 /* Resources */, 308 | ); 309 | buildRules = ( 310 | ); 311 | dependencies = ( 312 | 439B589DE317725287E04350E2F99DA8 /* PBXTargetDependency */, 313 | ); 314 | name = "Pods-AttributedStringSugar_Example"; 315 | productName = "Pods-AttributedStringSugar_Example"; 316 | productReference = 5177FA22A3EE2D226B62473949577143 /* Pods_AttributedStringSugar_Example.framework */; 317 | productType = "com.apple.product-type.framework"; 318 | }; 319 | /* End PBXNativeTarget section */ 320 | 321 | /* Begin PBXProject section */ 322 | BFDFE7DC352907FC980B868725387E98 /* Project object */ = { 323 | isa = PBXProject; 324 | attributes = { 325 | LastSwiftUpdateCheck = 1100; 326 | LastUpgradeCheck = 1100; 327 | }; 328 | buildConfigurationList = 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */; 329 | compatibilityVersion = "Xcode 3.2"; 330 | developmentRegion = en; 331 | hasScannedForEncodings = 0; 332 | knownRegions = ( 333 | en, 334 | Base, 335 | ); 336 | mainGroup = CF1408CF629C7361332E53B88F7BD30C; 337 | productRefGroup = 0BE3F8B747E16A08DCA0C07649638BC2 /* Products */; 338 | projectDirPath = ""; 339 | projectRoot = ""; 340 | targets = ( 341 | A7246C9A6D093AB1471A0E0B904C08C6 /* AttributedStringSugar */, 342 | B11DBD99A3584CBE8D907A674A2DC6F7 /* Pods-AttributedStringSugar_Example */, 343 | 66FAD2A640A9C49896BC1147CE87AB5F /* Pods-AttributedStringSugar_Tests */, 344 | ); 345 | }; 346 | /* End PBXProject section */ 347 | 348 | /* Begin PBXResourcesBuildPhase section */ 349 | 6529743441EE38E6C29021C52FB06384 /* Resources */ = { 350 | isa = PBXResourcesBuildPhase; 351 | buildActionMask = 2147483647; 352 | files = ( 353 | ); 354 | runOnlyForDeploymentPostprocessing = 0; 355 | }; 356 | 90FA106D8275551BF0B17B556D298A67 /* Resources */ = { 357 | isa = PBXResourcesBuildPhase; 358 | buildActionMask = 2147483647; 359 | files = ( 360 | ); 361 | runOnlyForDeploymentPostprocessing = 0; 362 | }; 363 | D1A392D8C788217FE3C1AAF710AF649B /* Resources */ = { 364 | isa = PBXResourcesBuildPhase; 365 | buildActionMask = 2147483647; 366 | files = ( 367 | ); 368 | runOnlyForDeploymentPostprocessing = 0; 369 | }; 370 | /* End PBXResourcesBuildPhase section */ 371 | 372 | /* Begin PBXSourcesBuildPhase section */ 373 | 43706ECC0952ADC3D5B4712E0936C996 /* Sources */ = { 374 | isa = PBXSourcesBuildPhase; 375 | buildActionMask = 2147483647; 376 | files = ( 377 | E764FDC827D2268C4369655D5921C02D /* Pods-AttributedStringSugar_Tests-dummy.m in Sources */, 378 | ); 379 | runOnlyForDeploymentPostprocessing = 0; 380 | }; 381 | 9B7E071A035F325D3AD85B1BBDF5EC78 /* Sources */ = { 382 | isa = PBXSourcesBuildPhase; 383 | buildActionMask = 2147483647; 384 | files = ( 385 | 3706FE3DF5294D4294F859B176C6B865 /* Pods-AttributedStringSugar_Example-dummy.m in Sources */, 386 | ); 387 | runOnlyForDeploymentPostprocessing = 0; 388 | }; 389 | E53E7DA6176229BF1F829D7488688CC0 /* Sources */ = { 390 | isa = PBXSourcesBuildPhase; 391 | buildActionMask = 2147483647; 392 | files = ( 393 | 2A25E8575448C59A01B1C7F28871CABE /* AttributedStringSugar-dummy.m in Sources */, 394 | 004A00EAEB6063A4F27BB1BA95C8B8A8 /* AttributedStringSugar.swift in Sources */, 395 | C36D52493896697D6FA45887DF2605EA /* Operator.swift in Sources */, 396 | ); 397 | runOnlyForDeploymentPostprocessing = 0; 398 | }; 399 | /* End PBXSourcesBuildPhase section */ 400 | 401 | /* Begin PBXTargetDependency section */ 402 | 439B589DE317725287E04350E2F99DA8 /* PBXTargetDependency */ = { 403 | isa = PBXTargetDependency; 404 | name = AttributedStringSugar; 405 | target = A7246C9A6D093AB1471A0E0B904C08C6 /* AttributedStringSugar */; 406 | targetProxy = 53DF68C3C6A78B304B08C0A1B0DE73ED /* PBXContainerItemProxy */; 407 | }; 408 | 8C753E78D293681E66DD5B3E7A352D4D /* PBXTargetDependency */ = { 409 | isa = PBXTargetDependency; 410 | name = "Pods-AttributedStringSugar_Example"; 411 | target = B11DBD99A3584CBE8D907A674A2DC6F7 /* Pods-AttributedStringSugar_Example */; 412 | targetProxy = 79AD9C9C351AA022C3A93373E09D826C /* PBXContainerItemProxy */; 413 | }; 414 | /* End PBXTargetDependency section */ 415 | 416 | /* Begin XCBuildConfiguration section */ 417 | 1D443022B47979B0D760591AAC617D84 /* Release */ = { 418 | isa = XCBuildConfiguration; 419 | baseConfigurationReference = A1A81CB6B6E34967600F1746F9E5E16A /* Pods-AttributedStringSugar_Tests.release.xcconfig */; 420 | buildSettings = { 421 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 422 | CODE_SIGN_IDENTITY = ""; 423 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 424 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 425 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 426 | CURRENT_PROJECT_VERSION = 1; 427 | DEFINES_MODULE = YES; 428 | DYLIB_COMPATIBILITY_VERSION = 1; 429 | DYLIB_CURRENT_VERSION = 1; 430 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 431 | INFOPLIST_FILE = "Target Support Files/Pods-AttributedStringSugar_Tests/Pods-AttributedStringSugar_Tests-Info.plist"; 432 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 433 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 434 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 435 | MACH_O_TYPE = staticlib; 436 | MODULEMAP_FILE = "Target Support Files/Pods-AttributedStringSugar_Tests/Pods-AttributedStringSugar_Tests.modulemap"; 437 | OTHER_LDFLAGS = ""; 438 | OTHER_LIBTOOLFLAGS = ""; 439 | PODS_ROOT = "$(SRCROOT)"; 440 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 441 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 442 | SDKROOT = iphoneos; 443 | SKIP_INSTALL = YES; 444 | TARGETED_DEVICE_FAMILY = "1,2"; 445 | VALIDATE_PRODUCT = YES; 446 | VERSIONING_SYSTEM = "apple-generic"; 447 | VERSION_INFO_PREFIX = ""; 448 | }; 449 | name = Release; 450 | }; 451 | 5662E0C4332DC4CA3283AE29EA5C6339 /* Debug */ = { 452 | isa = XCBuildConfiguration; 453 | baseConfigurationReference = 12115573859C328BA06EC4C6274C2D25 /* Pods-AttributedStringSugar_Example.debug.xcconfig */; 454 | buildSettings = { 455 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 456 | CODE_SIGN_IDENTITY = ""; 457 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 458 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 459 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 460 | CURRENT_PROJECT_VERSION = 1; 461 | DEFINES_MODULE = YES; 462 | DYLIB_COMPATIBILITY_VERSION = 1; 463 | DYLIB_CURRENT_VERSION = 1; 464 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 465 | INFOPLIST_FILE = "Target Support Files/Pods-AttributedStringSugar_Example/Pods-AttributedStringSugar_Example-Info.plist"; 466 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 467 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 468 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 469 | MACH_O_TYPE = staticlib; 470 | MODULEMAP_FILE = "Target Support Files/Pods-AttributedStringSugar_Example/Pods-AttributedStringSugar_Example.modulemap"; 471 | OTHER_LDFLAGS = ""; 472 | OTHER_LIBTOOLFLAGS = ""; 473 | PODS_ROOT = "$(SRCROOT)"; 474 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 475 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 476 | SDKROOT = iphoneos; 477 | SKIP_INSTALL = YES; 478 | TARGETED_DEVICE_FAMILY = "1,2"; 479 | VERSIONING_SYSTEM = "apple-generic"; 480 | VERSION_INFO_PREFIX = ""; 481 | }; 482 | name = Debug; 483 | }; 484 | 7191C162CDA42AEB2EBEB924BA219DE0 /* Debug */ = { 485 | isa = XCBuildConfiguration; 486 | baseConfigurationReference = 37D7451CC0B79BF969F1D069605CE71C /* Pods-AttributedStringSugar_Tests.debug.xcconfig */; 487 | buildSettings = { 488 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 489 | CODE_SIGN_IDENTITY = ""; 490 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 491 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 492 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 493 | CURRENT_PROJECT_VERSION = 1; 494 | DEFINES_MODULE = YES; 495 | DYLIB_COMPATIBILITY_VERSION = 1; 496 | DYLIB_CURRENT_VERSION = 1; 497 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 498 | INFOPLIST_FILE = "Target Support Files/Pods-AttributedStringSugar_Tests/Pods-AttributedStringSugar_Tests-Info.plist"; 499 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 500 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 501 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 502 | MACH_O_TYPE = staticlib; 503 | MODULEMAP_FILE = "Target Support Files/Pods-AttributedStringSugar_Tests/Pods-AttributedStringSugar_Tests.modulemap"; 504 | OTHER_LDFLAGS = ""; 505 | OTHER_LIBTOOLFLAGS = ""; 506 | PODS_ROOT = "$(SRCROOT)"; 507 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 508 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 509 | SDKROOT = iphoneos; 510 | SKIP_INSTALL = YES; 511 | TARGETED_DEVICE_FAMILY = "1,2"; 512 | VERSIONING_SYSTEM = "apple-generic"; 513 | VERSION_INFO_PREFIX = ""; 514 | }; 515 | name = Debug; 516 | }; 517 | 807B78F7E0FF772EFD83055A059E6272 /* Debug */ = { 518 | isa = XCBuildConfiguration; 519 | baseConfigurationReference = 0620D952F936594FB573C7F49DA4220A /* AttributedStringSugar.debug.xcconfig */; 520 | buildSettings = { 521 | CODE_SIGN_IDENTITY = ""; 522 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 523 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 524 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 525 | CURRENT_PROJECT_VERSION = 1; 526 | DEFINES_MODULE = YES; 527 | DYLIB_COMPATIBILITY_VERSION = 1; 528 | DYLIB_CURRENT_VERSION = 1; 529 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 530 | GCC_PREFIX_HEADER = "Target Support Files/AttributedStringSugar/AttributedStringSugar-prefix.pch"; 531 | INFOPLIST_FILE = "Target Support Files/AttributedStringSugar/AttributedStringSugar-Info.plist"; 532 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 533 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 534 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 535 | MODULEMAP_FILE = "Target Support Files/AttributedStringSugar/AttributedStringSugar.modulemap"; 536 | PRODUCT_MODULE_NAME = AttributedStringSugar; 537 | PRODUCT_NAME = AttributedStringSugar; 538 | SDKROOT = iphoneos; 539 | SKIP_INSTALL = YES; 540 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 541 | SWIFT_VERSION = 5.0; 542 | TARGETED_DEVICE_FAMILY = "1,2"; 543 | VERSIONING_SYSTEM = "apple-generic"; 544 | VERSION_INFO_PREFIX = ""; 545 | }; 546 | name = Debug; 547 | }; 548 | 8F06B4CE23E7A006FF6E4810352E947E /* Release */ = { 549 | isa = XCBuildConfiguration; 550 | baseConfigurationReference = 45A95C5B8BDEE4A54391A9B6202EFEF7 /* Pods-AttributedStringSugar_Example.release.xcconfig */; 551 | buildSettings = { 552 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = NO; 553 | CODE_SIGN_IDENTITY = ""; 554 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 555 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 556 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 557 | CURRENT_PROJECT_VERSION = 1; 558 | DEFINES_MODULE = YES; 559 | DYLIB_COMPATIBILITY_VERSION = 1; 560 | DYLIB_CURRENT_VERSION = 1; 561 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 562 | INFOPLIST_FILE = "Target Support Files/Pods-AttributedStringSugar_Example/Pods-AttributedStringSugar_Example-Info.plist"; 563 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 564 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 565 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 566 | MACH_O_TYPE = staticlib; 567 | MODULEMAP_FILE = "Target Support Files/Pods-AttributedStringSugar_Example/Pods-AttributedStringSugar_Example.modulemap"; 568 | OTHER_LDFLAGS = ""; 569 | OTHER_LIBTOOLFLAGS = ""; 570 | PODS_ROOT = "$(SRCROOT)"; 571 | PRODUCT_BUNDLE_IDENTIFIER = "org.cocoapods.${PRODUCT_NAME:rfc1034identifier}"; 572 | PRODUCT_NAME = "$(TARGET_NAME:c99extidentifier)"; 573 | SDKROOT = iphoneos; 574 | SKIP_INSTALL = YES; 575 | TARGETED_DEVICE_FAMILY = "1,2"; 576 | VALIDATE_PRODUCT = YES; 577 | VERSIONING_SYSTEM = "apple-generic"; 578 | VERSION_INFO_PREFIX = ""; 579 | }; 580 | name = Release; 581 | }; 582 | 8F17DC3A99F99FBAD606CE6963886315 /* Release */ = { 583 | isa = XCBuildConfiguration; 584 | buildSettings = { 585 | ALWAYS_SEARCH_USER_PATHS = NO; 586 | CLANG_ANALYZER_NONNULL = YES; 587 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 588 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 589 | CLANG_CXX_LIBRARY = "libc++"; 590 | CLANG_ENABLE_MODULES = YES; 591 | CLANG_ENABLE_OBJC_ARC = YES; 592 | CLANG_ENABLE_OBJC_WEAK = YES; 593 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 594 | CLANG_WARN_BOOL_CONVERSION = YES; 595 | CLANG_WARN_COMMA = YES; 596 | CLANG_WARN_CONSTANT_CONVERSION = YES; 597 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 598 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 599 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 600 | CLANG_WARN_EMPTY_BODY = YES; 601 | CLANG_WARN_ENUM_CONVERSION = YES; 602 | CLANG_WARN_INFINITE_RECURSION = YES; 603 | CLANG_WARN_INT_CONVERSION = YES; 604 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 605 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 606 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 607 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 608 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 609 | CLANG_WARN_STRICT_PROTOTYPES = YES; 610 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 611 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 612 | CLANG_WARN_UNREACHABLE_CODE = YES; 613 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 614 | COPY_PHASE_STRIP = NO; 615 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 616 | ENABLE_NS_ASSERTIONS = NO; 617 | ENABLE_STRICT_OBJC_MSGSEND = YES; 618 | GCC_C_LANGUAGE_STANDARD = gnu11; 619 | GCC_NO_COMMON_BLOCKS = YES; 620 | GCC_PREPROCESSOR_DEFINITIONS = ( 621 | "POD_CONFIGURATION_RELEASE=1", 622 | "$(inherited)", 623 | ); 624 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 625 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 626 | GCC_WARN_UNDECLARED_SELECTOR = YES; 627 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 628 | GCC_WARN_UNUSED_FUNCTION = YES; 629 | GCC_WARN_UNUSED_VARIABLE = YES; 630 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 631 | MTL_ENABLE_DEBUG_INFO = NO; 632 | MTL_FAST_MATH = YES; 633 | PRODUCT_NAME = "$(TARGET_NAME)"; 634 | STRIP_INSTALLED_PRODUCT = NO; 635 | SWIFT_COMPILATION_MODE = wholemodule; 636 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 637 | SWIFT_VERSION = 5.0; 638 | SYMROOT = "${SRCROOT}/../build"; 639 | }; 640 | name = Release; 641 | }; 642 | 916E0404255105F480DC4950B7625F7A /* Debug */ = { 643 | isa = XCBuildConfiguration; 644 | buildSettings = { 645 | ALWAYS_SEARCH_USER_PATHS = NO; 646 | CLANG_ANALYZER_NONNULL = YES; 647 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 648 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 649 | CLANG_CXX_LIBRARY = "libc++"; 650 | CLANG_ENABLE_MODULES = YES; 651 | CLANG_ENABLE_OBJC_ARC = YES; 652 | CLANG_ENABLE_OBJC_WEAK = YES; 653 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 654 | CLANG_WARN_BOOL_CONVERSION = YES; 655 | CLANG_WARN_COMMA = YES; 656 | CLANG_WARN_CONSTANT_CONVERSION = YES; 657 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 658 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 659 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 660 | CLANG_WARN_EMPTY_BODY = YES; 661 | CLANG_WARN_ENUM_CONVERSION = YES; 662 | CLANG_WARN_INFINITE_RECURSION = YES; 663 | CLANG_WARN_INT_CONVERSION = YES; 664 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 665 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 666 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 667 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 668 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 669 | CLANG_WARN_STRICT_PROTOTYPES = YES; 670 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 671 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 672 | CLANG_WARN_UNREACHABLE_CODE = YES; 673 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 674 | COPY_PHASE_STRIP = NO; 675 | DEBUG_INFORMATION_FORMAT = dwarf; 676 | ENABLE_STRICT_OBJC_MSGSEND = YES; 677 | ENABLE_TESTABILITY = YES; 678 | GCC_C_LANGUAGE_STANDARD = gnu11; 679 | GCC_DYNAMIC_NO_PIC = NO; 680 | GCC_NO_COMMON_BLOCKS = YES; 681 | GCC_OPTIMIZATION_LEVEL = 0; 682 | GCC_PREPROCESSOR_DEFINITIONS = ( 683 | "POD_CONFIGURATION_DEBUG=1", 684 | "DEBUG=1", 685 | "$(inherited)", 686 | ); 687 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 688 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 689 | GCC_WARN_UNDECLARED_SELECTOR = YES; 690 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 691 | GCC_WARN_UNUSED_FUNCTION = YES; 692 | GCC_WARN_UNUSED_VARIABLE = YES; 693 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 694 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 695 | MTL_FAST_MATH = YES; 696 | ONLY_ACTIVE_ARCH = YES; 697 | PRODUCT_NAME = "$(TARGET_NAME)"; 698 | STRIP_INSTALLED_PRODUCT = NO; 699 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 700 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 701 | SWIFT_VERSION = 5.0; 702 | SYMROOT = "${SRCROOT}/../build"; 703 | }; 704 | name = Debug; 705 | }; 706 | A441B19A3245E1B6FD6861C00E5F4DEC /* Release */ = { 707 | isa = XCBuildConfiguration; 708 | baseConfigurationReference = E1F7EA885CB238E5766714E7A9143CAA /* AttributedStringSugar.release.xcconfig */; 709 | buildSettings = { 710 | CODE_SIGN_IDENTITY = ""; 711 | "CODE_SIGN_IDENTITY[sdk=appletvos*]" = ""; 712 | "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = ""; 713 | "CODE_SIGN_IDENTITY[sdk=watchos*]" = ""; 714 | CURRENT_PROJECT_VERSION = 1; 715 | DEFINES_MODULE = YES; 716 | DYLIB_COMPATIBILITY_VERSION = 1; 717 | DYLIB_CURRENT_VERSION = 1; 718 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 719 | GCC_PREFIX_HEADER = "Target Support Files/AttributedStringSugar/AttributedStringSugar-prefix.pch"; 720 | INFOPLIST_FILE = "Target Support Files/AttributedStringSugar/AttributedStringSugar-Info.plist"; 721 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 722 | IPHONEOS_DEPLOYMENT_TARGET = 9.0; 723 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; 724 | MODULEMAP_FILE = "Target Support Files/AttributedStringSugar/AttributedStringSugar.modulemap"; 725 | PRODUCT_MODULE_NAME = AttributedStringSugar; 726 | PRODUCT_NAME = AttributedStringSugar; 727 | SDKROOT = iphoneos; 728 | SKIP_INSTALL = YES; 729 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) "; 730 | SWIFT_VERSION = 5.0; 731 | TARGETED_DEVICE_FAMILY = "1,2"; 732 | VALIDATE_PRODUCT = YES; 733 | VERSIONING_SYSTEM = "apple-generic"; 734 | VERSION_INFO_PREFIX = ""; 735 | }; 736 | name = Release; 737 | }; 738 | /* End XCBuildConfiguration section */ 739 | 740 | /* Begin XCConfigurationList section */ 741 | 4821239608C13582E20E6DA73FD5F1F9 /* Build configuration list for PBXProject "Pods" */ = { 742 | isa = XCConfigurationList; 743 | buildConfigurations = ( 744 | 916E0404255105F480DC4950B7625F7A /* Debug */, 745 | 8F17DC3A99F99FBAD606CE6963886315 /* Release */, 746 | ); 747 | defaultConfigurationIsVisible = 0; 748 | defaultConfigurationName = Release; 749 | }; 750 | 576C8F62E047A7EBA1570BC1C5CCA4F2 /* Build configuration list for PBXNativeTarget "Pods-AttributedStringSugar_Tests" */ = { 751 | isa = XCConfigurationList; 752 | buildConfigurations = ( 753 | 7191C162CDA42AEB2EBEB924BA219DE0 /* Debug */, 754 | 1D443022B47979B0D760591AAC617D84 /* Release */, 755 | ); 756 | defaultConfigurationIsVisible = 0; 757 | defaultConfigurationName = Release; 758 | }; 759 | 68F5CCEEC2BC643ECD7817F5CC1EF3D9 /* Build configuration list for PBXNativeTarget "AttributedStringSugar" */ = { 760 | isa = XCConfigurationList; 761 | buildConfigurations = ( 762 | 807B78F7E0FF772EFD83055A059E6272 /* Debug */, 763 | A441B19A3245E1B6FD6861C00E5F4DEC /* Release */, 764 | ); 765 | defaultConfigurationIsVisible = 0; 766 | defaultConfigurationName = Release; 767 | }; 768 | A8974CD2738CD73B7828EBC0AD5D35E6 /* Build configuration list for PBXNativeTarget "Pods-AttributedStringSugar_Example" */ = { 769 | isa = XCConfigurationList; 770 | buildConfigurations = ( 771 | 5662E0C4332DC4CA3283AE29EA5C6339 /* Debug */, 772 | 8F06B4CE23E7A006FF6E4810352E947E /* Release */, 773 | ); 774 | defaultConfigurationIsVisible = 0; 775 | defaultConfigurationName = Release; 776 | }; 777 | /* End XCConfigurationList section */ 778 | }; 779 | rootObject = BFDFE7DC352907FC980B868725387E98 /* Project object */; 780 | } 781 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example/Pods/Pods.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AttributedStringSugar/AttributedStringSugar-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.5 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AttributedStringSugar/AttributedStringSugar-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_AttributedStringSugar : NSObject 3 | @end 4 | @implementation PodsDummy_AttributedStringSugar 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AttributedStringSugar/AttributedStringSugar-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AttributedStringSugar/AttributedStringSugar-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double AttributedStringSugarVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char AttributedStringSugarVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AttributedStringSugar/AttributedStringSugar.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AttributedStringSugar 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_LDFLAGS = $(inherited) -framework "UIKit" 4 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 12 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AttributedStringSugar/AttributedStringSugar.modulemap: -------------------------------------------------------------------------------- 1 | framework module AttributedStringSugar { 2 | umbrella header "AttributedStringSugar-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/AttributedStringSugar/AttributedStringSugar.release.xcconfig: -------------------------------------------------------------------------------- 1 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/AttributedStringSugar 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | OTHER_LDFLAGS = $(inherited) -framework "UIKit" 4 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_ROOT = ${SRCROOT} 8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/../.. 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 12 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AttributedStringSugar_Example/Pods-AttributedStringSugar_Example-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AttributedStringSugar_Example/Pods-AttributedStringSugar_Example-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | 4 | ## AttributedStringSugar 5 | 6 | Copyright (c) 2020 Elon Park 7 | 8 | Permission is hereby granted, free of charge, to any person obtaining a copy 9 | of this software and associated documentation files (the "Software"), to deal 10 | in the Software without restriction, including without limitation the rights 11 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 12 | copies of the Software, and to permit persons to whom the Software is 13 | furnished to do so, subject to the following conditions: 14 | 15 | The above copyright notice and this permission notice shall be included in 16 | all copies or substantial portions of the Software. 17 | 18 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 19 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 20 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 21 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 22 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 23 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 24 | THE SOFTWARE. 25 | 26 | Generated by CocoaPods - https://cocoapods.org 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AttributedStringSugar_Example/Pods-AttributedStringSugar_Example-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Copyright (c) 2020 Elon Park <sungwoon.park92@gmail.com> 18 | 19 | Permission is hereby granted, free of charge, to any person obtaining a copy 20 | of this software and associated documentation files (the "Software"), to deal 21 | in the Software without restriction, including without limitation the rights 22 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 23 | copies of the Software, and to permit persons to whom the Software is 24 | furnished to do so, subject to the following conditions: 25 | 26 | The above copyright notice and this permission notice shall be included in 27 | all copies or substantial portions of the Software. 28 | 29 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 30 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 31 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 32 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 33 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 34 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 35 | THE SOFTWARE. 36 | 37 | License 38 | MIT 39 | Title 40 | AttributedStringSugar 41 | Type 42 | PSGroupSpecifier 43 | 44 | 45 | FooterText 46 | Generated by CocoaPods - https://cocoapods.org 47 | Title 48 | 49 | Type 50 | PSGroupSpecifier 51 | 52 | 53 | StringsTable 54 | Acknowledgements 55 | Title 56 | Acknowledgements 57 | 58 | 59 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AttributedStringSugar_Example/Pods-AttributedStringSugar_Example-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_AttributedStringSugar_Example : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_AttributedStringSugar_Example 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AttributedStringSugar_Example/Pods-AttributedStringSugar_Example-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | set -u 4 | set -o pipefail 5 | 6 | function on_error { 7 | echo "$(realpath -mq "${0}"):$1: error: Unexpected failure" 8 | } 9 | trap 'on_error $LINENO' ERR 10 | 11 | if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then 12 | # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy 13 | # frameworks to, so exit 0 (signalling the script phase was successful). 14 | exit 0 15 | fi 16 | 17 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 18 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 19 | 20 | COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}" 21 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 22 | 23 | # Used as a return value for each invocation of `strip_invalid_archs` function. 24 | STRIP_BINARY_RETVAL=0 25 | 26 | # This protects against multiple targets copying the same framework dependency at the same time. The solution 27 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html 28 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????") 29 | 30 | # Copies and strips a vendored framework 31 | install_framework() 32 | { 33 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 34 | local source="${BUILT_PRODUCTS_DIR}/$1" 35 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 36 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 37 | elif [ -r "$1" ]; then 38 | local source="$1" 39 | fi 40 | 41 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 42 | 43 | if [ -L "${source}" ]; then 44 | echo "Symlinked..." 45 | source="$(readlink "${source}")" 46 | fi 47 | 48 | # Use filter instead of exclude so missing patterns don't throw errors. 49 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 50 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 51 | 52 | local basename 53 | basename="$(basename -s .framework "$1")" 54 | binary="${destination}/${basename}.framework/${basename}" 55 | 56 | if ! [ -r "$binary" ]; then 57 | binary="${destination}/${basename}" 58 | elif [ -L "${binary}" ]; then 59 | echo "Destination binary is symlinked..." 60 | dirname="$(dirname "${binary}")" 61 | binary="${dirname}/$(readlink "${binary}")" 62 | fi 63 | 64 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 65 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 66 | strip_invalid_archs "$binary" 67 | fi 68 | 69 | # Resign the code if required by the build settings to avoid unstable apps 70 | code_sign_if_enabled "${destination}/$(basename "$1")" 71 | 72 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 73 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 74 | local swift_runtime_libs 75 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u) 76 | for lib in $swift_runtime_libs; do 77 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 78 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 79 | code_sign_if_enabled "${destination}/${lib}" 80 | done 81 | fi 82 | } 83 | 84 | # Copies and strips a vendored dSYM 85 | install_dsym() { 86 | local source="$1" 87 | warn_missing_arch=${2:-true} 88 | if [ -r "$source" ]; then 89 | # Copy the dSYM into the targets temp dir. 90 | 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}\"" 91 | 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}" 92 | 93 | local basename 94 | basename="$(basename -s .dSYM "$source")" 95 | binary_name="$(ls "$source/Contents/Resources/DWARF")" 96 | binary="${DERIVED_FILES_DIR}/${basename}.dSYM/Contents/Resources/DWARF/${binary_name}" 97 | 98 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 99 | if [[ "$(file "$binary")" == *"Mach-O "*"dSYM companion"* ]]; then 100 | strip_invalid_archs "$binary" "$warn_missing_arch" 101 | fi 102 | 103 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then 104 | # Move the stripped file into its final destination. 105 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\"" 106 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --links --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.dSYM" "${DWARF_DSYM_FOLDER_PATH}" 107 | else 108 | # 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. 109 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.dSYM" 110 | fi 111 | fi 112 | } 113 | 114 | # Copies the bcsymbolmap files of a vendored framework 115 | install_bcsymbolmap() { 116 | local bcsymbolmap_path="$1" 117 | local destination="${BUILT_PRODUCTS_DIR}" 118 | 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}"" 119 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${bcsymbolmap_path}" "${destination}" 120 | } 121 | 122 | # Signs a framework with the provided identity 123 | code_sign_if_enabled() { 124 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY:-}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 125 | # Use the current code_sign_identity 126 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 127 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'" 128 | 129 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 130 | code_sign_cmd="$code_sign_cmd &" 131 | fi 132 | echo "$code_sign_cmd" 133 | eval "$code_sign_cmd" 134 | fi 135 | } 136 | 137 | # Strip invalid architectures 138 | strip_invalid_archs() { 139 | binary="$1" 140 | warn_missing_arch=${2:-true} 141 | # Get architectures for current target binary 142 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)" 143 | # Intersect them with the architectures we are building for 144 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)" 145 | # If there are no archs supported by this binary then warn the user 146 | if [[ -z "$intersected_archs" ]]; then 147 | if [[ "$warn_missing_arch" == "true" ]]; then 148 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)." 149 | fi 150 | STRIP_BINARY_RETVAL=0 151 | return 152 | fi 153 | stripped="" 154 | for arch in $binary_archs; do 155 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then 156 | # Strip non-valid architectures in-place 157 | lipo -remove "$arch" -output "$binary" "$binary" 158 | stripped="$stripped $arch" 159 | fi 160 | done 161 | if [[ "$stripped" ]]; then 162 | echo "Stripped $binary of architectures:$stripped" 163 | fi 164 | STRIP_BINARY_RETVAL=1 165 | } 166 | 167 | install_artifact() { 168 | artifact="$1" 169 | base="$(basename "$artifact")" 170 | case $base in 171 | *.framework) 172 | install_framework "$artifact" 173 | ;; 174 | *.dSYM) 175 | # Suppress arch warnings since XCFrameworks will include many dSYM files 176 | install_dsym "$artifact" "false" 177 | ;; 178 | *.bcsymbolmap) 179 | install_bcsymbolmap "$artifact" 180 | ;; 181 | *) 182 | echo "error: Unrecognized artifact "$artifact"" 183 | ;; 184 | esac 185 | } 186 | 187 | copy_artifacts() { 188 | file_list="$1" 189 | while read artifact; do 190 | install_artifact "$artifact" 191 | done <$file_list 192 | } 193 | 194 | ARTIFACT_LIST_FILE="${BUILT_PRODUCTS_DIR}/cocoapods-artifacts-${CONFIGURATION}.txt" 195 | if [ -r "${ARTIFACT_LIST_FILE}" ]; then 196 | copy_artifacts "${ARTIFACT_LIST_FILE}" 197 | fi 198 | 199 | if [[ "$CONFIGURATION" == "Debug" ]]; then 200 | install_framework "${BUILT_PRODUCTS_DIR}/AttributedStringSugar/AttributedStringSugar.framework" 201 | fi 202 | if [[ "$CONFIGURATION" == "Release" ]]; then 203 | install_framework "${BUILT_PRODUCTS_DIR}/AttributedStringSugar/AttributedStringSugar.framework" 204 | fi 205 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then 206 | wait 207 | fi 208 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AttributedStringSugar_Example/Pods-AttributedStringSugar_Example-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_AttributedStringSugar_ExampleVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_AttributedStringSugar_ExampleVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AttributedStringSugar_Example/Pods-AttributedStringSugar_Example.debug.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AttributedStringSugar" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AttributedStringSugar/AttributedStringSugar.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "AttributedStringSugar" -framework "UIKit" 7 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AttributedStringSugar_Example/Pods-AttributedStringSugar_Example.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_AttributedStringSugar_Example { 2 | umbrella header "Pods-AttributedStringSugar_Example-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AttributedStringSugar_Example/Pods-AttributedStringSugar_Example.release.xcconfig: -------------------------------------------------------------------------------- 1 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES 2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AttributedStringSugar" 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AttributedStringSugar/AttributedStringSugar.framework/Headers" 5 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/Frameworks' '@loader_path/Frameworks' 6 | OTHER_LDFLAGS = $(inherited) -framework "AttributedStringSugar" -framework "UIKit" 7 | OTHER_SWIFT_FLAGS = $(inherited) -D COCOAPODS 8 | PODS_BUILD_DIR = ${BUILD_DIR} 9 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 10 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 11 | PODS_ROOT = ${SRCROOT}/Pods 12 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 13 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AttributedStringSugar_Tests/Pods-AttributedStringSugar_Tests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AttributedStringSugar_Tests/Pods-AttributedStringSugar_Tests-acknowledgements.markdown: -------------------------------------------------------------------------------- 1 | # Acknowledgements 2 | This application makes use of the following third party libraries: 3 | Generated by CocoaPods - https://cocoapods.org 4 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AttributedStringSugar_Tests/Pods-AttributedStringSugar_Tests-acknowledgements.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | PreferenceSpecifiers 6 | 7 | 8 | FooterText 9 | This application makes use of the following third party libraries: 10 | Title 11 | Acknowledgements 12 | Type 13 | PSGroupSpecifier 14 | 15 | 16 | FooterText 17 | Generated by CocoaPods - https://cocoapods.org 18 | Title 19 | 20 | Type 21 | PSGroupSpecifier 22 | 23 | 24 | StringsTable 25 | Acknowledgements 26 | Title 27 | Acknowledgements 28 | 29 | 30 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AttributedStringSugar_Tests/Pods-AttributedStringSugar_Tests-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_AttributedStringSugar_Tests : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_AttributedStringSugar_Tests 5 | @end 6 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AttributedStringSugar_Tests/Pods-AttributedStringSugar_Tests-umbrella.h: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #else 4 | #ifndef FOUNDATION_EXPORT 5 | #if defined(__cplusplus) 6 | #define FOUNDATION_EXPORT extern "C" 7 | #else 8 | #define FOUNDATION_EXPORT extern 9 | #endif 10 | #endif 11 | #endif 12 | 13 | 14 | FOUNDATION_EXPORT double Pods_AttributedStringSugar_TestsVersionNumber; 15 | FOUNDATION_EXPORT const unsigned char Pods_AttributedStringSugar_TestsVersionString[]; 16 | 17 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AttributedStringSugar_Tests/Pods-AttributedStringSugar_Tests.debug.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AttributedStringSugar" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AttributedStringSugar/AttributedStringSugar.framework/Headers" 4 | OTHER_LDFLAGS = $(inherited) -framework "AttributedStringSugar" -framework "UIKit" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 10 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AttributedStringSugar_Tests/Pods-AttributedStringSugar_Tests.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_AttributedStringSugar_Tests { 2 | umbrella header "Pods-AttributedStringSugar_Tests-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Example/Pods/Target Support Files/Pods-AttributedStringSugar_Tests/Pods-AttributedStringSugar_Tests.release.xcconfig: -------------------------------------------------------------------------------- 1 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AttributedStringSugar" 2 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 3 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/AttributedStringSugar/AttributedStringSugar.framework/Headers" 4 | OTHER_LDFLAGS = $(inherited) -framework "AttributedStringSugar" -framework "UIKit" 5 | PODS_BUILD_DIR = ${BUILD_DIR} 6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 7 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/. 8 | PODS_ROOT = ${SRCROOT}/Pods 9 | USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES = YES 10 | -------------------------------------------------------------------------------- /Example/Tests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /Example/Tests/Tests.swift: -------------------------------------------------------------------------------- 1 | import XCTest 2 | import AttributedStringSugar 3 | 4 | class Tests: XCTestCase { 5 | 6 | override func setUp() { 7 | super.setUp() 8 | // Put setup code here. This method is called before the invocation of each test method in the class. 9 | } 10 | 11 | override func tearDown() { 12 | // Put teardown code here. This method is called after the invocation of each test method in the class. 13 | super.tearDown() 14 | } 15 | 16 | func testExample() { 17 | // This is an example of a functional test case. 18 | XCTAssert(true, "Pass") 19 | } 20 | 21 | func testPerformanceExample() { 22 | // This is an example of a performance test case. 23 | self.measure() { 24 | // Put the code you want to measure the time of here. 25 | } 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2020 Elon Park 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AttributedStringSugar 2 | 3 | [![CI Status](https://img.shields.io/travis/ElonPark/AttributedStringSugar.svg?style=flat)](https://travis-ci.org/ElonPark/AttributedStringSugar) 4 | [![Version](https://img.shields.io/cocoapods/v/AttributedStringSugar.svg?style=flat)](https://cocoapods.org/pods/AttributedStringSugar) 5 | [![License](https://img.shields.io/cocoapods/l/AttributedStringSugar.svg?style=flat)](https://cocoapods.org/pods/AttributedStringSugar) 6 | [![Platform](https://img.shields.io/cocoapods/p/AttributedStringSugar.svg?style=flat)](https://cocoapods.org/pods/AttributedStringSugar) 7 | 8 | ## Feature 9 | 10 | NSAttributedString sugar using builder pattern. 11 | 12 |

13 | 14 |

15 | 16 | more detail, see Example 17 | 18 | ## Example 19 | 20 | To run the example project, clone the repo, and run `pod install` from the Example directory first. 21 | 22 | ## Requirements 23 | Swift 5.0 24 | 25 | ## Installation 26 | 27 | AttributedStringSugar is available through [CocoaPods](https://cocoapods.org). To install 28 | it, simply add the following line to your Podfile: 29 | 30 | ```ruby 31 | pod 'AttributedStringSugar' 32 | ``` 33 | 34 | ## Author 35 | 36 | Elon Park, sungwoon.park92@gmail.com 37 | 38 | ## License 39 | 40 | AttributedStringSugar is available under the MIT license. See the LICENSE file for more info. 41 | -------------------------------------------------------------------------------- /_Pods.xcodeproj: -------------------------------------------------------------------------------- 1 | Example/Pods/Pods.xcodeproj --------------------------------------------------------------------------------