[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-6969":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":16,"stars30d":17,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":18,"rankGlobal":10,"rankLanguage":10,"license":19,"archived":20,"fork":20,"defaultBranch":21,"hasWiki":22,"hasPages":20,"topics":23,"createdAt":10,"pushedAt":10,"updatedAt":44,"readmeContent":45,"aiSummary":46,"trendingCount":16,"starSnapshotCount":16,"syncStatus":47,"lastSyncTime":48,"discoverSource":49},6969,"Stevia","freshOS\u002FStevia","freshOS",":leaves: Concise Autolayout code","https:\u002F\u002Ffreshos.github.io\u002FSteviaDocs\u002F",null,"Swift",3418,220,53,24,0,1,59.13,"MIT License",false,"master",true,[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"auto","autolayout","carthage","cocoapods","constraints","dsl","freshos","interface","ios","layout","layouts","nslayoutconstraints","stevia","storyboard","swift","ui","view","visual-format-language","xcode","xib","2026-06-12 04:00:31","![Stevia](https:\u002F\u002Fraw.githubusercontent.com\u002Fs4cha\u002FStevia\u002Fmaster\u002Fbanner.png)\n\n[![Documentation](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FRead_the-Docs-67ad5c.svg)](https:\u002F\u002Ffreshos.github.io\u002FSteviaDocs\u002F)\n[![Language: Swift 2, 3, 4, 5 and 6](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flanguage-swift%206-f48041.svg?style=flat)](https:\u002F\u002Fdeveloper.apple.com\u002Fswift)\n![Platform: iOS 8+](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-iOS%20|%20tvOS-blue.svg?style=flat)\n![Swift](https:\u002F\u002Fgithub.com\u002FfreshOS\u002FStevia\u002Fworkflows\u002FSwift\u002Fbadge.svg)\n[![Build Status](https:\u002F\u002Fapp.bitrise.io\u002Fapp\u002F4478e29045c5f12e\u002Fstatus.svg?token=pti6g-HVKBUPv9mIR3baIw)](https:\u002F\u002Fapp.bitrise.io\u002Fapp\u002F4478e29045c5f12e)\n[![codebeat badge](https:\u002F\u002Fcodebeat.co\u002Fbadges\u002F5b81e292-552c-4cf1-9ccc-89d333ec8b79)](https:\u002F\u002Fcodebeat.co\u002Fprojects\u002Fgithub-com-freshos-stevia-master)\n[![License: MIT](http:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-lightgrey.svg?style=flat)](https:\u002F\u002Fgithub.com\u002Fs4cha\u002FStevia\u002Fblob\u002Fmaster\u002FLICENSE)\n[![GitHub contributors](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fcontributors\u002Ffreshos\u002FStevia.svg)](https:\u002F\u002Fgithub.com\u002Ffreshos\u002FStevia\u002Fgraphs\u002Fcontributors)\n[![GitHub tag](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Frelease\u002Ffreshos\u002FStevia.svg)]()\n\n\n\u003Cp align=\"center\">\n    \u003Ca href=\"https:\u002F\u002Fwww.hackingwithswift.com\u002Farticles\u002F9\u002Fbest-alternatives-to-auto-layout\">\n        \u003Cimg src=\"https:\u002F\u002Fwww.hackingwithswift.com\u002Fuploads\u002Frecommended@2x.png\" alt=\"Drawing\" width=\"300px;\" \u002F>\n    \u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n    \u003Ca href=\"https:\u002F\u002Fwww.hackingwithswift.com\u002Farticles\u002F9\u002Fbest-alternatives-to-auto-layout\">\n        Winner of Hacking with Swift Recommended award\n    \u003C\u002Fa>\n\u003C\u002Fp>\n\n## You + Stevia = 🦄\n- [x] 💡 Write **concise**, **readable** layouts\n- [x] 🏖 **Reduce** your **maintenance** time\n- [x] 🎨 **Compose** your styles, **CSS-like**\n- [x] 🔴 Plug **Live reload** and **boost** your iteration cycles\n\n\n[Reason](#-reason) - [Example](#login-view-example) - [Live Reload](#-live-reload) - [Installation](#️-installation) - [Documentation](#-documentation)\n\n\n### 🖼 Visual Layout Api\n```swift\nlayout {\n    100\n    |-email-| ~ 80\n    10%\n    |-password-forgot-| ~ 80\n    >=20\n    |login| ~ 80\n    0\n}\n```\n### ⛓ Chainable Api\n```swift\nemail.top(100).left(8).right(8).width(200).height(44)\nalignHorizontally(password, forgot)\nimage.fillContainer()\nbutton.centerInContainer().size(50%)\nequalWidths(email, password)\nimage.width(>=80)\n```\n\n### 📐 Equation-Based Api\n```swift\nemail.Top == 100\npassword.CenterY == forgot.CenterY\nlogin.Top >= password.Bottom + 20\nlogin.Width == 75 % Width\n(image.Height == 100).priority = UILayoutPriority(rawValue: 999)\n```\n\nAll Generate **native** NSLayoutConstraints 🎉\n\n### 👨‍🔬Try it!\n\nStevia is part of [freshOS](https:\u002F\u002Fgithub.com\u002FfreshOS) iOS toolset. Try it in an example App ! \u003Ca class=\"github-button\" href=\"https:\u002F\u002Fgithub.com\u002FfreshOS\u002FStarterProject\u002Farchive\u002Fmaster.zip\" data-icon=\"octicon-cloud-download\" data-style=\"mega\" aria-label=\"Download freshOS\u002FStarterProject on GitHub\">Download Starter Project\u003C\u002Fa>\n\n### 💡 Reason\nBecause **nothing holds more truth than pure code** 🤓  \nXibs and storyboards are **heavy, hard to maintain, hard to merge.**  \nThey split the view concept into 2 separate files making debugging a **nightmare**    \n*There must be a better way*\n\n#### How\nBy creating a tool that makes Auto layout code finally **readable by a human being**.  \nBy coupling it with live code injection such as *[injectionForXcode](http:\u002F\u002Fjohnholdsworth.com\u002Finjection.html)* we can **design views in real time**  \nView layout becomes **fun**, **concise**, **maintainable** and dare I say, *beautiful* ❤️\n\n### Login View Example\nIn the project folder, you can find an example of a typical login view laid out in both native and Stevia for you to understand and compare the two approaches.\n\nAs a spoiler alert, the **number of characters** goes from 2380 to 1239 **( ~ divided by 2)**\n\nWrite **Half the code** that is actually **10X more expressive and maintainable** !\n\n### 🔴 Live Reload\n\nLive reload enables you to develop your views live without relaunching the app everytime.\n\nStevia + [InjectionForXcode](http:\u002F\u002Fjohnholdsworth.com\u002Finjection.html) = #WhoNeedsReactNative?? 🚀\n\n\u003Cimg src=\"http:\u002F\u002Fg.recordit.co\u002Fi6kQfTMEpg.gif\" height=\"300\" width=\"360\" \u002F>\n\n*Just `Cmd+S` and you can dev live in the simulator !*\n\nLearn more about how to set up live reload [here](https:\u002F\u002Ffreshos.github.io\u002FSteviaDocs\u002FliveReload\u002F).\n\n\n### ⚙️ Installation\n\n`Stevia` is installed via the official [Swift Package Manager](https:\u002F\u002Fswift.org\u002Fpackage-manager\u002F).  \n\nSelect `Xcode`>`File`> `Swift Packages`>`Add Package Dependency...`  \nand add `https:\u002F\u002Fgithub.com\u002FfreshOS\u002FStevia`.\n\n*The Swift Package Manager (SPM) is now the official way to install `stevia`. The other package managers are now deprecated as of `4.8.0` and won't be supported in future versions.  \nFor Carthage\u002FCocoapods support (legacy versions) see documentation [here](https:\u002F\u002Ffreshos.github.io\u002FSteviaDocs\u002Finstallation\u002F).*\n\n### 📖 Documentation\nThe following will teach you the gist of Stevia in one minute.  \nTo go further, you can refer to the full documentation [here](https:\u002F\u002Ffreshos.github.io\u002FSteviaDocs\u002F).\n\n\nStevia enables you to write readable Auto Layout code. It does so by tackling the 3 main components of layout: **view hierarchy**, **layout** and **styling**.\n\n#### 01 - View hierarchy\n\n```swift\nemail.translatesAutoresizingMaskIntoConstraints = false\npassword.translatesAutoresizingMaskIntoConstraints = false\nlogin.translatesAutoresizingMaskIntoConstraints = false\naddSubview(email)\naddSubview(password)\naddSubview(login)\n```\nbecomes\n\n```swift\nsubviews {\n    email\n    password\n    login\n}\n```\n\n#### 02 - Layout\n```swift\nemail.topAnchor.constraint(equalTo: topAnchor, constant: 100).isActive = true\nemail.leftAnchor.constraint(equalTo: leftAnchor, constant: 8).isActive = true\nemail.rightAnchor.constraint(equalTo: rightAnchor, constant: -8).isActive = true\nemail.heightAnchor.constraint(equalToConstant: 80).isActive = true\n\npassword.topAnchor.constraint(equalTo: email.bottomAnchor, constant: 8).isActive = true\npassword.leftAnchor.constraint(equalTo: leftAnchor, constant: 8).isActive = true\npassword.rightAnchor.constraint(equalTo: rightAnchor, constant: -8).isActive = true\npassword.heightAnchor.constraint(equalToConstant: 80).isActive = true\n\nlogin.topAnchor.constraint(lessThanOrEqualTo: password.bottomAnchor, constant: 20).isActive = true\nlogin.leftAnchor.constraint(equalTo: leftAnchor).isActive = true\nlogin.rightAnchor.constraint(equalTo: rightAnchor).isActive = true\nlogin.heightAnchor.constraint(equalToConstant: 80).isActive = true\nlogin.bottomAnchor.constraint(equalTo: bottomAnchor, constant: 0).isActive = true\n```\n\nbecomes\n\n```swift\nlayout {\n    100\n    |-email-| ~ 80\n    8\n    |-password-| ~ 80\n    >=20\n    |login| ~ 80\n    0\n}\n```\n\n#### 03 - Styling\n\n```swift\nemail.borderStyle = .roundedRect\nemail.autocorrectionType = .no\nemail.keyboardType = .emailAddress\nemail.font = UIFont(name: \"HelveticaNeue-Light\", size: 26)\n```\nbecomes\n```swift\nemail.style { f in\n    f.borderStyle = .roundedRect\n    f.autocorrectionType = .no\n    f.keyboardType = .emailAddress\n    f.font = UIFont(name: \"HelveticaNeue-Light\", size: 26)\n    f.returnKeyType = .next\n}\n```\n\n\n### 👨‍💻 Contributors\n\n[YannickDot](https:\u002F\u002Fgithub.com\u002FYannickDot),  [S4cha](https:\u002F\u002Fgithub.com\u002FS4cha),  [Damien](https:\u002F\u002Fgithub.com\u002Fdamien-nd),\n[Snowcraft](https:\u002F\u002Fgithub.com\u002FSnowcraft), [Mathieu-o](https:\u002F\u002Fgithub.com\u002FMathieu-o),\n[Blaz Merela](https:\u002F\u002Fgithub.com\u002Fb1az),\n[Theophane Rupin](https:\u002F\u002Fgithub.com\u002Ftrupin),\n[Jason Liang](https:\u002F\u002Fgithub.com\u002Fjyliang),\n[liberty4me](https:\u002F\u002Fgithub.com\u002Fliberty4me),\n[Scott Bates](https:\u002F\u002Fgithub.com\u002Fcowgp),\n[Sai](https:\u002F\u002Fgithub.com\u002Fsai-prasanna),\n[Mike Gallagher](https:\u002F\u002Fgithub.com\u002Fmgallagher),\n[WaterNotWords](https:\u002F\u002Fgithub.com\u002Fwaternotwords),\n[Mick MacCallum](https:\u002F\u002Fgithub.com\u002F0x7fffffff),\n[Onur Genes](https:\u002F\u002Fgithub.com\u002Fonurgenes)\n\n### 👥 Backers\nLike the project? Offer coffee or support us with a monthly donation and help us continue our activities :)\n\n### 📲 Apps using Stevia\n\nMany top-notch Apps with millions of users use Stevia to write better Auto Layout code:\n\n[\u003Cimg src=\"https:\u002F\u002Fis4-ssl.mzstatic.com\u002Fimage\u002Fthumb\u002FPurple113\u002Fv4\u002F4d\u002Fc1\u002F70\u002F4dc17011-3ca7-bf9a-5326-70db722686ca\u002FAppIcon-0-0-1x_U007emarketing-0-0-0-6-0-0-85-220.png\u002F230x0w.png\" height=\"80px\"\u002F>](https:\u002F\u002Fapps.apple.com\u002Fcn\u002Fapp\u002Fmobike-smart-bike-sharing\u002Fid1044535426?l=en)\n[\u003Cimg src=\"https:\u002F\u002Fis1-ssl.mzstatic.com\u002Fimage\u002Fthumb\u002FPurple113\u002Fv4\u002Fac\u002F38\u002F7a\u002Fac387a00-893c-66c4-8595-856ad9907c84\u002FAppIcon-0-0-1x_U007emarketing-0-0-0-6-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png\u002F230x0w.png\" height=\"80px\"\u002F>](https:\u002F\u002Fapps.apple.com\u002Fus\u002Fapp\u002Fid1001688546)\n[\u003Cimg src=\"https:\u002F\u002Fis2-ssl.mzstatic.com\u002Fimage\u002Fthumb\u002FPurple113\u002Fv4\u002F60\u002F90\u002Faf\u002F6090afc0-f2b1-40e7-d74f-78fd4f7309eb\u002FAppIcon-0-0-1x_U007emarketing-0-0-0-7-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png\u002F230x0w.png\" height=\"80px\"\u002F>](https:\u002F\u002Fapps.apple.com\u002Fus\u002Fapp\u002Fnerdwallet\u002Fid1174471607)\n[\u003Cimg src=\"https:\u002F\u002Fis2-ssl.mzstatic.com\u002Fimage\u002Fthumb\u002FPurple123\u002Fv4\u002F30\u002F0c\u002F1c\u002F300c1c5c-2ded-02bc-a073-14c2287509e4\u002FAppIcon-0-1x_U007emarketing-0-0-85-220-0-7.png\u002F230x0w.png\" height=\"80px\"\u002F>](https:\u002F\u002Fapps.apple.com\u002Fin\u002Fapp\u002Fyatra-flights-hotels-cabs\u002Fid730234679)\n[\u003Cimg src=\"https:\u002F\u002Fis1-ssl.mzstatic.com\u002Fimage\u002Fthumb\u002FPurple113\u002Fv4\u002Fb5\u002Fa1\u002F1d\u002Fb5a11d97-1982-6346-fab9-056ab6c55512\u002FAppIcon-0-0-1x_U007emarketing-0-0-0-6-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png\u002F230x0w.png\" height=\"80px\"\u002F>](https:\u002F\u002Fapps.apple.com\u002Fus\u002Fapp\u002Fyummypets-pets\u002Fid527910229)\n[\u003Cimg src=\"https:\u002F\u002Fis5-ssl.mzstatic.com\u002Fimage\u002Fthumb\u002FPurple123\u002Fv4\u002F8b\u002Fa0\u002F64\u002F8ba064be-c665-db32-9e63-5751c56dfb84\u002FAppIcon-0-1x_U007emarketing-0-85-220-0-7.png\u002F230x0w.png\" height=\"80px\"\u002F>](https:\u002F\u002Fapps.apple.com\u002Fus\u002Fapp\u002Finvitation-maker-ecard\u002Fid1446598881)\n[\u003Cimg src=\"https:\u002F\u002Fis5-ssl.mzstatic.com\u002Fimage\u002Fthumb\u002FPurple113\u002Fv4\u002F94\u002Fed\u002F1c\u002F94ed1cc6-dc70-9458-5ee1-f42d89d97e50\u002FAppIcon-0-1x_U007emarketing-0-85-220-0-7.png\u002F230x0w.png\" height=\"80px\"\u002F>](https:\u002F\u002Fapps.apple.com\u002Fus\u002Fapp\u002Flogo-maker-create-design\u002Fid1455008435)\n[\u003Cimg src=\"https:\u002F\u002Fis5-ssl.mzstatic.com\u002Fimage\u002Fthumb\u002FPurple123\u002Fv4\u002F76\u002Fbf\u002Fab\u002F76bfabcd-d607-b944-c7ce-433ffbbd09c0\u002FAppIconFREE-0-0-1x_U007emarketing-0-0-0-5-0-0-sRGB-0-0-0-GLES2_U002c0-512MB-85-220-0-0.png\u002F230x0w.png\" height=\"80px\"\u002F>](https:\u002F\u002Fapps.apple.com\u002Fus\u002Fapp\u002Fsmart-cleaner-clean-storage\u002Fid1194582243)\n[\u003Cimg src=\"https:\u002F\u002Fis5-ssl.mzstatic.com\u002Fimage\u002Fthumb\u002FPurple49\u002Fv4\u002Fdd\u002F54\u002Fb5\u002Fdd54b556-b289-ce8f-4a21-d7d5fb688a69\u002Fpr_source.png\u002F230x0w.png\" height=\"80px\"\u002F>](https:\u002F\u002Fapps.apple.com\u002Fus\u002Fapp\u002Ftuner-eclipse-free-guitar-tuner\u002Fid1086479185)\n\n- [Mobike](https:\u002F\u002Fapps.apple.com\u002Fcn\u002Fapp\u002Fmobike-smart-bike-sharing\u002Fid1044535426?l=en) - The world’s first and largest bike sharing system.\n- [Brightspace Pulse](https:\u002F\u002Fapps.apple.com\u002Fus\u002Fapp\u002Fid1001688546) - Education app\n- [NerdWallet](https:\u002F\u002Fapps.apple.com\u002Fus\u002Fapp\u002Fnerdwallet\u002Fid1174471607) - Credit Score, Budget, Finance\n- [Yatra](https:\u002F\u002Fapps.apple.com\u002Fin\u002Fapp\u002Fyatra-flights-hotels-cabs\u002Fid730234679) - Flights, Hotels & Cabs\n- [Yummypets](https:\u002F\u002Fapps.apple.com\u002Fus\u002Fapp\u002Fyummypets-pets\u002Fid527910229) - The world's cutest social network for pet lovers\n- [Invitation Maker](https:\u002F\u002Fapps.apple.com\u002Fus\u002Fapp\u002Finvitation-maker-ecard\u002Fid1446598881) - Greetings, Invite & Wishes\n- [Logo Maker](https:\u002F\u002Fapps.apple.com\u002Fus\u002Fapp\u002Flogo-maker-create-design\u002Fid1455008435) - Create & Design 10,000+ Professional Logos\n- [Smart Cleaner](https:\u002F\u002Fapps.apple.com\u002Fus\u002Fapp\u002Fsmart-cleaner-clean-storage\u002Fid1194582243) - Delete Phone Photos, Contacts\n- [Tuner Eclipse](https:\u002F\u002Fapps.apple.com\u002Fus\u002Fapp\u002Ftuner-eclipse-free-guitar-tuner\u002Fid1086479185) - Free Guitar Tuner\n- and many more...\n\nYou are using Stevia ? Please let me know @[sachadso@gmail.com](sachadso@gmail.com) and I'll add you to the list 😍!\n\n\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F0\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F0\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F1\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F1\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F2\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F2\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F3\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F3\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F4\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F4\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F5\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F5\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F6\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F6\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F7\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F7\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F8\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F8\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F9\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F9\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F10\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F10\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F11\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F11\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F12\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F12\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F13\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F13\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F14\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F14\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F15\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F15\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F16\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F16\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F17\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F17\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F18\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F18\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F19\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F19\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F20\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F20\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F21\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F21\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F22\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F22\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F23\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F23\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F24\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F24\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F25\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F25\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F26\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F26\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F27\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F27\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F28\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F28\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F29\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fbacker\u002F29\u002Favatar.svg\">\u003C\u002Fa>\n\n### 🏅 Sponsors\nBecome a sponsor and get your logo on our README on Github with a link to your site :)\n\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F0\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F0\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F1\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F1\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F2\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F2\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F3\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F3\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F4\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F4\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F5\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F5\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F6\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F6\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F7\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F7\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F8\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F8\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F9\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F9\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F10\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F10\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F11\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F11\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F12\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F12\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F13\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F13\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F14\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F14\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F15\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F15\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F16\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F16\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F17\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F17\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F18\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F18\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F19\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F19\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F20\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F20\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F21\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F21\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F22\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F22\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F23\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F23\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F24\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F24\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F25\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F25\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F26\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F26\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F27\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F27\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F28\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F28\u002Favatar.svg\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F29\u002Fwebsite\" target=\"_blank\">\u003Cimg src=\"https:\u002F\u002Fopencollective.com\u002Ffreshos\u002Fsponsor\u002F29\u002Favatar.svg\">\u003C\u002Fa>\n\n### Swift Version\n\n- Swift 2 -> [v**2.3.0**](https:\u002F\u002Fgithub.com\u002FfreshOS\u002FStevia\u002Freleases\u002Ftag\u002F2.3.0)\n- Swift 3 -> [v**3.2.0**](https:\u002F\u002Fgithub.com\u002FfreshOS\u002FStevia\u002Freleases\u002Ftag\u002F3.2.0)\n- Swift 4 -> [v**4.2.0**](https:\u002F\u002Fgithub.com\u002FfreshOS\u002FStevia\u002Freleases\u002Ftag\u002F4.2.0)\n- Swift 4.1 -> [v**4.3.2**](https:\u002F\u002Fgithub.com\u002FfreshOS\u002FStevia\u002Freleases\u002Ftag\u002F4.3.2)\n- Swift 4.2 -> [v**4.4.4**](https:\u002F\u002Fgithub.com\u002FfreshOS\u002FStevia\u002Freleases\u002Ftag\u002F4.4.4)\n- Swift 5.0 -> [v**4.5.0**](https:\u002F\u002Fgithub.com\u002FfreshOS\u002FStevia\u002Freleases\u002Ftag\u002F4.5.0)\n- Swift 5.1 -> [v**4.7.2**](https:\u002F\u002Fgithub.com\u002FfreshOS\u002FStevia\u002Freleases\u002Ftag\u002F4.7.2)\n- Swift 5.1.2 -> [v**4.7.3**](https:\u002F\u002Fgithub.com\u002FfreshOS\u002FStevia\u002Freleases\u002Ftag\u002F4.7.3)\n- Swift 6.0 -> [v**6.2.0**](https:\u002F\u002Fgithub.com\u002FfreshOS\u002FStevia\u002Freleases\u002Ftag\u002F6.2.0)\n","Stevia 是一个用于简化 iOS 和 tvOS 应用布局的 Swift 库。它通过提供简洁、易读且易于维护的 DSL（领域特定语言）来定义 Auto Layout 约束，从而显著减少开发者编写和调试布局代码所需的时间。Stevia 支持多种编程风格，包括可视化布局 API、链式 API 以及基于方程式的 API，所有这些最终都会生成原生的 NSLayoutConstraints。该库非常适合需要快速开发或迭代界面设计的应用场景，并且可以与 Carthage 或 CocoaPods 集成，方便项目管理。此外，Stevia 还支持实时重载功能，进一步提高了开发效率。",2,"2026-06-11 03:09:56","top_language"]