RNBoilerplate is my solution to reusing structure, categories, configs, and third-party libraries/frameworks. It should be pretty straight forward on how to use. I'll explain what all is included and why.
Slowly double-click on the project name to rename your working project.
Click on your scheme and click Manage Schemes. Add a new scheme using your newly named project and remove the old one.
If the physical folder structure bothers you, take a look at this SO question for instructions on how to change it. Make sure you rename your unit test files if you do this or else you will run into headaches.
I use Parse as often as I can, though sometimes client requests remove them as an option. If I'm ever able to make the call on who/how we are doing networking, its Parse. Checkout their site , get an API key, and get rolling. I've included SDK version 1.1.11. I can't update via git or anything, its manual through their service. However, this version should be good for a while. I'll keep this project updated with major releases.
Testflight is a god-send. It makes beta-testing and distributing so effortless and simple. Just like Parse, the SDK is manual-update only. Included in this bundle is version 1.1 (they have a v1.2 beta available). Grab an API key to get rolling with them in this project as well.
I haven't used Flurry as much as I should, but recently iTunesConnect has been either too slow to update or doesn't contain enough information. Plus, who doesn't like analytics? This is another SDK + API key required project. The current SDK is version 3.1.2.
Quick note. The libraries mentioned thus far require API keys. I have setup
#error flags in my config file to let you know to either get an API key or comment that portion out. If an API key is not provided, the library is not loaded.
I've only experimented with this project a little bit, but I LOVE what I've seen. Logging is fast, has loads of options, and even let's you use colors in log statements! Pretty nifty.
I never leave home without this project. You're a good man @mattt. If you've never used, or heard of this project, give it a whirl. It basically makes HTTP requests, downloading/uploading, and streaming a breeze. It's well built, well maintained, and fails graciously.
This is likely one of the most popular progress HUD projects out there. I use it in any project that uses network requests. Remember not to use it too much as it's a UX interupter, but when you need to cover up a view until a task is finished, its awesome.
Another great project from @mattt. Paired with Testflight you can do some great A/B user testing remotely. This is a fairly new project but extremely useful. Its incredibly easy to use and provides great feedback.
I've included the files for this tool, but not included it in the actual project as it can be included via CocoaPods. However, if you need to install it manually the resources are there. Check out the docs for instructions. Unit tests are included by default and this extends the utility of doing those tests.
This is a simple tool created by Peter Steinberger that monitors the main thread for any activity that might be taking too much time, thus slowing down your app. Only enabled in non-production mode.
Monitor your view controllers and get warnings when your VCs were not deallocated. Sometimes blocks will capture your VCs in a retain cycle and you wont even notice. Only enabled in non-production mode.
I added a few useful categories that have helped me out tremendously. It's likely that I'll add more and more categories as I discover them. I recommend you think about what you need in your project when including categories. Just dropping in and importing hundres is not really a useful thing to do as you will become prone to difficult debugging challenges. I have a master category import file
RNCategories.h that is included in the prefix-header. Here you can decide what should be included in the project. You can also add your own categories the same way.
Credit goes to @steipete.
@interface UIView (Sizes) @property (nonatomic) CGFloat left; @property (nonatomic) CGFloat top; @property (nonatomic) CGFloat right; @property (nonatomic) CGFloat bottom; @property (nonatomic) CGFloat width; @property (nonatomic) CGFloat height; @property (nonatomic) CGPoint origin; @property (nonatomic) CGSize size; @end
Again credit goes to @steipete as I just copied UIView+Sizes for this.
@interface CALayer (Sizes) @property (nonatomic) CGFloat left; @property (nonatomic) CGFloat top; @property (nonatomic) CGFloat right; @property (nonatomic) CGFloat bottom; @property (nonatomic) CGFloat width; @property (nonatomic) CGFloat height; @property (nonatomic) CGPoint origin; @property (nonatomic) CGSize size; @end
@interface UIView (UIViewWithMBProgressHUD) - (void)hideHUD; @end @interface UIViewController (UIViewControllerWithMBProgressHUD) <MBProgressHUDDelegate> - (void)showHUD; - (void)showHUDWithText:(NSString*)text; - (void)hideHUD; - (BOOL)isHUDHidden; - (void)show:(MBProgressHUD*)hud; @end
@interface UIImage (AlteringUtilities) - (UIImage *)crop:(CGRect)rect; - (UIImage *)resize:(CGSize)size; @end
Inspiration for this came from CIMGF.
@interface NSObject (AutoKeyValue) - (void)setValuesForKeysWithJSONDictionary:(NSDictionary *)keyedValues dateFormatter:(NSDateFormatter *)dateFormatter; @end
Copyright (c) 2012 Ryan Nystrom (http://whoisryannystrom.com)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.