[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-7125":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":16,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":21,"hasPages":19,"topics":22,"createdAt":10,"pushedAt":10,"updatedAt":30,"readmeContent":31,"aiSummary":32,"trendingCount":16,"starSnapshotCount":16,"syncStatus":33,"lastSyncTime":34,"discoverSource":35},7125,"SwiftTheme","wxxsw\u002FSwiftTheme","wxxsw","🎨 Powerful theme\u002Fskin manager for iOS 9+ 主题\u002F换肤, 暗色模式","",null,"Swift",2536,311,50,12,0,59.48,"MIT License",false,"master",true,[23,24,25,26,27,28,29],"dark-mode","ios","night-mode","skin","swift","theme","ui","2026-06-12 04:00:32","![SwiftTheme](https:\u002F\u002Fraw.githubusercontent.com\u002Fwxxsw\u002FSwiftThemeResources\u002Fmaster\u002FScreenshots\u002Flogo.png)\n\n\u003Cp align=\"center\">\n\u003Ca href=\"#introduction\">Introduction\u003C\u002Fa> -\n\u003Ca href=\"#demos\">Demos\u003C\u002Fa> -\n\u003Ca href=\"#installation\">Installation\u003C\u002Fa> -\n\u003Ca href=\"#documents\">Documents\u003C\u002Fa> -\n\u003Ca href=\"#faq\">FAQ\u003C\u002Fa> -\n\u003Ca href=\"#contribution\">Contribution\u003C\u002Fa> -\n\u003Ca href=\"README_CN.md\">中文文档\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n\u003Ca href=\"https:\u002F\u002Fdeveloper.apple.com\u002Fswift\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flanguage-swift5-f48041.svg?style=flat\">\u003C\u002Fa>\n\u003Ca href=\"http:\u002F\u002Fcocoadocs.org\u002Fdocsets\u002FSwiftTheme\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fcocoapods\u002Fv\u002FSwiftTheme.svg?style=flat\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FCarthage\u002FCarthage\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fcarthage-compatible-4BC51D.svg?style=flat\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fdeveloper.apple.com\u002Fios\">\u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-iOS%209%2B | tvOS%209%2B-blue.svg?style=flat\">\u003C\u002Fa>\n\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fwxxsw\u002FSwiftTheme\u002Fblob\u002Fmaster\u002FLICENSE\">\u003Cimg src=\"http:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-lightgrey.svg?style=flat\">\u003C\u002Fa>\n\u003C\u002Fp>\n\n## Screenshot\n\n![](https:\u002F\u002Fgithub.com\u002Fwxxsw\u002FSwiftThemeResources\u002Fblob\u002Fmaster\u002FScreenshots\u002Fswitch.gif)\n\n> Running：open `SwiftTheme.xcworkspace`, run target `PlistDemo`\n\n## Introduction\n### The Beginning Of The Story\n\nAs part of our project requirement, we need to add night mode to our app. It's not as simple as just changing brightness or alpha on the top-level view—in fact, it needs an entirely new interface: different colors, different alpha, different image cuts. More accurately, \"night mode\" is a theme\u002Fskinning feature that can switch between bright theme and dark themes.\n\nSo how do we achieve this? Maybe we can set a global variable that represents the currently selected theme, and use different background colors or image cuts based on the variable during the controller's initialization. But then how do we deal with views that have already been initialized? Yes, we could use notifications to change their colors or image cuts, but this leads to controllers unnecessarily full of notification register\u002Funregister, if...else and UI updating code. Worse, if you forget to unregister the notifications, your app may crash.\n\nAfter some consideration, we put forward higher requirements on the task: create a simple and reusable themes\u002Fskinning framework, here as you see.\n\n### Goals\n\nMake SwiftTheme a simple, powerful, high-performance, extensible themes\u002Fskinning framework. Provide a unified solution for iOS.\n\n## Demos\n\n\n### Index Mode\n\nVary background color of UIView according to the theme setting:\n\n```swift\nview.theme_backgroundColor = [\"#FFF\", \"#000\"]\n```\n\nVary text color of UILabel and UIButton:\n\n```swift\nlabel.theme_textColor = [\"#000\", \"#FFF\"]\nbutton.theme_setTitleColor([\"#000\", \"#FFF\"], forState: .Normal)\n```\n\nVary image of UIImageView:\n\n```swift\nimageView.theme_image = [\"day\", \"night\"]\n\n\u002F\u002F It's ok by using UIImage instances if you don't want to use image names.\nimageView.theme_image = ThemeImagePicker(images: image1, image2)\n```\n\nA miracle happens after you execute the single line of code below!\n\n```swift\n\u002F\u002F these numbers represent the parameters' index. \n\u002F\u002F eg. \"view.theme_backgroundColor = [\"#FFF\", \"#000\"]\", index 0 represents \"#FFF\", index 1 represents \"#000\"\nThemeManager.setTheme(index: isNight ? 1 : 0)\n```\n\nGet current theme index.\n\n```swift\nThemeManager.currentThemeIndex\t\u002F\u002F Readonly\n```\n\n> Index mode is a fast way for the situation: a few themes, but not many, no need to download more new themes.\n\nNotice About Literal:\n\n```swift\n\u002F\u002F Wrong example:\nlet colors = [\"#FFF\", \"#000\"]\nview.theme_backgroundColor = colors\n\n\u002F\u002F You should write like this:\nview.theme_backgroundColor = [\"#FFF\", \"#000\"]\n\u002F\u002F or this:\nlet colorPickers: ThemeColorPicker = [\"#FFF\", \"#000\"]\nview.theme_backgroundColor = colorPickers\n```\n\n> Because theme_backgroundColor accepts an argument of type ThemeColorPicker，not Array. Nevertheless, \"view.theme_backgroundColor = [\"#FFF\", \"#000\"]\" does the same as initializing an instance of ThemeColorPicker by \"Literal\" and passing it to the theme_backgroundColor.\n\n\n\n### Plist\u002FJSON Mode\nYou may want to make your app download and install an indefinite number of themes. To fulfill this requirement, we provide plist mode. Simply put, you write configuration info such as colors, image cuts and so on, in a plist file. Then, you can use their keys in the logic code. So, the plist file and the resource files are used to constitute a theme package.\n\nUsage demo of plist mode.\n\n```swift\nview.theme_backgroundColor = \"Global.backgroundColor\"\nimageView.theme_image = \"SelectedThemeCell.iconImage\"\n```\n> Similar with the index mode. Only the specific parameters become keys. And as such, we give it the extension ability.\n\n\nThe plist file name is the first paramter of the switching method. In this example, the plist file and other resource files are in the application bundle. It's also ok if they are in sandbox.\n\n```swift\nThemeManager.setTheme(plistName: \"Red\", path: .mainBundle)\n```\n\n> plist mode allow you install more themes without modifying logic code. So, you can add the feature that, downloading and installing themes for your app.\n\nthe screenshots of the plist and image files we used above:\n\n![](https:\u002F\u002Fgithub.com\u002Fwxxsw\u002FSwiftThemeResources\u002Fblob\u002Fmaster\u002FScreenshots\u002F1.pic.jpg)\n![](https:\u002F\u002Fgithub.com\u002Fwxxsw\u002FSwiftThemeResources\u002Fblob\u002Fmaster\u002FScreenshots\u002F2.pic.jpg)\n\n### Objective-C\n\nFully compatible with Objective-C, usage demo:\n\n```objective-c\nlbl.theme_backgroundColor = [ThemeColorPicker pickerWithColors:@[@\"#FAF9F9\", @\"#E2E2E2\"]];\n```\n\n### Features\n- [x] Written in Swift\n- [x] Fully compatible with Objective-C\n- [x] Based on runtime\n- [x] Simple integration\n- [x] Extension property prefix with \"theme_*\", friendly with IDE auto-completion\n- [x] Support UIAppearance\n- [x] Index mode, fast integration\n- [x] Plist mode, extend infinite themes\n- [x] Friendly error logs\n- [x] Strongly typed ThemePicker, detect errors during compilling\n- [x] Complete demos\n\n\n## Installation\n\n#### CocoaPods\n```swift\npod 'SwiftTheme'\nuse_frameworks!\n```\n\n#### Carthage\n```swift\ngithub \"wxxsw\u002FSwiftTheme\"\n```\n\n#### Swift Package Manager\n\n1. Select `Xcode -> File -> Swift Packages -> Add Package Dependency...` \n2. Enter `https:\u002F\u002Fgithub.com\u002Fwxxsw\u002FSwiftTheme`.\n3. Click `Next`, then select the version, complete.\n\n#### Source files\nCopy all the files in \"Sources\" folder into your project\n\n## Documents\n\nNote：`①` usage of index mode `②` usage of plist mode\n\n### *Basic Usage*\n***\n\n#### Configure Appearance\n\nSwiftTheme provides new properties for views, they all beigin with `theme_`. Such as `theme_backgroundColor` corresponds `backgroundColor`.\n\n```swift\n①\nview.theme_backgroundColor = ThemeColorPicker(colors: \"#FFF\", \"#000\")\nview.theme_image = ThemeImagePicker(names: \"day\", \"night\")\n②\nview.theme_backgroundColor = ThemeColorPicker(keyPath: \"SomeColorKeyPath\")\nview.theme_image = ThemeImagePicker(keyPath: \"SomeImageKeyPath\")\n```\n> Different type of properties receive different type of Pickers. Thus, IDE will warn you if you pass a wrong parameter.\n\n#### Switch Themes\n\nWhen you switch themes, all the `theme_` properties you set will update with animation. Usage:\n\n```swift\n①\nThemeManager.setTheme(index: 0) \u002F\u002F ThemePickers will use the first parameter, eg. \"#FFF\" \"day\"\nThemeManager.setTheme(index: 1) \u002F\u002F ThemePickers will use the second parameter, eg. \"#000\" \"night\"\n②\n\u002F\u002F use \"day.plist\" in the appllication bundle as the theme configuration file. \n\u002F\u002F In this mode, SwiftTheme will find the resource files in the appllication bundle.\nThemeManager.setTheme(plistName: \"day\", path: .mainBundle)\n\u002F\u002F use \"night.plist\" in the sandbox as the theme configuration file, \"someURL\" is its file path. \n\u002F\u002F In this mode, SwiftTheme will find the resource files in the same path.\nThemeManager.setTheme(plistName: \"night\", path: .sandbox(someURL))\n\u002F\u002F use a dictionary as the theme configuration, but find resource files in the sandbox.(Not recommend)\nThemeManager.setTheme(dict: dict, path: .sandbox(someURL))\n```\n\n#### Custom Behaviors\n\nSwiftTheme posts a notification named `ThemeUpdateNotification` when theme changes, you can observe this notification anywhere and do whatever you want:\n```swift\nNotificationCenter.default.addObserver(\n\tself, \n\tselector: #selector(doSomethingMethod),\n\tname: NSNotification.Name(rawValue: ThemeUpdateNotification), \n\tobject: nil\n)\n```\n```objective-c\n[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(doSomethingMethod) name:@\"ThemeUpdateNotification\" object:nil];\n```\n\n### *Now Supported Properties*\n***\n\n> Child classes inherit the properties from their super class, such as UILabel have theme_alpha inherited from UIView. These properties will not be list in child classes below.\n\n##### UIView\n- var theme_alpha: ThemeCGFloatPicker?\n- var theme_backgroundColor: ThemeColorPicker?\n- var theme_tintColor: ThemeColorPicker?\n\n##### UIApplication\n- func theme_setStatusBarStyle(picker: ThemeStatusBarStylePicker, animated: Bool)\n\n##### UIBarButtonItem\n- var theme_tintColor: ThemeColorPicker?\n\n##### UILabel\n- var theme_font: ThemeFontPicker?\n- var theme_textColor: ThemeColorPicker?\n- var theme_textAttributes: ThemeStringAttributesPicker?\n- var theme_highlightedTextColor: ThemeColorPicker?\n- var theme_shadowColor: ThemeColorPicker?\n\n##### UINavigationBar\n- var theme_barStyle: ThemeBarStylePicker?\n- var theme_barTintColor: ThemeColorPicker?\n- var theme_titleTextAttributes: ThemeDictionaryPicker?\n\n##### UITabBar\n- var theme_barStyle: ThemeBarStylePicker?\n- var theme_barTintColor: ThemeColorPicker?\n\n##### UITableView\n- var theme_separatorColor: ThemeColorPicker?\n\n##### UITextField\n- var theme_font: ThemeFontPicker?\n- var theme_keyboardAppearance: ThemeKeyboardAppearancePicker?\n- var theme_textColor: ThemeColorPicker?\n- var theme_placeholderAttributes: ThemeDictionaryPicker?\n\n##### UITextView\n- var theme_font: ThemeFontPicker?\n- var theme_textColor: ThemeColorPicker?\n\n##### UIToolbar\n- var theme_barStyle: ThemeBarStylePicker?\n- var theme_barTintColor: ThemeColorPicker?\n\n##### UISegmentedControl\n- var theme_selectedSegmentTintColor: ThemeColorPicker?\n- func theme_setTitleTextAttributes(_ picker: ThemeStringAttributesPicker?, forState state: UIControl.State)\n\n##### UISwitch\n- var theme_onTintColor: ThemeColorPicker?\n- var theme_thumbTintColor: ThemeColorPicker?\n\n##### UISlider\n- var theme_thumbTintColor: ThemeColorPicker?\n- var theme_minimumTrackTintColor: ThemeColorPicker?\n- var theme_maximumTrackTintColor: ThemeColorPicker?\n\n##### UISearchBar\n- var theme_barStyle: ThemeBarStylePicker?\n- var theme_barTintColor: ThemeColorPicker?\n\n##### UIProgressView\n- var theme_progressTintColor: ThemeColorPicker?\n- var theme_trackTintColor: ThemeColorPicker?\n\n##### UIPageControl\n- var theme_pageIndicatorTintColor: ThemeColorPicker?\n- var theme_currentPageIndicatorTintColor: ThemeColorPicker?\n\n##### UIImageView\n- var theme_image: ThemeImagePicker?\n\n##### UIActivityIndicatorView\n- var theme_activityIndicatorViewStyle: ThemeActivityIndicatorViewStylePicker?\n\n##### UIButton\n- func theme_setImage(picker: ThemeImagePicker?, forState state: UIControlState)\n- func theme_setBackgroundImage(picker: ThemeImagePicker?, forState state: UIControlState)\n- func theme_setTitleColor(picker: ThemeColorPicker?, forState state: UIControlState)\n- func theme_setAttributedTitle(picker: ThemeAttributedStringPicker?, forState state: UIControlState)\n\n##### CALayer\n- var theme_backgroundColor: ThemeCGColorPicker?\n- var theme_borderWidth: ThemeCGFloatPicker?\n- var theme_borderColor: ThemeCGColorPicker?\n- var theme_shadowColor: ThemeCGColorPicker?\n\n##### CATextLayer\n- var theme_foregroundColor: ThemeCGColorPicker?\n\n##### CAGradientLayer\n- var theme_colors: ThemeAnyPicker?\n\n##### UIRefreshControl\n- var theme_titleAttributes: ThemeDictionaryPicker?\n\n##### UIVisualEffectView\n- var theme_effect: ThemeVisualEffectPicker?\n\n### *Picker*\n***\n\n#### ThemeColorPicker\n```swift\n\u002F\u002F supported formats:\n\u002F\u002F \"#ffcc00\"\t\tRGB\n\u002F\u002F \"#ffcc00dd\"\t\tRGBA\n\u002F\u002F \"#FFF\"\t\t\tRGB in short\n\u002F\u002F \"#013E\"\t\t\tRGBA in short\n①\nThemeColorPicker(colors: \"#FFFFFF\", \"#000\")\nThemeColorPicker(colors: UIColor.red, UIColor.blue)\nThemeColorPicker.pickerWithColors([\"#FFFFFF\", \"#000\"])\nThemeColorPicker.pickerWithUIColors([UIColor.red, UIColor.blue])\n②\nThemeColorPicker(keyPath: \"someStringKeyPath\")\nThemeColorPicker.pickerWithKeyPath(\"someStringKeyPath\")\n```\n\n#### ThemeImagePicker\n```swift\n①\nThemeImagePicker(names: \"image1\", \"image2\")\nThemeImagePicker.pickerWithNames([\"image1\", \"image2\"])\nThemeImagePicker(images: UIImage(named: \"image1\")!, UIImage(named: \"image2\")!)\nThemeImagePicker.pickerWithImages([UIImage(named: \"image1\")!, UIImage(named: \"image2\")!])\n②\nThemeImagePicker(keyPath: \"someStringKeyPath\")\nThemeImagePicker.pickerWithKeyPath(\"someStringKeyPath\")\n```\n\n#### ThemeCGFloatPicker\n```swift\n①\nThemeCGFloatPicker(floats: 1.0, 0.7)\nThemeCGFloatPicker.pickerWithFloats([1.0, 0.7])\n②\nThemeCGFloatPicker(keyPath: \"someNumberKeyPath\")\nThemeCGFloatPicker.pickerWithKeyPath(\"someNumberKeyPath\")\n```\n\n#### ThemeCGColorPicker\n```swift\n①\nThemeCGColorPicker(colors: \"#FFFFFF\", \"#000\")\nThemeCGColorPicker(colors: UIColor.red, UIColor.blue)\nThemeCGColorPicker(colors: UIColor.red.cgColor, UIColor.blue.cgColor)\nThemeCGColorPicker.pickerWithColors([\"#FFFFFF\", \"#000\"])\nThemeCGColorPicker.pickerWithUIColors([UIColor.blue, UIColor.red])\n②\nThemeCGColorPicker(keyPath: \"someStringKeyPath\")\nThemeCGColorPicker.pickerWithKeyPath(\"someStringKeyPath\")\n```\n\n#### ThemeFontPicker\n```swift\n①\nThemeFontPicker(fonts: UIFont.systemFont(ofSize: 10), UIFont.systemFont(ofSize: 11))\nThemeFontPicker.pickerWithFonts([UIFont.systemFont(ofSize: 10), UIFont.systemFont(ofSize: 11)])\n②\n\u002F\u002F name the key you like, but the available values format like this: \"PingFangSC-Regular,16\"\nThemeFontPicker(keyPath: \"someStringKeyPath\")\nThemeFontPicker.pickerWithKeyPath(\"someStringKeyPath\")\n```\n\n#### ThemeDictionaryPicker\n```swift\n①\nThemeDictionaryPicker(dicts: [\"key\": \"value\"], [\"key\": \"value\"])\nThemeDictionaryPicker.pickerWithDicts([[\"key\": \"value\"], [\"key\": \"value\"]])\n②\nThemeDictionaryPicker(keyPath: \"someStringKeyPath\") { (Any?) -> [String: AnyObject]? in ... }\n```\n\n#### ThemeStringAttributesPicker\n```swift\n①\nThemeStringAttributesPicker([\"key\": \"value\"], [\"key\": \"value\"])\nThemeStringAttributesPicker.pickerWithAttributes([NSAttributedStringKey.font: UIFont.systemFont(ofSize: 16)])\n②\nThemeStringAttributesPicker(keyPath: \"someStringKeyPath\") { (Any?) -> [NSAttributedString.Key: Any]? in ... }\n```\n\n#### ThemeAttributedStringPicker\n```swift\n①\nThemeAttributedStringPicker(NSAttributedString(...), NSAttributedString(...))\nThemeAttributedStringPicker.pickerWithAttributedStrings([NSAttributedString(...)])\n②\nThemeAttributedStringPicker(keyPath: \"someStringKeyPath\") { (Any?) -> NSAttributedString? in ... }\n```\n\n#### ThemeBarStylePicker\n```swift\n①\nThemeBarStylePicker(styles: .default, .black)\nThemeBarStylePicker.pickerWithStyles([.default, .black])\nThemeBarStylePicker.pickerWithStringStyles([\"default\", \"black\"])\n②\n\u002F\u002F name the key you like, but the available values are \"default\" and \"black\"\nThemeBarStylePicker(keyPath: \"someStringKeyPath\")\nThemeBarStylePicker.pickerWithKeyPath(\"someStringKeyPath\")\n```\n\n#### ThemeStatusBarStylePicker\n```swift\n①\nThemeStatusBarStylePicker(styles: .default, .lightContent, .darkContent)\nThemeStatusBarStylePicker.pickerWithStyles([.default, .lightContent, .darkContent])\nThemeStatusBarStylePicker.pickerWithStringStyles([\"default\", \"lightContent\", \"darkContent\"])\n②\n\u002F\u002F name the key you like, but the available values are \"default\", \"lightContent\" and \"darkContent\"\nThemeStatusBarStylePicker(keyPath: \"someStringKeyPath\")\nThemeStatusBarStylePicker.pickerWithKeyPath(\"someStringKeyPath\")\n```\n\n#### ThemeKeyboardAppearancePicker\n```swift\n①\nThemeKeyboardAppearancePicker(styles: .default, .dark, .light)\nThemeKeyboardAppearancePicker.pickerWithStyles([.default, .dark, .light])\nThemeKeyboardAppearancePicker.pickerWithStringStyles([\"default\", \"dark\", \"light\"])\n②\n\u002F\u002F name the key you like, but the available values are \"default\", \"dark\" and \"light\"\nThemeKeyboardAppearancePicker(keyPath: \"someStringKeyPath\")\nThemeKeyboardAppearancePicker.pickerWithKeyPath(\"someStringKeyPath\")\n```\n\n#### ThemeActivityIndicatorViewStylePicker\n```swift\n①\nThemeActivityIndicatorViewStylePicker(styles: .whiteLarge, .white, .gray)\nThemeActivityIndicatorViewStylePicker.pickerWithStyles([.whiteLarge, .white, .gray])\nThemeActivityIndicatorViewStylePicker.pickerWithStringStyles([\"whiteLarge\", \"white\", \"gray\"])\n②\n\u002F\u002F name the key you like, but the available values are \"whiteLarge\", \"white\" and \"gray\"\nThemeActivityIndicatorViewStylePicker(keyPath: \"someStringKeyPath\")\nThemeActivityIndicatorViewStylePicker.pickerWithKeyPath(\"someStringKeyPath\")\n```\n\n#### ThemeVisualEffectPicker\n```swift\n①\nThemeVisualEffectPicker(effects: UIBlurEffect(style: .light), UIBlurEffect(style: .dark))\nThemeVisualEffectPicker.pickerWithEffects([UIBlurEffect(style: .light), UIBlurEffect(style: .dark)])\nThemeVisualEffectPicker.pickerWithStringEffects([\"light\", \"dark\", \"extralight\", \"prominent\", \"regular\"])\n②\n\u002F\u002F name the key you like, but the available values are \"light\", \"dark\", \"extralight\", \"prominent\" and \"regular\"\nThemeVisualEffectPicker(keyPath: \"someStringKeyPath\")\nThemeVisualEffectPicker.pickerWithKeyPath(\"someStringKeyPath\")\n```\n\n#### ThemeAnyPicker\n```swift\n①\nThemeAnyPicker(anys: 0, \"123\", UIColor.red)\nThemeAnyPicker.pickerWithAnys([0, \"123\", UIColor.red])\n②\nThemeAnyPicker(keyPath: \"someStringKeyPath\")\nThemeAnyPicker.pickerWithKeyPath(\"someStringKeyPath\")\n```\n\n### *More*\n\nDownload this project and find more. There are four demo targets:\n\n- `Demo` shows how to use index mode and how to save the last selection of themes and other general usages.\n- `PlistDemo` shows how to use plist mode and how to download themes that packaged in zip files.\n- `JsonDemo` is like `PlistDemo`, but use `json`.\n- `OCDemo` is `Demo`'s Objective-C version.\n- `TVOSDemo` is used to test tvos compatibility.\n\n## FAQ\n\n1.  Why doesn't theme_setStatusBarStyle work as expected?\n\n    In your app's `Info.plist` you will need to set `View Controller-based status bar appearence` to `NO`.\n    \n2.  Can I manually cancel the theme of a property?\n\n    Sure, just make it `nil`—example: `view.theme_backgroundColor = nil`.\n\n## Contribution\n\n### Issue\nIf you find a bug or need a help, you can [create a issue](https:\u002F\u002Fgithub.com\u002Fwxxsw\u002FSwiftTheme\u002Fissues\u002Fnew)\n\n\n### Pull Request\nWe are happy to accept pull requests :D. But please make sure it's needed by most developers and make it simple to use. If you are not sure, create an issue and we can discuss it before you get to coding.\n\n### Contributors\n[Gesen](https:\u002F\u002Fgithub.com\u002Fwxxsw), [Zhoujun](https:\u002F\u002Fgithub.com\u002Fshannonchou), [Kevin Cramer](https:\u002F\u002Fgithub.com\u002Fkcramer)\n\n\n## Lisence\n\nThe MIT License (MIT)\n","SwiftTheme 是一个针对 iOS 9 及以上版本的强大主题\u002F换肤管理工具，支持暗色模式。它允许开发者通过简单的配置来改变应用的背景颜色、文本颜色以及图片等UI元素，从而实现白天和黑夜模式之间的平滑切换。采用 Swift 语言编写，具备高性能与良好的扩展性，能够显著简化主题切换相关的开发工作。适用于需要提供多种视觉风格或夜间模式选项的iOS应用开发场景，帮助提升用户体验的同时减少重复代码量。",2,"2026-06-11 03:10:38","top_language"]