├── .gitignore ├── .swiftpm └── xcode │ └── package.xcworkspace │ └── contents.xcworkspacedata ├── Example-iOS ├── AppDelegate.swift ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ └── Contents.json │ └── Contents.json ├── Base.lproj │ ├── LaunchScreen.storyboard │ └── Main.storyboard ├── Info.plist └── ViewController.swift ├── Example-macOS ├── AppDelegate.swift ├── Assets.xcassets │ └── AppIcon.appiconset │ │ └── Contents.json ├── Base.lproj │ └── Main.storyboard ├── Example_macOS.entitlements ├── Info.plist └── ViewController.swift ├── LICENSE ├── Package.swift ├── README.md ├── Sources ├── Info.plist └── SwimplyLabel │ └── SwimplyLabel.swift ├── SwimplyLabel.podspec └── SwimplyLabel.xcodeproj ├── project.pbxproj ├── project.xcworkspace ├── contents.xcworkspacedata └── xcshareddata │ ├── IDEWorkspaceChecks.plist │ └── swiftpm │ └── Package.resolved └── xcshareddata └── xcschemes ├── SwimplyCache-iOS.xcscheme ├── SwimplyCache-macOS.xcscheme └── SwimplyCache-tvOS.xcscheme /.gitignore: -------------------------------------------------------------------------------- 1 | # Xcode 2 | # 3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 4 | 5 | ## Build generated 6 | build/ 7 | DerivedData/ 8 | 9 | ## Various settings 10 | *.pbxuser 11 | !default.pbxuser 12 | *.mode1v3 13 | !default.mode1v3 14 | *.mode2v3 15 | !default.mode2v3 16 | *.perspectivev3 17 | !default.perspectivev3 18 | xcuserdata/ 19 | 20 | ## Other 21 | *.moved-aside 22 | *.xcuserstate 23 | 24 | ## Obj-C/Swift specific 25 | *.hmap 26 | *.ipa 27 | *.dSYM.zip 28 | *.dSYM 29 | 30 | # CocoaPods 31 | # 32 | # We recommend against adding the Pods directory to your .gitignore. However 33 | # you should judge for yourself, the pros and cons are mentioned at: 34 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 35 | # 36 | Pods/ 37 | 38 | # Carthage 39 | # 40 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 41 | # Carthage/Checkouts 42 | 43 | Carthage/Build 44 | 45 | # fastlane 46 | # 47 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 48 | # screenshots whenever they are needed. 49 | # For more information about the recommended setup visit: 50 | # https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md 51 | 52 | fastlane/report.xml 53 | fastlane/screenshots 54 | 55 | # Code Injection 56 | # 57 | # After new code Injection tools there's a generated folder /iOSInjectionProject 58 | # https://github.com/johnno1962/injectionforxcode 59 | 60 | iOSInjectionProject/ 61 | 62 | *.DS_Store 63 | .AppleDouble 64 | .LSOverride 65 | 66 | # Icon must end with two \r 67 | Icon 68 | 69 | 70 | # Thumbnails 71 | ._* 72 | 73 | # Files that might appear in the root of a volume 74 | .DocumentRevisions-V100 75 | .fseventsd 76 | .Spotlight-V100 77 | .TemporaryItems 78 | .Trashes 79 | .VolumeIcon.icns 80 | .com.apple.timemachine.donotpresent 81 | 82 | # Directories potentially created on remote AFP share 83 | .AppleDB 84 | .AppleDesktop 85 | Network Trash Folder 86 | Temporary Items 87 | .apdisk 88 | 89 | .idea 90 | */xcuserdata/* 91 | .swiftpm 92 | Package.resolved 93 | -------------------------------------------------------------------------------- /.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Example-iOS/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | 3 | @UIApplicationMain 4 | class AppDelegate: UIResponder, UIApplicationDelegate { 5 | var window: UIWindow? 6 | 7 | func application(_: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 8 | return true 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /Example-iOS/Assets.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" : "ipad", 45 | "size" : "20x20", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "ipad", 50 | "size" : "20x20", 51 | "scale" : "2x" 52 | }, 53 | { 54 | "idiom" : "ipad", 55 | "size" : "29x29", 56 | "scale" : "1x" 57 | }, 58 | { 59 | "idiom" : "ipad", 60 | "size" : "29x29", 61 | "scale" : "2x" 62 | }, 63 | { 64 | "idiom" : "ipad", 65 | "size" : "40x40", 66 | "scale" : "1x" 67 | }, 68 | { 69 | "idiom" : "ipad", 70 | "size" : "40x40", 71 | "scale" : "2x" 72 | }, 73 | { 74 | "idiom" : "ipad", 75 | "size" : "76x76", 76 | "scale" : "1x" 77 | }, 78 | { 79 | "idiom" : "ipad", 80 | "size" : "76x76", 81 | "scale" : "2x" 82 | }, 83 | { 84 | "idiom" : "ipad", 85 | "size" : "83.5x83.5", 86 | "scale" : "2x" 87 | }, 88 | { 89 | "idiom" : "ios-marketing", 90 | "size" : "1024x1024", 91 | "scale" : "1x" 92 | } 93 | ], 94 | "info" : { 95 | "version" : 1, 96 | "author" : "xcode" 97 | } 98 | } -------------------------------------------------------------------------------- /Example-iOS/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Example-iOS/Base.lproj/LaunchScreen.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 | -------------------------------------------------------------------------------- /Example-iOS/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 | Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /Example-iOS/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 | APPL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleVersion 20 | 1 21 | LSRequiresIPhoneOS 22 | 23 | UILaunchStoryboardName 24 | LaunchScreen 25 | UIMainStoryboardFile 26 | Main 27 | UIRequiredDeviceCapabilities 28 | 29 | armv7 30 | 31 | UISupportedInterfaceOrientations 32 | 33 | UIInterfaceOrientationPortrait 34 | UIInterfaceOrientationLandscapeLeft 35 | UIInterfaceOrientationLandscapeRight 36 | 37 | UISupportedInterfaceOrientations~ipad 38 | 39 | UIInterfaceOrientationPortrait 40 | UIInterfaceOrientationPortraitUpsideDown 41 | UIInterfaceOrientationLandscapeLeft 42 | UIInterfaceOrientationLandscapeRight 43 | 44 | 45 | 46 | -------------------------------------------------------------------------------- /Example-iOS/ViewController.swift: -------------------------------------------------------------------------------- 1 | import SwimplyLabel 2 | import UIKit 3 | 4 | class ViewController: UIViewController { 5 | @IBOutlet var textLabel: SwimplyLabel? 6 | 7 | override func viewDidLoad() { 8 | super.viewDidLoad() 9 | textLabel?.numberOfLines = 0 10 | textLabel?.lineBreakMode = .byWordWrapping 11 | textLabel?.insets = .init(top: 30, left: 30, bottom: 30, right: 30) 12 | textLabel?.textBackground = UIColor(white: 0.7, alpha: 1.0) 13 | textLabel?.layer.backgroundColor = UIColor(white: 0.9, alpha: 1.0).cgColor 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /Example-macOS/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | 3 | @NSApplicationMain 4 | class AppDelegate: NSObject, NSApplicationDelegate {} 5 | -------------------------------------------------------------------------------- /Example-macOS/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "mac", 5 | "size" : "16x16", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "mac", 10 | "size" : "16x16", 11 | "scale" : "2x" 12 | }, 13 | { 14 | "idiom" : "mac", 15 | "size" : "32x32", 16 | "scale" : "1x" 17 | }, 18 | { 19 | "idiom" : "mac", 20 | "size" : "32x32", 21 | "scale" : "2x" 22 | }, 23 | { 24 | "idiom" : "mac", 25 | "size" : "128x128", 26 | "scale" : "1x" 27 | }, 28 | { 29 | "idiom" : "mac", 30 | "size" : "128x128", 31 | "scale" : "2x" 32 | }, 33 | { 34 | "idiom" : "mac", 35 | "size" : "256x256", 36 | "scale" : "1x" 37 | }, 38 | { 39 | "idiom" : "mac", 40 | "size" : "256x256", 41 | "scale" : "2x" 42 | }, 43 | { 44 | "idiom" : "mac", 45 | "size" : "512x512", 46 | "scale" : "1x" 47 | }, 48 | { 49 | "idiom" : "mac", 50 | "size" : "512x512", 51 | "scale" : "2x" 52 | } 53 | ], 54 | "info" : { 55 | "version" : 1, 56 | "author" : "xcode" 57 | } 58 | } -------------------------------------------------------------------------------- /Example-macOS/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 528 | 529 | Default 530 | 531 | 532 | 533 | 534 | 535 | 536 | Left to Right 537 | 538 | 539 | 540 | 541 | 542 | 543 | Right to Left 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 | 553 | 554 | Default 555 | 556 | 557 | 558 | 559 | 560 | 561 | Left to Right 562 | 563 | 564 | 565 | 566 | 567 | 568 | Right to Left 569 | 570 | 571 | 572 | 573 | 574 | 575 | 576 | 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | 591 | 592 | 593 | 594 | 595 | 596 | 597 | 598 | 599 | 600 | 601 | 602 | 603 | 604 | 605 | 606 | 607 | 608 | 609 | 610 | 611 | 612 | 613 | 614 | 615 | 616 | 617 | 618 | 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 651 | 652 | 653 | 654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | 662 | 663 | 664 | 665 | 666 | 667 | 668 | 669 | 670 | 671 | 672 | 673 | 674 | 675 | 676 | 677 | 678 | 679 | 680 | 681 | 682 | 683 | 684 | 685 | 686 | 687 | 688 | 689 | 690 | 691 | 692 | 693 | 694 | 695 | 696 | 697 | 698 | 699 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 725 | 726 | 727 | 728 | 729 | 730 | 731 | 732 | 733 | 734 | 735 | 736 | 737 | -------------------------------------------------------------------------------- /Example-macOS/Example_macOS.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.files.user-selected.read-only 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Example-macOS/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleVersion 22 | 1 23 | LSMinimumSystemVersion 24 | $(MACOSX_DEPLOYMENT_TARGET) 25 | NSHumanReadableCopyright 26 | Copyright © 2020 Dennis Oberhoff. All rights reserved. 27 | NSMainStoryboardFile 28 | Main 29 | NSPrincipalClass 30 | NSApplication 31 | NSSupportsAutomaticTermination 32 | 33 | NSSupportsSuddenTermination 34 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /Example-macOS/ViewController.swift: -------------------------------------------------------------------------------- 1 | import Cocoa 2 | import SwimplyLabel 3 | 4 | class ViewController: NSViewController { 5 | @IBOutlet var textLabel: SwimplyLabel? 6 | 7 | override func viewDidLoad() { 8 | super.viewDidLoad() 9 | textLabel?.numberOfLines = 0 10 | textLabel?.lineBreakMode = .byWordWrapping 11 | textLabel?.insets = .init(top: 30, left: 30, bottom: 30, right: 30) 12 | textLabel?.textBackground = NSColor(white: 0.7, alpha: 1.0) 13 | textLabel?.layer?.backgroundColor = NSColor(white: 0.9, alpha: 1.0).cgColor 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Dennis Oberhoff 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Package.swift: -------------------------------------------------------------------------------- 1 | // swift-tools-version:5.1 2 | // The swift-tools-version declares the minimum version of Swift required to build this package. 3 | 4 | import PackageDescription 5 | 6 | let package = Package( 7 | name: "SwimplyLabel", 8 | platforms: [ 9 | .iOS(.v10), .macOS(.v10_12), .tvOS(.v10), 10 | ], 11 | products: [ 12 | .library( 13 | name: "SwimplyLabel", 14 | targets: ["SwimplyLabel"] 15 | ), 16 | ], 17 | dependencies: [ 18 | .package(url: "https://github.com/docterd/SwimplyCache.git", from: "1.0.1"), 19 | ], 20 | targets: [ 21 | .target( 22 | name: "SwimplyLabel", 23 | dependencies: ["SwimplyCache"] 24 | ), 25 | ] 26 | ) 27 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SwimplyLabel 2 | SwimplyLabel is a UILabel replacement for macOS and iOS. It is currently used in my macOS App [DaftCloud](https://itunes.apple.com/us/app/daftcloud/id1320450034?mt=12). 3 | DOLabel is based on CoreText and draws it's content directly into a CALayer for a better performance. 4 | 5 | ![Image](http://droplr.obrhoff.de/y8FCi4+) 6 | -------------------------------------------------------------------------------- /Sources/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 | 1.0 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | 22 | 23 | -------------------------------------------------------------------------------- /Sources/SwimplyLabel/SwimplyLabel.swift: -------------------------------------------------------------------------------- 1 | import CoreText 2 | import Foundation 3 | import SwimplyCache 4 | 5 | #if os(iOS) || os(tvOS) 6 | import UIKit 7 | public typealias Rect = CGRect 8 | public typealias Size = CGSize 9 | public typealias EdgeInsets = UIEdgeInsets 10 | public typealias Font = UIFont 11 | public typealias View = UIView 12 | public typealias Color = UIColor 13 | public typealias LineBreakMode = NSLineBreakMode 14 | public typealias LayoutPriority = UILayoutPriority 15 | #elseif os(OSX) 16 | import AppKit 17 | public typealias Rect = NSRect 18 | public typealias Size = NSSize 19 | public typealias EdgeInsets = NSEdgeInsets 20 | public typealias Font = NSFont 21 | public typealias View = NSView 22 | public typealias Color = NSColor 23 | public typealias LineBreakMode = NSLineBreakMode 24 | public typealias LayoutPriority = NSLayoutConstraint.Priority 25 | #endif 26 | 27 | @IBDesignable open class SwimplyLabel: View { 28 | private struct CacheKey: Hashable { 29 | let text: String? 30 | let boundWidth: CGFloat 31 | let alignment: NSTextAlignment 32 | let lineSpacing: CGFloat 33 | let kerning: CGFloat 34 | let pointSize: CGFloat 35 | let insets: SwimplyLabel.ContentEdgeInsets 36 | let preferredMaxLayoutWidth: CGFloat? 37 | let numberOfLines: Int 38 | } 39 | 40 | private struct CacheItem { 41 | let size: CGSize 42 | let drawingRect: CGRect 43 | } 44 | 45 | private struct ContentEdgeInsets: Hashable { 46 | let top: CGFloat 47 | let left: CGFloat 48 | let right: CGFloat 49 | let bottom: CGFloat 50 | } 51 | 52 | private static let sharedCache = SwimplyCache() 53 | private var shouldAntialias = true 54 | private var shouldSmoothFonts = true 55 | private var shouldSubpixelPositionFonts = false 56 | private var shouldSubpixelQuantizeFonts = false 57 | private var contentInsets: SwimplyLabel.ContentEdgeInsets = .init(top: 0, left: 0, right: 0, bottom: 0) 58 | 59 | override open var intrinsicContentSize: Size { 60 | return drawingRect.size 61 | } 62 | 63 | private var labelLayer: DOLayer? { 64 | return layer as? DOLayer 65 | } 66 | 67 | private var cacheKey: CacheKey { 68 | return CacheKey(text: text, 69 | boundWidth: bounds.width, 70 | alignment: textAlignment, 71 | lineSpacing: lineSpacing, kerning: kerning, 72 | pointSize: font.pointSize, 73 | insets: contentInsets, 74 | preferredMaxLayoutWidth: preferredMaxLayoutWidth, 75 | numberOfLines: numberOfLines) 76 | } 77 | 78 | private var defaultAttributedDict: [NSAttributedString.Key: Any] { 79 | var attributes = [ 80 | .font: font, 81 | .foregroundColor: textColor, 82 | .backgroundColor: textBackground, 83 | .paragraphStyle: drawingParagraphStyle, 84 | .kern: kerning, 85 | ] as [NSAttributedString.Key: Any] 86 | 87 | if let shadow = textShadow { 88 | attributes[.shadow] = shadow 89 | } 90 | return attributes 91 | } 92 | 93 | private var drawingParagraphStyle: NSMutableParagraphStyle { 94 | let style = NSMutableParagraphStyle() 95 | style.alignment = textAlignment 96 | style.lineBreakMode = lineBreakMode 97 | style.lineSpacing = lineSpacing 98 | return style 99 | } 100 | 101 | private var drawingRect: CGRect = .zero { 102 | didSet { 103 | if oldValue == drawingRect { return } 104 | invalidateIntrinsicContentSize() 105 | } 106 | } 107 | 108 | @IBInspectable open var text: String? { 109 | didSet { 110 | if oldValue == text { return } 111 | needsContentDisplay() 112 | } 113 | } 114 | 115 | @IBInspectable open var textColor = Color.labelColor { 116 | didSet { 117 | if oldValue == textColor { return } 118 | needsContentDisplay() 119 | } 120 | } 121 | 122 | @IBInspectable open var textBackground = Color.clear { 123 | didSet { 124 | if oldValue == textBackground { return } 125 | self.needsContentDisplay() 126 | } 127 | } 128 | 129 | open var textShadow: NSShadow? { 130 | didSet { 131 | if oldValue == textShadow { return } 132 | needsContentDisplay() 133 | } 134 | } 135 | 136 | @IBInspectable open var font = Font.systemFont(ofSize: 14) { 137 | didSet { 138 | if oldValue == font { return } 139 | needsContentDisplay() 140 | } 141 | } 142 | 143 | open var textAlignment: NSTextAlignment = .left { 144 | didSet { 145 | if oldValue == textAlignment { return } 146 | needsContentDisplay() 147 | } 148 | } 149 | 150 | @IBInspectable open var numberOfLines = 1 { 151 | didSet { 152 | if oldValue == numberOfLines { return } 153 | needsContentDisplay() 154 | } 155 | } 156 | 157 | open var preferredMaxLayoutWidth: CGFloat? { 158 | didSet { 159 | if oldValue == preferredMaxLayoutWidth { return } 160 | needsContentDisplay() 161 | } 162 | } 163 | 164 | @IBInspectable open var lineSpacing: CGFloat = 0.0 { 165 | didSet { 166 | if oldValue == lineSpacing { return } 167 | needsContentDisplay() 168 | } 169 | } 170 | 171 | @IBInspectable open var kerning: CGFloat = 0.0 { 172 | didSet { 173 | if oldValue == kerning { return } 174 | needsContentDisplay() 175 | } 176 | } 177 | 178 | @IBInspectable open var lineBreakMode: LineBreakMode = .byTruncatingTail { 179 | didSet { 180 | if oldValue == lineBreakMode { return } 181 | needsContentDisplay() 182 | } 183 | } 184 | 185 | @IBInspectable open var insets: EdgeInsets { 186 | set { 187 | contentInsets = .init(top: newValue.top, left: newValue.left, right: newValue.right, bottom: newValue.bottom) 188 | } get { 189 | EdgeInsets(top: contentInsets.top, left: contentInsets.left, bottom: contentInsets.bottom, right: contentInsets.right) 190 | } 191 | } 192 | 193 | override public init(frame: Rect) { 194 | super.init(frame: frame) 195 | commonInit() 196 | } 197 | 198 | public required init?(coder: NSCoder) { 199 | super.init(coder: coder) 200 | commonInit() 201 | } 202 | 203 | override open func awakeFromNib() { 204 | super.awakeFromNib() 205 | commonInit() 206 | } 207 | } 208 | 209 | private extension SwimplyLabel { 210 | func commonInit() { 211 | #if os(iOS) 212 | let isRetina = UIScreen.main.scale >= 2.0 213 | shouldSubpixelPositionFonts = !isRetina 214 | shouldSubpixelQuantizeFonts = !isRetina 215 | layer.contentsScale = UIScreen.main.scale 216 | layer.rasterizationScale = UIScreen.main.scale 217 | #elseif os(OSX) 218 | wantsLayer = true 219 | canDrawConcurrently = true 220 | layerContentsRedrawPolicy = .onSetNeedsDisplay 221 | #endif 222 | 223 | setContentHuggingPriority(.defaultLow, for: .horizontal) 224 | setContentCompressionResistancePriority(.defaultLow, for: .horizontal) 225 | 226 | labelLayer?.drawsAsynchronously = true 227 | labelLayer?.needsDisplayOnBoundsChange = true 228 | labelLayer?.delegate = self 229 | } 230 | 231 | func draw(context: CGContext) { 232 | calculateContentSize() 233 | 234 | context.textMatrix = .identity 235 | context.setAllowsAntialiasing(true) 236 | context.setAllowsFontSmoothing(true) 237 | context.setAllowsFontSubpixelPositioning(true) 238 | context.setAllowsFontSubpixelQuantization(true) 239 | 240 | context.setShouldAntialias(shouldAntialias) 241 | context.setShouldSmoothFonts(shouldSmoothFonts) 242 | context.setShouldSubpixelPositionFonts(shouldSubpixelPositionFonts) 243 | context.setShouldSubpixelQuantizeFonts(shouldSubpixelQuantizeFonts) 244 | 245 | context.translateBy(x: 0, y: bounds.height) 246 | context.scaleBy(x: 1.0, y: -1.0) 247 | 248 | let height = bounds.height - insets.bottom - insets.top 249 | let width = bounds.width - insets.left - insets.right 250 | let rect = CGRect(x: insets.left, y: insets.bottom, width: width, height: height) 251 | let drawingPath = CGPath(rect: rect, transform: nil) 252 | 253 | let attributedString = NSAttributedString(string: text ?? "", attributes: defaultAttributedDict) 254 | let setter = CTFramesetterCreateWithAttributedString(attributedString as CFAttributedString) 255 | let frame = CTFramesetterCreateFrame(setter, CFRangeMake(0, attributedString.length), drawingPath, nil) 256 | CTFrameDraw(frame, context) 257 | } 258 | 259 | func calculateContentSize() { 260 | if text == nil || text?.isEmpty == true { 261 | drawingRect = .zero 262 | return 263 | } 264 | 265 | if let cacheItem = SwimplyLabel.sharedCache.value(forKey: cacheKey) { 266 | drawingRect = cacheItem.drawingRect 267 | return 268 | } 269 | 270 | let attributedString = NSMutableAttributedString(string: text ?? "", attributes: defaultAttributedDict) 271 | let setter = CTFramesetterCreateWithAttributedString(attributedString as CFAttributedString) 272 | let constrainedWidth: CGFloat = numberOfLines == 1 ? .greatestFiniteMagnitude : (preferredMaxLayoutWidth ?? bounds.width) 273 | var size = CTFramesetterSuggestFrameSizeWithConstraints(setter, CFRange(location: 0, length: attributedString.length), nil, 274 | CGSize(width: constrainedWidth, height: .greatestFiniteMagnitude), nil) 275 | 276 | if numberOfLines >= 1 { 277 | let path = CGPath(rect: CGRect(x: 0, y: 0, width: size.width, height: size.height), transform: nil) 278 | let ctFrame = CTFramesetterCreateFrame(setter, CFRangeMake(0, 0), path, nil) 279 | let currentLines = CFArrayGetCount(CTFrameGetLines(ctFrame)) as Int 280 | let calculatedHeight = (size.height / CGFloat(currentLines)) * CGFloat(numberOfLines) 281 | size.height = min(size.height, calculatedHeight) 282 | } 283 | 284 | drawingRect = CGRect(x: 0, y: 0, width: ceil(size.width + insets.left + insets.right), 285 | height: ceil(size.height + insets.top + insets.bottom)) 286 | 287 | let cacheItem = CacheItem(size: size, drawingRect: drawingRect) 288 | SwimplyLabel.sharedCache.setValue(cacheItem, forKey: cacheKey) 289 | } 290 | 291 | func needsContentDisplay() { 292 | calculateContentSize() 293 | labelLayer?.setNeedsDisplay() 294 | } 295 | } 296 | 297 | private extension SwimplyLabel { 298 | class DOLayer: CALayer { 299 | override func draw(in ctx: CGContext) { 300 | ctx.saveGState() 301 | delegate?.draw?(self, in: ctx) 302 | ctx.restoreGState() 303 | } 304 | } 305 | } 306 | 307 | #if os(OSX) 308 | extension SwimplyLabel: CALayerDelegate { 309 | public func draw(_: CALayer, in ctx: CGContext) { 310 | draw(context: ctx) 311 | } 312 | 313 | override open func makeBackingLayer() -> CALayer { 314 | return DOLayer() 315 | } 316 | 317 | override open func viewDidChangeBackingProperties() { 318 | super.viewDidChangeBackingProperties() 319 | let scale = window?.backingScaleFactor ?? 1.0 320 | let isRetina = scale >= 2.0 321 | shouldSmoothFonts = true 322 | shouldAntialias = true 323 | shouldSubpixelPositionFonts = !isRetina 324 | shouldSubpixelQuantizeFonts = !isRetina 325 | layer?.contentsScale = scale 326 | layer?.rasterizationScale = scale 327 | layer?.setNeedsDisplay() 328 | } 329 | 330 | override open var isFlipped: Bool { 331 | return true 332 | } 333 | } 334 | #endif 335 | 336 | #if os(iOS) || os(tvOS) 337 | extension SwimplyLabel { 338 | override open func draw(_: CALayer, in ctx: CGContext) { 339 | draw(context: ctx) 340 | } 341 | 342 | override public static var layerClass: AnyClass { 343 | return DOLayer.self 344 | } 345 | } 346 | #endif 347 | -------------------------------------------------------------------------------- /SwimplyLabel.podspec: -------------------------------------------------------------------------------- 1 | Pod::Spec.new do |s| 2 | s.name = "SwimplyLabel" 3 | s.version = "2.1" 4 | s.summary = "UILabel replacement for iOS and macOS" 5 | s.homepage = "https://github.com/docterd/SwimplyLabel" 6 | s.license = { :type => "MIT" } 7 | s.author = { "Dennis Oberhoff" => "dennis@obrhoff.de" } 8 | s.source = { :git => "https://github.com/docterd/SwimplyLabel.git", :tag => "2.1"} 9 | s.source_files = "Sources/SwimplyLabel/SwimplyLabel.swift" 10 | s.osx.deployment_target = '10.12' 11 | s.osx.framework = 'AppKit' 12 | s.ios.deployment_target = "10.0" 13 | s.ios.framework = 'UIKit' 14 | s.tvos.deployment_target = "10.0" 15 | s.tvos.framework = 'UIKit' 16 | s.swift_version = '5.0' 17 | s.source = { :git => "https://github.com/docterd/swimplycache.git", :tag => "1.0.0"} 18 | s.dependency 'SwimplyCache', "= 1.0.0" 19 | end 20 | -------------------------------------------------------------------------------- /SwimplyLabel.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 52; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 79C10FB523F590460031860C /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79C10FB423F590460031860C /* AppDelegate.swift */; }; 11 | 79C10FB923F590460031860C /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79C10FB823F590460031860C /* ViewController.swift */; }; 12 | 79C10FBC23F590460031860C /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 79C10FBA23F590460031860C /* Main.storyboard */; }; 13 | 79C10FBE23F590470031860C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 79C10FBD23F590470031860C /* Assets.xcassets */; }; 14 | 79C10FC123F590470031860C /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 79C10FBF23F590470031860C /* LaunchScreen.storyboard */; }; 15 | 79C10FC923F590B20031860C /* SwimplyLabel.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 7933919B23F58ED70080AD66 /* SwimplyLabel.framework */; }; 16 | 79C10FCA23F590B20031860C /* SwimplyLabel.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 7933919B23F58ED70080AD66 /* SwimplyLabel.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 17 | 79C10FD523F591ED0031860C /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79C10FD423F591ED0031860C /* AppDelegate.swift */; }; 18 | 79C10FD723F591ED0031860C /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 79C10FD623F591ED0031860C /* ViewController.swift */; }; 19 | 79C10FD923F591EE0031860C /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 79C10FD823F591EE0031860C /* Assets.xcassets */; }; 20 | 79C10FDC23F591EE0031860C /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 79C10FDA23F591EE0031860C /* Main.storyboard */; }; 21 | 79C10FE223F5920B0031860C /* SwimplyLabel.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 79C10F9423F58FBC0031860C /* SwimplyLabel.framework */; }; 22 | 79C10FE323F5920B0031860C /* SwimplyLabel.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 79C10F9423F58FBC0031860C /* SwimplyLabel.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 23 | E1482E3E246FABC500FD62CA /* SwimplyCache in Frameworks */ = {isa = PBXBuildFile; productRef = E1482E3D246FABC500FD62CA /* SwimplyCache */; }; 24 | E1482E44246FAC5200FD62CA /* SwimplyCache in Frameworks */ = {isa = PBXBuildFile; productRef = E1482E43246FAC5200FD62CA /* SwimplyCache */; }; 25 | E1482E46246FAC6500FD62CA /* SwimplyCache in Frameworks */ = {isa = PBXBuildFile; productRef = E1482E45246FAC6500FD62CA /* SwimplyCache */; }; 26 | E19619C3246FB42900DA79FF /* SwimplyLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = E19619C2246FB39F00DA79FF /* SwimplyLabel.swift */; }; 27 | E19619C4246FB42A00DA79FF /* SwimplyLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = E19619C2246FB39F00DA79FF /* SwimplyLabel.swift */; }; 28 | E19619C5246FB42A00DA79FF /* SwimplyLabel.swift in Sources */ = {isa = PBXBuildFile; fileRef = E19619C2246FB39F00DA79FF /* SwimplyLabel.swift */; }; 29 | /* End PBXBuildFile section */ 30 | 31 | /* Begin PBXContainerItemProxy section */ 32 | 79C10FC623F590AC0031860C /* PBXContainerItemProxy */ = { 33 | isa = PBXContainerItemProxy; 34 | containerPortal = 7933919223F58ED70080AD66 /* Project object */; 35 | proxyType = 1; 36 | remoteGlobalIDString = 7933919A23F58ED70080AD66; 37 | remoteInfo = "DOLabel-iOS"; 38 | }; 39 | 79C10FCB23F590B20031860C /* PBXContainerItemProxy */ = { 40 | isa = PBXContainerItemProxy; 41 | containerPortal = 7933919223F58ED70080AD66 /* Project object */; 42 | proxyType = 1; 43 | remoteGlobalIDString = 7933919A23F58ED70080AD66; 44 | remoteInfo = "DOLabel-iOS"; 45 | }; 46 | 79C10FE423F5920B0031860C /* PBXContainerItemProxy */ = { 47 | isa = PBXContainerItemProxy; 48 | containerPortal = 7933919223F58ED70080AD66 /* Project object */; 49 | proxyType = 1; 50 | remoteGlobalIDString = 79C10F8B23F58FBC0031860C; 51 | remoteInfo = "DOLabel-macOS"; 52 | }; 53 | /* End PBXContainerItemProxy section */ 54 | 55 | /* Begin PBXCopyFilesBuildPhase section */ 56 | 79C10FCD23F590B20031860C /* Embed Frameworks */ = { 57 | isa = PBXCopyFilesBuildPhase; 58 | buildActionMask = 2147483647; 59 | dstPath = ""; 60 | dstSubfolderSpec = 10; 61 | files = ( 62 | 79C10FCA23F590B20031860C /* SwimplyLabel.framework in Embed Frameworks */, 63 | ); 64 | name = "Embed Frameworks"; 65 | runOnlyForDeploymentPostprocessing = 0; 66 | }; 67 | 79C10FE623F5920B0031860C /* Embed Frameworks */ = { 68 | isa = PBXCopyFilesBuildPhase; 69 | buildActionMask = 2147483647; 70 | dstPath = ""; 71 | dstSubfolderSpec = 10; 72 | files = ( 73 | 79C10FE323F5920B0031860C /* SwimplyLabel.framework in Embed Frameworks */, 74 | ); 75 | name = "Embed Frameworks"; 76 | runOnlyForDeploymentPostprocessing = 0; 77 | }; 78 | /* End PBXCopyFilesBuildPhase section */ 79 | 80 | /* Begin PBXFileReference section */ 81 | 7933919B23F58ED70080AD66 /* SwimplyLabel.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwimplyLabel.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 82 | 7933919F23F58ED70080AD66 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; name = Info.plist; path = Sources/Info.plist; sourceTree = ""; }; 83 | 79C10F8923F58FA50031860C /* SwimplyLabel.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwimplyLabel.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 84 | 79C10F9423F58FBC0031860C /* SwimplyLabel.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = SwimplyLabel.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 85 | 79C10FB223F590460031860C /* Example-iOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Example-iOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 86 | 79C10FB423F590460031860C /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 87 | 79C10FB823F590460031860C /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 88 | 79C10FBB23F590460031860C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 89 | 79C10FBD23F590470031860C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 90 | 79C10FC023F590470031860C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 91 | 79C10FC223F590470031860C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 92 | 79C10FD223F591ED0031860C /* Example-macOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Example-macOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 93 | 79C10FD423F591ED0031860C /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 94 | 79C10FD623F591ED0031860C /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; }; 95 | 79C10FD823F591EE0031860C /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 96 | 79C10FDB23F591EE0031860C /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97 | 79C10FDD23F591EE0031860C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 98 | 79C10FDE23F591EE0031860C /* Example_macOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Example_macOS.entitlements; sourceTree = ""; }; 99 | E19619C2246FB39F00DA79FF /* SwimplyLabel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = SwimplyLabel.swift; path = Sources/SwimplyLabel/SwimplyLabel.swift; sourceTree = SOURCE_ROOT; }; 100 | /* End PBXFileReference section */ 101 | 102 | /* Begin PBXFrameworksBuildPhase section */ 103 | 7933919823F58ED70080AD66 /* Frameworks */ = { 104 | isa = PBXFrameworksBuildPhase; 105 | buildActionMask = 2147483647; 106 | files = ( 107 | E1482E3E246FABC500FD62CA /* SwimplyCache in Frameworks */, 108 | ); 109 | runOnlyForDeploymentPostprocessing = 0; 110 | }; 111 | 79C10F8423F58FA50031860C /* Frameworks */ = { 112 | isa = PBXFrameworksBuildPhase; 113 | buildActionMask = 2147483647; 114 | files = ( 115 | E1482E46246FAC6500FD62CA /* SwimplyCache in Frameworks */, 116 | ); 117 | runOnlyForDeploymentPostprocessing = 0; 118 | }; 119 | 79C10F8F23F58FBC0031860C /* Frameworks */ = { 120 | isa = PBXFrameworksBuildPhase; 121 | buildActionMask = 2147483647; 122 | files = ( 123 | E1482E44246FAC5200FD62CA /* SwimplyCache in Frameworks */, 124 | ); 125 | runOnlyForDeploymentPostprocessing = 0; 126 | }; 127 | 79C10FAF23F590460031860C /* Frameworks */ = { 128 | isa = PBXFrameworksBuildPhase; 129 | buildActionMask = 2147483647; 130 | files = ( 131 | 79C10FC923F590B20031860C /* SwimplyLabel.framework in Frameworks */, 132 | ); 133 | runOnlyForDeploymentPostprocessing = 0; 134 | }; 135 | 79C10FCF23F591ED0031860C /* Frameworks */ = { 136 | isa = PBXFrameworksBuildPhase; 137 | buildActionMask = 2147483647; 138 | files = ( 139 | 79C10FE223F5920B0031860C /* SwimplyLabel.framework in Frameworks */, 140 | ); 141 | runOnlyForDeploymentPostprocessing = 0; 142 | }; 143 | /* End PBXFrameworksBuildPhase section */ 144 | 145 | /* Begin PBXGroup section */ 146 | 7933919123F58ED70080AD66 = { 147 | isa = PBXGroup; 148 | children = ( 149 | 7933919D23F58ED70080AD66 /* SwimplyLabel */, 150 | 79C10FB323F590460031860C /* Example-iOS */, 151 | 79C10FD323F591ED0031860C /* Example-macOS */, 152 | 7933919C23F58ED70080AD66 /* Products */, 153 | 79C10FC823F590B20031860C /* Frameworks */, 154 | ); 155 | sourceTree = ""; 156 | }; 157 | 7933919C23F58ED70080AD66 /* Products */ = { 158 | isa = PBXGroup; 159 | children = ( 160 | 7933919B23F58ED70080AD66 /* SwimplyLabel.framework */, 161 | 79C10F8923F58FA50031860C /* SwimplyLabel.framework */, 162 | 79C10F9423F58FBC0031860C /* SwimplyLabel.framework */, 163 | 79C10FB223F590460031860C /* Example-iOS.app */, 164 | 79C10FD223F591ED0031860C /* Example-macOS.app */, 165 | ); 166 | name = Products; 167 | sourceTree = ""; 168 | }; 169 | 7933919D23F58ED70080AD66 /* SwimplyLabel */ = { 170 | isa = PBXGroup; 171 | children = ( 172 | 7933919F23F58ED70080AD66 /* Info.plist */, 173 | E19619C2246FB39F00DA79FF /* SwimplyLabel.swift */, 174 | ); 175 | path = SwimplyLabel; 176 | sourceTree = ""; 177 | }; 178 | 79C10FB323F590460031860C /* Example-iOS */ = { 179 | isa = PBXGroup; 180 | children = ( 181 | 79C10FB423F590460031860C /* AppDelegate.swift */, 182 | 79C10FB823F590460031860C /* ViewController.swift */, 183 | 79C10FBA23F590460031860C /* Main.storyboard */, 184 | 79C10FBD23F590470031860C /* Assets.xcassets */, 185 | 79C10FBF23F590470031860C /* LaunchScreen.storyboard */, 186 | 79C10FC223F590470031860C /* Info.plist */, 187 | ); 188 | path = "Example-iOS"; 189 | sourceTree = ""; 190 | }; 191 | 79C10FC823F590B20031860C /* Frameworks */ = { 192 | isa = PBXGroup; 193 | children = ( 194 | ); 195 | name = Frameworks; 196 | sourceTree = ""; 197 | }; 198 | 79C10FD323F591ED0031860C /* Example-macOS */ = { 199 | isa = PBXGroup; 200 | children = ( 201 | 79C10FD423F591ED0031860C /* AppDelegate.swift */, 202 | 79C10FD623F591ED0031860C /* ViewController.swift */, 203 | 79C10FD823F591EE0031860C /* Assets.xcassets */, 204 | 79C10FDA23F591EE0031860C /* Main.storyboard */, 205 | 79C10FDD23F591EE0031860C /* Info.plist */, 206 | 79C10FDE23F591EE0031860C /* Example_macOS.entitlements */, 207 | ); 208 | path = "Example-macOS"; 209 | sourceTree = ""; 210 | }; 211 | /* End PBXGroup section */ 212 | 213 | /* Begin PBXHeadersBuildPhase section */ 214 | 7933919623F58ED70080AD66 /* Headers */ = { 215 | isa = PBXHeadersBuildPhase; 216 | buildActionMask = 2147483647; 217 | files = ( 218 | ); 219 | runOnlyForDeploymentPostprocessing = 0; 220 | }; 221 | 79C10F8123F58FA50031860C /* Headers */ = { 222 | isa = PBXHeadersBuildPhase; 223 | buildActionMask = 2147483647; 224 | files = ( 225 | ); 226 | runOnlyForDeploymentPostprocessing = 0; 227 | }; 228 | 79C10F8C23F58FBC0031860C /* Headers */ = { 229 | isa = PBXHeadersBuildPhase; 230 | buildActionMask = 2147483647; 231 | files = ( 232 | ); 233 | runOnlyForDeploymentPostprocessing = 0; 234 | }; 235 | /* End PBXHeadersBuildPhase section */ 236 | 237 | /* Begin PBXNativeTarget section */ 238 | 7933919A23F58ED70080AD66 /* SwimplyLabel-iOS */ = { 239 | isa = PBXNativeTarget; 240 | buildConfigurationList = 793391A323F58ED70080AD66 /* Build configuration list for PBXNativeTarget "SwimplyLabel-iOS" */; 241 | buildPhases = ( 242 | 7933919623F58ED70080AD66 /* Headers */, 243 | 7933919723F58ED70080AD66 /* Sources */, 244 | 7933919823F58ED70080AD66 /* Frameworks */, 245 | 7933919923F58ED70080AD66 /* Resources */, 246 | ); 247 | buildRules = ( 248 | ); 249 | dependencies = ( 250 | ); 251 | name = "SwimplyLabel-iOS"; 252 | packageProductDependencies = ( 253 | E1482E3D246FABC500FD62CA /* SwimplyCache */, 254 | ); 255 | productName = DOLabel; 256 | productReference = 7933919B23F58ED70080AD66 /* SwimplyLabel.framework */; 257 | productType = "com.apple.product-type.framework"; 258 | }; 259 | 79C10F8023F58FA50031860C /* SwimplyLabel-tvOS */ = { 260 | isa = PBXNativeTarget; 261 | buildConfigurationList = 79C10F8623F58FA50031860C /* Build configuration list for PBXNativeTarget "SwimplyLabel-tvOS" */; 262 | buildPhases = ( 263 | 79C10F8123F58FA50031860C /* Headers */, 264 | 79C10F8223F58FA50031860C /* Sources */, 265 | 79C10F8423F58FA50031860C /* Frameworks */, 266 | 79C10F8523F58FA50031860C /* Resources */, 267 | ); 268 | buildRules = ( 269 | ); 270 | dependencies = ( 271 | ); 272 | name = "SwimplyLabel-tvOS"; 273 | packageProductDependencies = ( 274 | E1482E45246FAC6500FD62CA /* SwimplyCache */, 275 | ); 276 | productName = DOLabel; 277 | productReference = 79C10F8923F58FA50031860C /* SwimplyLabel.framework */; 278 | productType = "com.apple.product-type.framework"; 279 | }; 280 | 79C10F8B23F58FBC0031860C /* SwimplyLabel-macOS */ = { 281 | isa = PBXNativeTarget; 282 | buildConfigurationList = 79C10F9123F58FBC0031860C /* Build configuration list for PBXNativeTarget "SwimplyLabel-macOS" */; 283 | buildPhases = ( 284 | 79C10F8C23F58FBC0031860C /* Headers */, 285 | 79C10F8D23F58FBC0031860C /* Sources */, 286 | 79C10F8F23F58FBC0031860C /* Frameworks */, 287 | 79C10F9023F58FBC0031860C /* Resources */, 288 | ); 289 | buildRules = ( 290 | ); 291 | dependencies = ( 292 | ); 293 | name = "SwimplyLabel-macOS"; 294 | packageProductDependencies = ( 295 | E1482E43246FAC5200FD62CA /* SwimplyCache */, 296 | ); 297 | productName = DOLabel; 298 | productReference = 79C10F9423F58FBC0031860C /* SwimplyLabel.framework */; 299 | productType = "com.apple.product-type.framework"; 300 | }; 301 | 79C10FB123F590460031860C /* Example-iOS */ = { 302 | isa = PBXNativeTarget; 303 | buildConfigurationList = 79C10FC323F590470031860C /* Build configuration list for PBXNativeTarget "Example-iOS" */; 304 | buildPhases = ( 305 | 79C10FAE23F590460031860C /* Sources */, 306 | 79C10FAF23F590460031860C /* Frameworks */, 307 | 79C10FB023F590460031860C /* Resources */, 308 | 79C10FCD23F590B20031860C /* Embed Frameworks */, 309 | ); 310 | buildRules = ( 311 | ); 312 | dependencies = ( 313 | 79C10FC723F590AC0031860C /* PBXTargetDependency */, 314 | 79C10FCC23F590B20031860C /* PBXTargetDependency */, 315 | ); 316 | name = "Example-iOS"; 317 | productName = "Example-iOS"; 318 | productReference = 79C10FB223F590460031860C /* Example-iOS.app */; 319 | productType = "com.apple.product-type.application"; 320 | }; 321 | 79C10FD123F591ED0031860C /* Example-macOS */ = { 322 | isa = PBXNativeTarget; 323 | buildConfigurationList = 79C10FDF23F591EE0031860C /* Build configuration list for PBXNativeTarget "Example-macOS" */; 324 | buildPhases = ( 325 | 79C10FCE23F591ED0031860C /* Sources */, 326 | 79C10FCF23F591ED0031860C /* Frameworks */, 327 | 79C10FD023F591ED0031860C /* Resources */, 328 | 79C10FE623F5920B0031860C /* Embed Frameworks */, 329 | ); 330 | buildRules = ( 331 | ); 332 | dependencies = ( 333 | 79C10FE523F5920B0031860C /* PBXTargetDependency */, 334 | ); 335 | name = "Example-macOS"; 336 | productName = "Example-macOS"; 337 | productReference = 79C10FD223F591ED0031860C /* Example-macOS.app */; 338 | productType = "com.apple.product-type.application"; 339 | }; 340 | /* End PBXNativeTarget section */ 341 | 342 | /* Begin PBXProject section */ 343 | 7933919223F58ED70080AD66 /* Project object */ = { 344 | isa = PBXProject; 345 | attributes = { 346 | LastSwiftUpdateCheck = 1130; 347 | LastUpgradeCheck = 1140; 348 | ORGANIZATIONNAME = "Dennis Oberhoff"; 349 | TargetAttributes = { 350 | 7933919A23F58ED70080AD66 = { 351 | CreatedOnToolsVersion = 11.3.1; 352 | LastSwiftMigration = 1130; 353 | }; 354 | 79C10FB123F590460031860C = { 355 | CreatedOnToolsVersion = 11.3.1; 356 | }; 357 | 79C10FD123F591ED0031860C = { 358 | CreatedOnToolsVersion = 11.3.1; 359 | }; 360 | }; 361 | }; 362 | buildConfigurationList = 7933919523F58ED70080AD66 /* Build configuration list for PBXProject "SwimplyLabel" */; 363 | compatibilityVersion = "Xcode 9.3"; 364 | developmentRegion = en; 365 | hasScannedForEncodings = 0; 366 | knownRegions = ( 367 | en, 368 | Base, 369 | ); 370 | mainGroup = 7933919123F58ED70080AD66; 371 | packageReferences = ( 372 | E1482E3C246FABC500FD62CA /* XCRemoteSwiftPackageReference "SwimplyCache" */, 373 | ); 374 | productRefGroup = 7933919C23F58ED70080AD66 /* Products */; 375 | projectDirPath = ""; 376 | projectRoot = ""; 377 | targets = ( 378 | 7933919A23F58ED70080AD66 /* SwimplyLabel-iOS */, 379 | 79C10F8023F58FA50031860C /* SwimplyLabel-tvOS */, 380 | 79C10F8B23F58FBC0031860C /* SwimplyLabel-macOS */, 381 | 79C10FB123F590460031860C /* Example-iOS */, 382 | 79C10FD123F591ED0031860C /* Example-macOS */, 383 | ); 384 | }; 385 | /* End PBXProject section */ 386 | 387 | /* Begin PBXResourcesBuildPhase section */ 388 | 7933919923F58ED70080AD66 /* Resources */ = { 389 | isa = PBXResourcesBuildPhase; 390 | buildActionMask = 2147483647; 391 | files = ( 392 | ); 393 | runOnlyForDeploymentPostprocessing = 0; 394 | }; 395 | 79C10F8523F58FA50031860C /* Resources */ = { 396 | isa = PBXResourcesBuildPhase; 397 | buildActionMask = 2147483647; 398 | files = ( 399 | ); 400 | runOnlyForDeploymentPostprocessing = 0; 401 | }; 402 | 79C10F9023F58FBC0031860C /* Resources */ = { 403 | isa = PBXResourcesBuildPhase; 404 | buildActionMask = 2147483647; 405 | files = ( 406 | ); 407 | runOnlyForDeploymentPostprocessing = 0; 408 | }; 409 | 79C10FB023F590460031860C /* Resources */ = { 410 | isa = PBXResourcesBuildPhase; 411 | buildActionMask = 2147483647; 412 | files = ( 413 | 79C10FC123F590470031860C /* LaunchScreen.storyboard in Resources */, 414 | 79C10FBE23F590470031860C /* Assets.xcassets in Resources */, 415 | 79C10FBC23F590460031860C /* Main.storyboard in Resources */, 416 | ); 417 | runOnlyForDeploymentPostprocessing = 0; 418 | }; 419 | 79C10FD023F591ED0031860C /* Resources */ = { 420 | isa = PBXResourcesBuildPhase; 421 | buildActionMask = 2147483647; 422 | files = ( 423 | 79C10FD923F591EE0031860C /* Assets.xcassets in Resources */, 424 | 79C10FDC23F591EE0031860C /* Main.storyboard in Resources */, 425 | ); 426 | runOnlyForDeploymentPostprocessing = 0; 427 | }; 428 | /* End PBXResourcesBuildPhase section */ 429 | 430 | /* Begin PBXSourcesBuildPhase section */ 431 | 7933919723F58ED70080AD66 /* Sources */ = { 432 | isa = PBXSourcesBuildPhase; 433 | buildActionMask = 2147483647; 434 | files = ( 435 | E19619C5246FB42A00DA79FF /* SwimplyLabel.swift in Sources */, 436 | ); 437 | runOnlyForDeploymentPostprocessing = 0; 438 | }; 439 | 79C10F8223F58FA50031860C /* Sources */ = { 440 | isa = PBXSourcesBuildPhase; 441 | buildActionMask = 2147483647; 442 | files = ( 443 | E19619C4246FB42A00DA79FF /* SwimplyLabel.swift in Sources */, 444 | ); 445 | runOnlyForDeploymentPostprocessing = 0; 446 | }; 447 | 79C10F8D23F58FBC0031860C /* Sources */ = { 448 | isa = PBXSourcesBuildPhase; 449 | buildActionMask = 2147483647; 450 | files = ( 451 | E19619C3246FB42900DA79FF /* SwimplyLabel.swift in Sources */, 452 | ); 453 | runOnlyForDeploymentPostprocessing = 0; 454 | }; 455 | 79C10FAE23F590460031860C /* Sources */ = { 456 | isa = PBXSourcesBuildPhase; 457 | buildActionMask = 2147483647; 458 | files = ( 459 | 79C10FB923F590460031860C /* ViewController.swift in Sources */, 460 | 79C10FB523F590460031860C /* AppDelegate.swift in Sources */, 461 | ); 462 | runOnlyForDeploymentPostprocessing = 0; 463 | }; 464 | 79C10FCE23F591ED0031860C /* Sources */ = { 465 | isa = PBXSourcesBuildPhase; 466 | buildActionMask = 2147483647; 467 | files = ( 468 | 79C10FD723F591ED0031860C /* ViewController.swift in Sources */, 469 | 79C10FD523F591ED0031860C /* AppDelegate.swift in Sources */, 470 | ); 471 | runOnlyForDeploymentPostprocessing = 0; 472 | }; 473 | /* End PBXSourcesBuildPhase section */ 474 | 475 | /* Begin PBXTargetDependency section */ 476 | 79C10FC723F590AC0031860C /* PBXTargetDependency */ = { 477 | isa = PBXTargetDependency; 478 | target = 7933919A23F58ED70080AD66 /* SwimplyLabel-iOS */; 479 | targetProxy = 79C10FC623F590AC0031860C /* PBXContainerItemProxy */; 480 | }; 481 | 79C10FCC23F590B20031860C /* PBXTargetDependency */ = { 482 | isa = PBXTargetDependency; 483 | target = 7933919A23F58ED70080AD66 /* SwimplyLabel-iOS */; 484 | targetProxy = 79C10FCB23F590B20031860C /* PBXContainerItemProxy */; 485 | }; 486 | 79C10FE523F5920B0031860C /* PBXTargetDependency */ = { 487 | isa = PBXTargetDependency; 488 | target = 79C10F8B23F58FBC0031860C /* SwimplyLabel-macOS */; 489 | targetProxy = 79C10FE423F5920B0031860C /* PBXContainerItemProxy */; 490 | }; 491 | /* End PBXTargetDependency section */ 492 | 493 | /* Begin PBXVariantGroup section */ 494 | 79C10FBA23F590460031860C /* Main.storyboard */ = { 495 | isa = PBXVariantGroup; 496 | children = ( 497 | 79C10FBB23F590460031860C /* Base */, 498 | ); 499 | name = Main.storyboard; 500 | sourceTree = ""; 501 | }; 502 | 79C10FBF23F590470031860C /* LaunchScreen.storyboard */ = { 503 | isa = PBXVariantGroup; 504 | children = ( 505 | 79C10FC023F590470031860C /* Base */, 506 | ); 507 | name = LaunchScreen.storyboard; 508 | sourceTree = ""; 509 | }; 510 | 79C10FDA23F591EE0031860C /* Main.storyboard */ = { 511 | isa = PBXVariantGroup; 512 | children = ( 513 | 79C10FDB23F591EE0031860C /* Base */, 514 | ); 515 | name = Main.storyboard; 516 | sourceTree = ""; 517 | }; 518 | /* End PBXVariantGroup section */ 519 | 520 | /* Begin XCBuildConfiguration section */ 521 | 793391A123F58ED70080AD66 /* Debug */ = { 522 | isa = XCBuildConfiguration; 523 | buildSettings = { 524 | ALWAYS_SEARCH_USER_PATHS = NO; 525 | CLANG_ANALYZER_NONNULL = YES; 526 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 527 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 528 | CLANG_CXX_LIBRARY = "libc++"; 529 | CLANG_ENABLE_MODULES = YES; 530 | CLANG_ENABLE_OBJC_ARC = YES; 531 | CLANG_ENABLE_OBJC_WEAK = YES; 532 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 533 | CLANG_WARN_BOOL_CONVERSION = YES; 534 | CLANG_WARN_COMMA = YES; 535 | CLANG_WARN_CONSTANT_CONVERSION = YES; 536 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 537 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 538 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 539 | CLANG_WARN_EMPTY_BODY = YES; 540 | CLANG_WARN_ENUM_CONVERSION = YES; 541 | CLANG_WARN_INFINITE_RECURSION = YES; 542 | CLANG_WARN_INT_CONVERSION = YES; 543 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 544 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 545 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 546 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 547 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 548 | CLANG_WARN_STRICT_PROTOTYPES = YES; 549 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 550 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 551 | CLANG_WARN_UNREACHABLE_CODE = YES; 552 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 553 | COPY_PHASE_STRIP = NO; 554 | CURRENT_PROJECT_VERSION = 1; 555 | DEBUG_INFORMATION_FORMAT = dwarf; 556 | ENABLE_STRICT_OBJC_MSGSEND = YES; 557 | ENABLE_TESTABILITY = YES; 558 | GCC_C_LANGUAGE_STANDARD = gnu11; 559 | GCC_DYNAMIC_NO_PIC = NO; 560 | GCC_NO_COMMON_BLOCKS = YES; 561 | GCC_OPTIMIZATION_LEVEL = 0; 562 | GCC_PREPROCESSOR_DEFINITIONS = ( 563 | "DEBUG=1", 564 | "$(inherited)", 565 | ); 566 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 567 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 568 | GCC_WARN_UNDECLARED_SELECTOR = YES; 569 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 570 | GCC_WARN_UNUSED_FUNCTION = YES; 571 | GCC_WARN_UNUSED_VARIABLE = YES; 572 | IPHONEOS_DEPLOYMENT_TARGET = 13.2; 573 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 574 | MTL_FAST_MATH = YES; 575 | ONLY_ACTIVE_ARCH = YES; 576 | SDKROOT = iphoneos; 577 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; 578 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 579 | VERSIONING_SYSTEM = "apple-generic"; 580 | VERSION_INFO_PREFIX = ""; 581 | }; 582 | name = Debug; 583 | }; 584 | 793391A223F58ED70080AD66 /* Release */ = { 585 | isa = XCBuildConfiguration; 586 | buildSettings = { 587 | ALWAYS_SEARCH_USER_PATHS = NO; 588 | CLANG_ANALYZER_NONNULL = YES; 589 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 590 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 591 | CLANG_CXX_LIBRARY = "libc++"; 592 | CLANG_ENABLE_MODULES = YES; 593 | CLANG_ENABLE_OBJC_ARC = YES; 594 | CLANG_ENABLE_OBJC_WEAK = YES; 595 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 596 | CLANG_WARN_BOOL_CONVERSION = YES; 597 | CLANG_WARN_COMMA = YES; 598 | CLANG_WARN_CONSTANT_CONVERSION = YES; 599 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 600 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 601 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 602 | CLANG_WARN_EMPTY_BODY = YES; 603 | CLANG_WARN_ENUM_CONVERSION = YES; 604 | CLANG_WARN_INFINITE_RECURSION = YES; 605 | CLANG_WARN_INT_CONVERSION = YES; 606 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 607 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 608 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 609 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 610 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 611 | CLANG_WARN_STRICT_PROTOTYPES = YES; 612 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 613 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 614 | CLANG_WARN_UNREACHABLE_CODE = YES; 615 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 616 | COPY_PHASE_STRIP = NO; 617 | CURRENT_PROJECT_VERSION = 1; 618 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 619 | ENABLE_NS_ASSERTIONS = NO; 620 | ENABLE_STRICT_OBJC_MSGSEND = YES; 621 | GCC_C_LANGUAGE_STANDARD = gnu11; 622 | GCC_NO_COMMON_BLOCKS = YES; 623 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 624 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 625 | GCC_WARN_UNDECLARED_SELECTOR = YES; 626 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 627 | GCC_WARN_UNUSED_FUNCTION = YES; 628 | GCC_WARN_UNUSED_VARIABLE = YES; 629 | IPHONEOS_DEPLOYMENT_TARGET = 13.2; 630 | MTL_ENABLE_DEBUG_INFO = NO; 631 | MTL_FAST_MATH = YES; 632 | SDKROOT = iphoneos; 633 | SWIFT_COMPILATION_MODE = wholemodule; 634 | SWIFT_OPTIMIZATION_LEVEL = "-O"; 635 | VALIDATE_PRODUCT = YES; 636 | VERSIONING_SYSTEM = "apple-generic"; 637 | VERSION_INFO_PREFIX = ""; 638 | }; 639 | name = Release; 640 | }; 641 | 793391A423F58ED70080AD66 /* Debug */ = { 642 | isa = XCBuildConfiguration; 643 | buildSettings = { 644 | APPLICATION_EXTENSION_API_ONLY = YES; 645 | CLANG_ENABLE_MODULES = YES; 646 | CODE_SIGN_STYLE = Automatic; 647 | DEFINES_MODULE = YES; 648 | DEVELOPMENT_TEAM = YE33ZK7Z99; 649 | DYLIB_COMPATIBILITY_VERSION = 1; 650 | DYLIB_CURRENT_VERSION = 1; 651 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 652 | INFOPLIST_FILE = "$(SRCROOT)/Sources/Info.plist"; 653 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 654 | LD_RUNPATH_SEARCH_PATHS = ( 655 | "$(inherited)", 656 | "@executable_path/Frameworks", 657 | "@loader_path/Frameworks", 658 | ); 659 | PRODUCT_BUNDLE_IDENTIFIER = com.obrhoff.SwimplyLabel; 660 | PRODUCT_NAME = SwimplyLabel; 661 | SKIP_INSTALL = YES; 662 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 663 | SWIFT_VERSION = 5.0; 664 | TARGETED_DEVICE_FAMILY = "1,2"; 665 | }; 666 | name = Debug; 667 | }; 668 | 793391A523F58ED70080AD66 /* Release */ = { 669 | isa = XCBuildConfiguration; 670 | buildSettings = { 671 | APPLICATION_EXTENSION_API_ONLY = YES; 672 | CLANG_ENABLE_MODULES = YES; 673 | CODE_SIGN_STYLE = Automatic; 674 | DEFINES_MODULE = YES; 675 | DEVELOPMENT_TEAM = YE33ZK7Z99; 676 | DYLIB_COMPATIBILITY_VERSION = 1; 677 | DYLIB_CURRENT_VERSION = 1; 678 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 679 | INFOPLIST_FILE = "$(SRCROOT)/Sources/Info.plist"; 680 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 681 | LD_RUNPATH_SEARCH_PATHS = ( 682 | "$(inherited)", 683 | "@executable_path/Frameworks", 684 | "@loader_path/Frameworks", 685 | ); 686 | PRODUCT_BUNDLE_IDENTIFIER = com.obrhoff.SwimplyLabel; 687 | PRODUCT_NAME = SwimplyLabel; 688 | SKIP_INSTALL = YES; 689 | SWIFT_VERSION = 5.0; 690 | TARGETED_DEVICE_FAMILY = "1,2"; 691 | }; 692 | name = Release; 693 | }; 694 | 79C10F8723F58FA50031860C /* Debug */ = { 695 | isa = XCBuildConfiguration; 696 | buildSettings = { 697 | APPLICATION_EXTENSION_API_ONLY = YES; 698 | CLANG_ENABLE_MODULES = YES; 699 | CODE_SIGN_STYLE = Automatic; 700 | DEFINES_MODULE = YES; 701 | DEVELOPMENT_TEAM = YE33ZK7Z99; 702 | DYLIB_COMPATIBILITY_VERSION = 1; 703 | DYLIB_CURRENT_VERSION = 1; 704 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 705 | INFOPLIST_FILE = "$(SRCROOT)/Sources/Info.plist"; 706 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 707 | LD_RUNPATH_SEARCH_PATHS = ( 708 | "$(inherited)", 709 | "@executable_path/Frameworks", 710 | "@loader_path/Frameworks", 711 | ); 712 | PRODUCT_BUNDLE_IDENTIFIER = com.obrhoff.SwimplyLabel; 713 | PRODUCT_NAME = SwimplyLabel; 714 | SDKROOT = appletvos; 715 | SKIP_INSTALL = YES; 716 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 717 | SWIFT_VERSION = 5.0; 718 | TVOS_DEPLOYMENT_TARGET = 10.0; 719 | }; 720 | name = Debug; 721 | }; 722 | 79C10F8823F58FA50031860C /* Release */ = { 723 | isa = XCBuildConfiguration; 724 | buildSettings = { 725 | APPLICATION_EXTENSION_API_ONLY = YES; 726 | CLANG_ENABLE_MODULES = YES; 727 | CODE_SIGN_STYLE = Automatic; 728 | DEFINES_MODULE = YES; 729 | DEVELOPMENT_TEAM = YE33ZK7Z99; 730 | DYLIB_COMPATIBILITY_VERSION = 1; 731 | DYLIB_CURRENT_VERSION = 1; 732 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 733 | INFOPLIST_FILE = "$(SRCROOT)/Sources/Info.plist"; 734 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 735 | LD_RUNPATH_SEARCH_PATHS = ( 736 | "$(inherited)", 737 | "@executable_path/Frameworks", 738 | "@loader_path/Frameworks", 739 | ); 740 | PRODUCT_BUNDLE_IDENTIFIER = com.obrhoff.SwimplyLabel; 741 | PRODUCT_NAME = SwimplyLabel; 742 | SDKROOT = appletvos; 743 | SKIP_INSTALL = YES; 744 | SWIFT_VERSION = 5.0; 745 | TVOS_DEPLOYMENT_TARGET = 10.0; 746 | }; 747 | name = Release; 748 | }; 749 | 79C10F9223F58FBC0031860C /* Debug */ = { 750 | isa = XCBuildConfiguration; 751 | buildSettings = { 752 | APPLICATION_EXTENSION_API_ONLY = YES; 753 | CLANG_ENABLE_MODULES = YES; 754 | CODE_SIGN_STYLE = Automatic; 755 | DEFINES_MODULE = YES; 756 | DEVELOPMENT_TEAM = YE33ZK7Z99; 757 | DYLIB_COMPATIBILITY_VERSION = 1; 758 | DYLIB_CURRENT_VERSION = 1; 759 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 760 | INFOPLIST_FILE = "$(SRCROOT)/Sources/Info.plist"; 761 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 762 | LD_RUNPATH_SEARCH_PATHS = ( 763 | "$(inherited)", 764 | "@executable_path/Frameworks", 765 | "@loader_path/Frameworks", 766 | ); 767 | MACOSX_DEPLOYMENT_TARGET = 10.12; 768 | PRODUCT_BUNDLE_IDENTIFIER = com.obrhoff.SwimplyLabel; 769 | PRODUCT_NAME = SwimplyLabel; 770 | SDKROOT = macosx; 771 | SKIP_INSTALL = YES; 772 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 773 | SWIFT_VERSION = 5.0; 774 | }; 775 | name = Debug; 776 | }; 777 | 79C10F9323F58FBC0031860C /* Release */ = { 778 | isa = XCBuildConfiguration; 779 | buildSettings = { 780 | APPLICATION_EXTENSION_API_ONLY = YES; 781 | CLANG_ENABLE_MODULES = YES; 782 | CODE_SIGN_STYLE = Automatic; 783 | DEFINES_MODULE = YES; 784 | DEVELOPMENT_TEAM = YE33ZK7Z99; 785 | DYLIB_COMPATIBILITY_VERSION = 1; 786 | DYLIB_CURRENT_VERSION = 1; 787 | DYLIB_INSTALL_NAME_BASE = "@rpath"; 788 | INFOPLIST_FILE = "$(SRCROOT)/Sources/Info.plist"; 789 | INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks"; 790 | LD_RUNPATH_SEARCH_PATHS = ( 791 | "$(inherited)", 792 | "@executable_path/Frameworks", 793 | "@loader_path/Frameworks", 794 | ); 795 | MACOSX_DEPLOYMENT_TARGET = 10.12; 796 | PRODUCT_BUNDLE_IDENTIFIER = com.obrhoff.SwimplyLabel; 797 | PRODUCT_NAME = SwimplyLabel; 798 | SDKROOT = macosx; 799 | SKIP_INSTALL = YES; 800 | SWIFT_VERSION = 5.0; 801 | }; 802 | name = Release; 803 | }; 804 | 79C10FC423F590470031860C /* Debug */ = { 805 | isa = XCBuildConfiguration; 806 | buildSettings = { 807 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 808 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 809 | CODE_SIGN_STYLE = Automatic; 810 | DEVELOPMENT_TEAM = YE33ZK7Z99; 811 | INFOPLIST_FILE = "Example-iOS/Info.plist"; 812 | LD_RUNPATH_SEARCH_PATHS = ( 813 | "$(inherited)", 814 | "@executable_path/Frameworks", 815 | ); 816 | PRODUCT_BUNDLE_IDENTIFIER = "com.obrhoff.swimplylabel.Example-iOS"; 817 | PRODUCT_NAME = "$(TARGET_NAME)"; 818 | SWIFT_VERSION = 5.0; 819 | TARGETED_DEVICE_FAMILY = "1,2"; 820 | }; 821 | name = Debug; 822 | }; 823 | 79C10FC523F590470031860C /* Release */ = { 824 | isa = XCBuildConfiguration; 825 | buildSettings = { 826 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 827 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 828 | CODE_SIGN_STYLE = Automatic; 829 | DEVELOPMENT_TEAM = YE33ZK7Z99; 830 | INFOPLIST_FILE = "Example-iOS/Info.plist"; 831 | LD_RUNPATH_SEARCH_PATHS = ( 832 | "$(inherited)", 833 | "@executable_path/Frameworks", 834 | ); 835 | PRODUCT_BUNDLE_IDENTIFIER = "com.obrhoff.swimplylabel.Example-iOS"; 836 | PRODUCT_NAME = "$(TARGET_NAME)"; 837 | SWIFT_VERSION = 5.0; 838 | TARGETED_DEVICE_FAMILY = "1,2"; 839 | }; 840 | name = Release; 841 | }; 842 | 79C10FE023F591EE0031860C /* Debug */ = { 843 | isa = XCBuildConfiguration; 844 | buildSettings = { 845 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 846 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 847 | CODE_SIGN_ENTITLEMENTS = "Example-macOS/Example_macOS.entitlements"; 848 | CODE_SIGN_STYLE = Automatic; 849 | COMBINE_HIDPI_IMAGES = YES; 850 | DEVELOPMENT_TEAM = YE33ZK7Z99; 851 | ENABLE_HARDENED_RUNTIME = YES; 852 | INFOPLIST_FILE = "Example-macOS/Info.plist"; 853 | LD_RUNPATH_SEARCH_PATHS = ( 854 | "$(inherited)", 855 | "@executable_path/../Frameworks", 856 | ); 857 | MACOSX_DEPLOYMENT_TARGET = 10.15; 858 | PRODUCT_BUNDLE_IDENTIFIER = "com.obrhoff.swimplylabel.Example-macOS"; 859 | PRODUCT_NAME = "$(TARGET_NAME)"; 860 | SDKROOT = macosx; 861 | SWIFT_VERSION = 5.0; 862 | }; 863 | name = Debug; 864 | }; 865 | 79C10FE123F591EE0031860C /* Release */ = { 866 | isa = XCBuildConfiguration; 867 | buildSettings = { 868 | ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; 869 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 870 | CODE_SIGN_ENTITLEMENTS = "Example-macOS/Example_macOS.entitlements"; 871 | CODE_SIGN_STYLE = Automatic; 872 | COMBINE_HIDPI_IMAGES = YES; 873 | DEVELOPMENT_TEAM = YE33ZK7Z99; 874 | ENABLE_HARDENED_RUNTIME = YES; 875 | INFOPLIST_FILE = "Example-macOS/Info.plist"; 876 | LD_RUNPATH_SEARCH_PATHS = ( 877 | "$(inherited)", 878 | "@executable_path/../Frameworks", 879 | ); 880 | MACOSX_DEPLOYMENT_TARGET = 10.15; 881 | PRODUCT_BUNDLE_IDENTIFIER = "com.obrhoff.swimplylabel.Example-macOS"; 882 | PRODUCT_NAME = "$(TARGET_NAME)"; 883 | SDKROOT = macosx; 884 | SWIFT_VERSION = 5.0; 885 | }; 886 | name = Release; 887 | }; 888 | /* End XCBuildConfiguration section */ 889 | 890 | /* Begin XCConfigurationList section */ 891 | 7933919523F58ED70080AD66 /* Build configuration list for PBXProject "SwimplyLabel" */ = { 892 | isa = XCConfigurationList; 893 | buildConfigurations = ( 894 | 793391A123F58ED70080AD66 /* Debug */, 895 | 793391A223F58ED70080AD66 /* Release */, 896 | ); 897 | defaultConfigurationIsVisible = 0; 898 | defaultConfigurationName = Release; 899 | }; 900 | 793391A323F58ED70080AD66 /* Build configuration list for PBXNativeTarget "SwimplyLabel-iOS" */ = { 901 | isa = XCConfigurationList; 902 | buildConfigurations = ( 903 | 793391A423F58ED70080AD66 /* Debug */, 904 | 793391A523F58ED70080AD66 /* Release */, 905 | ); 906 | defaultConfigurationIsVisible = 0; 907 | defaultConfigurationName = Release; 908 | }; 909 | 79C10F8623F58FA50031860C /* Build configuration list for PBXNativeTarget "SwimplyLabel-tvOS" */ = { 910 | isa = XCConfigurationList; 911 | buildConfigurations = ( 912 | 79C10F8723F58FA50031860C /* Debug */, 913 | 79C10F8823F58FA50031860C /* Release */, 914 | ); 915 | defaultConfigurationIsVisible = 0; 916 | defaultConfigurationName = Release; 917 | }; 918 | 79C10F9123F58FBC0031860C /* Build configuration list for PBXNativeTarget "SwimplyLabel-macOS" */ = { 919 | isa = XCConfigurationList; 920 | buildConfigurations = ( 921 | 79C10F9223F58FBC0031860C /* Debug */, 922 | 79C10F9323F58FBC0031860C /* Release */, 923 | ); 924 | defaultConfigurationIsVisible = 0; 925 | defaultConfigurationName = Release; 926 | }; 927 | 79C10FC323F590470031860C /* Build configuration list for PBXNativeTarget "Example-iOS" */ = { 928 | isa = XCConfigurationList; 929 | buildConfigurations = ( 930 | 79C10FC423F590470031860C /* Debug */, 931 | 79C10FC523F590470031860C /* Release */, 932 | ); 933 | defaultConfigurationIsVisible = 0; 934 | defaultConfigurationName = Release; 935 | }; 936 | 79C10FDF23F591EE0031860C /* Build configuration list for PBXNativeTarget "Example-macOS" */ = { 937 | isa = XCConfigurationList; 938 | buildConfigurations = ( 939 | 79C10FE023F591EE0031860C /* Debug */, 940 | 79C10FE123F591EE0031860C /* Release */, 941 | ); 942 | defaultConfigurationIsVisible = 0; 943 | defaultConfigurationName = Release; 944 | }; 945 | /* End XCConfigurationList section */ 946 | 947 | /* Begin XCRemoteSwiftPackageReference section */ 948 | E1482E3C246FABC500FD62CA /* XCRemoteSwiftPackageReference "SwimplyCache" */ = { 949 | isa = XCRemoteSwiftPackageReference; 950 | repositoryURL = "https://github.com/docterd/SwimplyCache.git"; 951 | requirement = { 952 | kind = upToNextMajorVersion; 953 | minimumVersion = 1.0.0; 954 | }; 955 | }; 956 | /* End XCRemoteSwiftPackageReference section */ 957 | 958 | /* Begin XCSwiftPackageProductDependency section */ 959 | E1482E3D246FABC500FD62CA /* SwimplyCache */ = { 960 | isa = XCSwiftPackageProductDependency; 961 | package = E1482E3C246FABC500FD62CA /* XCRemoteSwiftPackageReference "SwimplyCache" */; 962 | productName = SwimplyCache; 963 | }; 964 | E1482E43246FAC5200FD62CA /* SwimplyCache */ = { 965 | isa = XCSwiftPackageProductDependency; 966 | package = E1482E3C246FABC500FD62CA /* XCRemoteSwiftPackageReference "SwimplyCache" */; 967 | productName = SwimplyCache; 968 | }; 969 | E1482E45246FAC6500FD62CA /* SwimplyCache */ = { 970 | isa = XCSwiftPackageProductDependency; 971 | package = E1482E3C246FABC500FD62CA /* XCRemoteSwiftPackageReference "SwimplyCache" */; 972 | productName = SwimplyCache; 973 | }; 974 | /* End XCSwiftPackageProductDependency section */ 975 | }; 976 | rootObject = 7933919223F58ED70080AD66 /* Project object */; 977 | } 978 | -------------------------------------------------------------------------------- /SwimplyLabel.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /SwimplyLabel.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /SwimplyLabel.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved: -------------------------------------------------------------------------------- 1 | { 2 | "object": { 3 | "pins": [ 4 | { 5 | "package": "SwimplyCache", 6 | "repositoryURL": "https://github.com/docterd/SwimplyCache.git", 7 | "state": { 8 | "branch": null, 9 | "revision": "48472a0bd6c7872e21b6508f1fbafadf2c822d60", 10 | "version": "1.0.0" 11 | } 12 | } 13 | ] 14 | }, 15 | "version": 1 16 | } 17 | -------------------------------------------------------------------------------- /SwimplyLabel.xcodeproj/xcshareddata/xcschemes/SwimplyCache-iOS.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 | -------------------------------------------------------------------------------- /SwimplyLabel.xcodeproj/xcshareddata/xcschemes/SwimplyCache-macOS.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 | -------------------------------------------------------------------------------- /SwimplyLabel.xcodeproj/xcshareddata/xcschemes/SwimplyCache-tvOS.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 | --------------------------------------------------------------------------------