Binpress components 2013-04-06T04:06:10+00:00 Zend_Feed_Writer http://www.binpress.com Binpress contact@binpress.com http://www.binpress.com <![CDATA[In-App Feedback with Device Information - Objective-C | UIKit]]> 2013-04-06T04:06:10+00:00 2013-04-06T04:06:10+00:00 http://www.binpress.com/app/inapp-feedback-with-device-information/1381 Orange Group Apps noreply@binpress.com http://www.binpress.comdev/profile/20719 Launch customer support e-mails directly from your app, pre-filled with critical information. Streamline troubleshooting by collection information the first timeReceive support e-mails that automatically include app version, OS version, device model, and other customer data to solve customer issues faster. Do you ever receive user feedback from customers that lack details? &quot;App doesn't work&quot; or &quot;App crashes, fix it please!&quot; Perhaps you have a portfolio of apps and don't even know which one the user is complaining about. Rather than spending hours on a long e-mail conversation trying to figure out what version of your app the user has, what device they are using, and which version of iOS they are using, just use this drop-in replacement for MFMailComposeViewController. Anytime you prompt the user to send a feedback e-mail, the e-mail will automatically include: App name App version User's device (e.g. iPhone 5, iPad 3) Device name iOS version User's language User's country code Carrier (e.g. AT&amp;T) Screen resolution Device orientation Battery state (e.g. Unplugged, Full, Charging) Battery level <![CDATA[iOS In-App Purchases - Objective-C | UIKit | iPad | iPhone]]> 2013-02-24T19:14:32+00:00 2013-02-24T19:14:32+00:00 http://www.binpress.com/app/ios-inapp-purchases/1327 Markelsoft noreply@binpress.com http://www.binpress.comdev/profile/10505 The InAppPurchases class lets you sell a variety of items directly within your free or paid app, including premium content, virtual goods, and subscriptions. Includes a working demo, a test user and products.The InAppPurchases class is used to easily add any number of In-App purchases to any app and allow users to purchase or restore purchases at any time. Add another source of revenue to your app by adding add-ons as In-App purchases. InAppPurchases lets you sell a variety of items directly within your free or paid app, including premium content, virtual goods, and subscriptions. And just like apps you sell on the App Store, you receive 70% of the purchase price InAppPurchases lets you sell a variety of items directly within your free or paid app, including premium content, virtual goods, and subscriptions. For example, In-App Purchase will allow you to sell: Digital books or photos Additional game levels Access to a turn-by-turn map service Subscriptions to digital magazines or newsletters Digital content hosted on Apple servers Your app will be able to: Connect to the app store's in app purchase service Purchase products Automatically manages already purchased products Restore purchases (required by Apple AppStore for all apps providing In-App Purchases) Acquire product details Determine already purchased products Determine if can make payments Determine is a product is valid. Get a valid products identifier, localized description, localized title, localized price, and price. Use In-App purchase menu popover for initiating In-App purchases or roll your own. Full tracking of request, purchase and restore process so can fully integrate with your app. Test User and Products A test user and products come with the demo so actually purchases and restores can be done. In-App Purchases in iTunes Connect Includes step by step instructions for setting up your app's In-App purchase in iTunes Connect. iOS6 Component It's tested and works on iOS6 and above. <![CDATA[Survey Component for iPhone Apps iOS 6 - Objective-C | UIKit]]> 2012-12-10T15:20:59+00:00 2012-12-10T15:20:59+00:00 http://www.binpress.com/app/survey-component-for-iphone-apps-ios-6-/1229 Heaven Apps noreply@binpress.com http://www.binpress.comdev/profile/13548 Create and integrate surveys in your iPhone apps and get to know what your customers think about your products or services.Do you want to know what your customers think about your products or services? This component let you integrate a survey to help you collect valuable feedback from your customers. The survey component can be customized to be shown only in specific instances (After a number of application launches, taps or right after a completed action). Answers can either be sent to an email or using a POST to a remote server (in JSON). Package Includes ARC and NON-ARC supported source code. Documentation including explanation on how to Integrate this component in your iPhone application. Features Configuration Steps Add Survey classes to your main application classes located at path "~/HASURVEY/HASURVEY/Survey Classes" Choose when to show the alert for survey request Decide Which one to use i.e add Survey Questions locally or Pull from server Choose which all fields to consider as survey output. Choose How Do You Want Survey To Be Sent To You? Create an upload API, if you have configured to choose send survey data through POST API <![CDATA[Photoshop View - Objective-C | UIKit | iPad | iPhone]]> 2012-09-29T01:32:31+00:00 2012-09-29T01:32:31+00:00 http://www.binpress.com/app/photoshop-view/1155 Torin Nguyen noreply@binpress.com http://www.binpress.comdev/profile/11778 Photoshop mirror app. Full source code for PS View app (on AppStore). Download it from the AppStore for a test driveThis package is the full source code for PS View app, currently available for free download on the AppStore. The source code is sold as-is, no support is given as I don't have resources to maintain this app anymore. The source code provide an convenient framework for: Auto discover Photoshop machines within local WiFi Connect to Photoshop & keep-alive Mirror Photoshop canvas on to iOS device Universal app for both iPhone & iPad Extend the framework to perform/send other commands to Photoshop (eg, select a tool, draw something, etc.) is easy as any command to Photoshop are simply JavaScript strings. 3rd parties libraries/source codes used are all free/legal/redistributable for commercial use Photoshop Touch SDK UIView+I7ShakeAnimation SFHFKeychainUtils (Deprecated) SVProgressHUD FlurryAnalytics TestFlight <![CDATA[iConsole - Objective-C | UIKit | iPad | iPhone]]> 2012-09-23T13:28:36+00:00 2012-09-23T13:28:36+00:00 http://www.binpress.com/app/iconsole/1143 Nick Lockwood noreply@binpress.com http://www.binpress.comdev/profile/5681 In-app console for viewing logs and typing debug commands in iPhone appsPurpose iConsole is a simple, pluggable class to enable more useful in-app logging for your iPhone apps. It enables you to check error and crash logs within a built application without needing to connect to the Xcode debugger. It also allows non-technical beta testers of your applications to submit log information to you easily. iConsole also serves another purpose: Using the command interface, it provides an easy way to add debugging commands and let you toggle application features on and off at runtime in a way that can be easily disabled in the final release of your app, and doesn't require you to build additional throwaway user interface components. Supported OS &amp; SDK Versions Supported build target - iOS 6.0 (Xcode 4.5, Apple LLVM compiler 4.1) Earliest supported deployment target - iOS 5.0 Earliest compatible deployment target - iOS 3.0 NOTE: 'Supported' means that the library has been tested with this version. 'Compatible' means that the library should work on this OS version (i.e. it doesn't rely on any unavailable SDK features) but is no longer being tested for compatibility and may require tweaking or bug fixes to run correctly. ARC Compatibility As of version 1.5, iConsole requires ARC. If you wish to use iConsole in a non-ARC project, just add the -fobjc-arc compiler flag to the iConsole.m class file. To do this, go to the Build Phases tab in your target settings, open the Compile Sources group, double-click iConsole.m in the list and type -fobjc-arc into the popover. If you wish to convert your whole project to ARC, comment out the #error line in iConsole.m, then run the Edit &gt; Refactor &gt; Convert to Objective-C ARC... tool in Xcode and make sure all files that you wish to use ARC for (including iConsole.m) are checked. Installation To install iConsole into your app, drag the iConsole and (optionally) GTM folder into your project. iConsole has no other dependencies. If you need to update the GTM classes, you can check out the latest version using: svn checkout http://google-toolbox-for-mac.googlecode.com/svn/trunk/ google-toolbox-for-mac-read-only To enable iConsole in your application, replace your main window with an instance of the iConsoleWindow. If you are using a standard project template, the easiest way to do this is to change the class of your window in the MainWindow.xib file, or the AppDelegate.m if your window is created programmatically. If you are already using a custom window subclass, change the base class to iConsoleWindow. Logging To log to the console from within your app, include the iConsole.h header in your class (or in your .pch file to make it available throughout your project), and then add logging code of the form: [iConsole log:@&quot;some message&quot;]; The message can have format parameters, and follows the same syntax as the NSLog() command, and will log to both the in app and Xcode console. The iConsole logging commands are also thread safe and so can be used anywhere in place of NSLog(). In addition to the log: method, there are also the following additional log functions that can be use in conjunction with the LOG_LEVEL constant to easily control the amount of logging in a given app build: [iConsole info:...]; // use for informational logs (e.g. object count) [iConsole warn:...]; // use for warnings (e.g. low memory) [iConsole error:...]; // use for errors (e.g. unexpected value) [iConsole crash:...]; // use for logging conditions that lead to a crash The console is shown/hidden using a screen swipe by default, but if that is not appropriate for your app, you can show and hide it programmatically using: [iConsole show]; [iConsole hide]; The console has a button for clearing the log, but if you ever need to clear it programmatically then you can do so using the clear command: [iConsole clear]; Command Interface As well as displaying logs, the console can also allow user command input. This is disabled by default. To enable it, you need to create a command delegate, which you do as follows: 1) Implement the iConsoleDelegate protocol on one of your classes. It doesn't matter which one, but it should be a persistent class that will exist for the duration of the app's lifetime, e.g. your app delegate or main view controller. 2) Add the handleConsoleCommand: method to your delegate class. This receives a single string representing the command that the user has typed. iConsole does not place any restriction on the command syntax, or provide any helper methods for processing commands at this time. 3) Use the following code to set your class as the delegate for the iConsole. Note that this code must be called BEFORE the console is first shown, or the input field will not appear: [iConsole sharedConsole].delegate = myDelegate; For an example of how to implement this, look at the HelloWorld app. Exception Handling By default, iConsole intercepts unhandled exceptions (crashes) and deciphers the stack trace using the GTM library. You may wish to disable this feature if your app already implements a crash handler, or if you do not want to include GTM as a dependency. To do that, set one or both of these macros to 0: ICONSOLE_ADD_EXCEPTION_HANDLER ICONSOLE_USE_GOOGLE_STACK_TRACE The GTM trace function provides a much more useful stack trace than the default iPhone SDK provides. It is recommended to enable this if you are using the ICONSOLE_ADD_EXCEPTION_HANDLER option. If the ICONSOLE_USE_GOOGLE_STACK_TRACE option is disabled, you can safely remove the GTM source files from the project. Note: if the ICONSOLE_ADD_EXCEPTION_HANDLER option is disabled, you should call [[NSUserDefaults standardDefaults] synchronize] in your own crash handler to ensure that logs are preserved in the event of a crash. Configuration To configure iConsole, there are a number of properties of the iConsole class that can alter the behaviour and appearance of iConsole. These should be mostly self-explanatory, but they are documented below: @property (nonatomic, assign) BOOL enabled; Set this to 0 to disable the console. It is a good idea to set this using a compiler macro in your project target settings so it can be switched off in your release build. @property (nonatomic, assign) iConsoleLogLevel logLevel; Depending on your use of logging in the project, the log may fill up quickly. Use the log level to selectively disable logs based on severity. You can use the iConsoleLogLevel constants for this. iConsoleLogLevelNone will disable all logging. iConsoleLogLevelInfo will enable all logging levels. @property (nonatomic, assign) BOOL saveLogToDisk; If this option is disabled, logs will not be saved between sessions. Note that the ICONSOLE_ADD_EXCEPTION_HANDLER feature is useless if this option is not enabled. @property (nonatomic, assign) NSUInteger maxLogItems; Appending additional lines to the log has a small performance cost. The larger the log gets, the greater this performance impact. For this reason, the maximum size of the log is limited to 1000 lines. You can increase or decrease this limit by settings this property. @property (nonatomic, weak) id&lt;iConsoleDelegate&gt; delegate; This property is used to set the delegate for implementing the console command interface. @property (nonatomic, assign) NSUInteger simulatorTouchesToShow; @property (nonatomic, assign) NSUInteger deviceTouchesToShow; The number of fingers needed for the consoleactivation swipe. More than three is difficult to pull off on an iPhone unless you have very small fingers. More than two is impossible to execute in the simulator. If your app makes use of two or three fingered swipes for other interactions you may wish to increase this however. If you do not wish to allow swipe activation of the console, set the touches count to 0 or some infeasibly large number. The default is 2 fingers on the simulator and 3 on the device. @property (nonatomic, assign) BOOL simulatorShakeToShow; @property (nonatomic, assign) BOOL deviceShakeToShow; If swiping is not an appropriate activation method in your app, you can optionally enable shake-to-show instead. This is certainly a less fiddly option in the simulator, but may already be used for another purpose in your app. By default, this feature is enabled on the simulator and disabled on the device. @property (nonatomic, copy) NSString *infoString; The text that appears at the top of the console. This contains the Charcoal Design copyright by default, but you are permitted to remove the iConsole name and change this to reflect your own company branding, as long as you do not add your own copyright, or otherwise imply that iConsole is your own work. @property (nonatomic, copy) NSString *inputPlaceholderString; Helper text that appears in the console input field. @property (nonatomic, copy) NSString *logSubmissionEmail; The default &quot;to&quot; address when sending console logs via email from within the app (blank by default). @property (nonatomic, strong) UIColor *backgroundColor; The background color for the console (black by default). @property (nonatomic, strong) UIColor *textColor; The color of the console text and action button icon (white by default). <![CDATA[Karaoke Starter Kit for iPhone - Objective-C]]> 2012-09-21T14:52:45+00:00 2012-09-21T14:52:45+00:00 http://www.binpress.com/app/karaoke-starter-kit-for-iphone/1138 Ben Smiley noreply@binpress.com http://www.binpress.comdev/profile/14290 A starter kit and PDF tutorial that demonstrates and explains how to load, parse and play multi-instrument MIDI files in iOS, and how display karaoke lyrics which change color in real-time as the song progresses. Making a karaoke app for the iPhone or iPad sounds like a simple project. However, If you look at the iPhone API, you won't find anything about karaoke. That's because the API doesn't support karaoke! To create this starter kit, everything had to be worked out from scratch because there isn't much information publicly available on the subject. This starter kit provides a fully functional karaoke player with full screen or subtitle modes. If you want to write a karaoke app this starter kit will save you a huge amount of development time. This component is an objective-C library that wraps around CoreAudio and includes a comprehensive PDF guide of how to work with it to create MIDI based iOS apps. What's included Loading and parsing a MIDI file using CoreMidi: Showing you how to load a MIDI file using CoreMidi and then access the MIDI events (Note, Tempo, Time Signature, etc...) individually. This puts you in full control and gives you access to all the information the file contains. I also clearly explain how the MIDI file fits together and what the important MIDI messages mean. Plenty of background information: The tutorial doesn't just explains how the example project works. It also gives lots of background information and useful tips for processing MIDI files. That includes: bitwise operations, hex and binary, general Midi, how the percussion track work and much more! The guide alone is over 5000 words long. Writing a fully functional MIDI player: Step by step, this guide and code explains how to interpret the sequence of messages you retrieved from the MIDI file. The MIDI player uses multi-threading to play the sequence of MIDI messages in real-time. The MIDI clock class ensures that the MIDI file plays smoothly at the correct tempo. The MIDI player provides easy to use callback functions which give you access to all MIDI events in real-time. If you need events which aren't included, it's easy to extend the framework to support all existing MIDI messages. Audio Manager provides multi-timbral playback: CoreAudio on the iPhone only comes with a mono-timbral sampler. This means that you can only play your MIDI notes using one instrument sound. The Audio Manager which is included in the tutorial makes it easy to play your MIDI file using up to 10 instruments using a custom SoundFont. Included is a step by step guide to setting up a complex audio graph. It also shows how to set up the instruments based on information provided in the MIDI file. Doing this provides a rich sound as demonstrated in the video. Karaoke: How to write a karaoke module. This module manually parses the MIDI file to extract all the lyric events. The lyrics are then displayed on the screen and are colored red as the song advances. With a little polish, this starter kit could easily form the karaoke engine of your app saving you a lot of development time. More than just a tutorial: The sample project, provided with the tutorial, provides a solid framework for your CoreMidi iOS project. You can use this project as a learning exercise to learn CoreAudio and CoreMidi or base your whole project on the code. This component and included tutorial took over 120 hours to research and write. If you're planning to write a karaoke app for the iPhone it's guaranteed to save you a substantial amount of time. <![CDATA[RSS Reader For iPhone - Objective-C]]> 2012-09-02T18:15:35+00:00 2012-09-02T18:15:35+00:00 http://www.binpress.com/app/rss-reader-for-iphone/1102 Idea 2 App Store LLC noreply@binpress.com http://www.binpress.comdev/profile/9579 Simple and speedy RSS reader with no server-side code. All the work is done on the app side. Sample app included!This RSS reader allows you to parse RSS news stories. All of the magic happens iOS side with no need for a backend database. There are functions to refresh and pause. A sample project is included for example purposes and for getting started quickly. This is a modification of the MWFeedParser project. It has been updated and revised for iOS 6 and ARC (Automatic Reference Counting). <![CDATA[Midi Animation Starter Kit for iOS - Objective-C]]> 2012-08-31T21:47:24+00:00 2012-08-31T21:47:24+00:00 http://www.binpress.com/app/midi-animation-starter-kit-for-ios-/1098 Ben Smiley noreply@binpress.com http://www.binpress.comdev/profile/14290 A starter kit and PDF tutorial that demonstrates and explains how to load, parse and play multi-instrument MIDI files in iOS, and how to create a real-time animation based on the MIDI notes. The iPhone and iPad come with a very powerful audio library in the form of CoreAudio. It's fully featured, extremely flexible and consistently written. With a good knowledge of CoreAudio, you can make your audio processing dreams come true. So you've read Apple's blurb and you're excited, time to crack open CoreAudio and find out that CoreAudio is written in C, it doesn't use object orientation and there's almost no documentation. It's also closed source and very unforgiving for the uninitiated. This component is an objective-C library that wraps around CoreAudio and includes a comprehensive PDF guide of how to work with it to create MIDI based iOS apps. What's included Loading and parsing a MIDI file using CoreMidi: I'll show you how to load a MIDI file using CoreMidi and then access the MIDI events (Note, Tempo, Time Signature, etc...) individually. This puts you in full control and gives you access to all the information the file contains. I also clearly explain how the MIDI file fits together and what the important MIDI messages mean. Lots of background information: In the tutorial I don't just explain how the example project works. I also give lots of background information and useful tips when processing MIDI files. I explain: bitwise operations, hex and binary, General Midi, how the percussion track work and much more! In fact the guide alone is over 5000 words long! Writing a fully functional MIDI player: Step by step, I'll explain how to interpret the sequence of messages you retrieved from the MIDI file. The MIDI player uses multi-threading to play the sequence of MIDI messages in real-time. The MIDI clock class ensures that the MIDI file plays smoothly at the correct tempo. The MIDI player provides easy to use callback functions which give you access to all MIDI events in real-time. If you need events which I've aren't included it's easy to extend the framework to support all existing MIDI messages. Audio Manager provides multi-timbral playback: CoreAudio on the iPhone only comes with a mono-timbral sampler. This means that you can only play your MIDI notes using one instrument sound. The Audio Manager which is included in the tutorial makes it easy to play your MIDI file using up to 10 instruments using a custom SoundFont. I show step by step how to setup a complex audio graph. I'll also show you how to set up the instruments based on information provided in the MIDI file. Doing this provides a rich sound as demonstrated in the video. Putting it all together: In the final part of the tutorial I'll show how you can put all this together to create a rich MIDI based animation. The animation visualizes the notes as circles traveling from left to right across the screen. The vertical position of the circle depends on the value of the note. Notes pulse based on the metronome beat. Sharps and flats are circles with a random fill. This is a simple example but it could easily provide the basis of a cool game or MIDI playing app. More than just a tutorial: The sample project, provided with the tutorial, provides a solid framework for your CoreMidi iOS project. The license allows you to use the framework in any number of your own projects. You can use this project as a learning exercise to learn CoreAudio and CoreMidi or base your whole project on the code. This tutorial took me well over 100 hours to research and write. The information contained in this project just isn't available on the internet. If you're planning to write an app based on CoreMidi it's guaranteed to save you a substantial amount of time. <![CDATA[CoconutKit - Objective-C | UIKit | iPad]]> 2012-06-19T20:21:49+00:00 2012-06-19T20:21:49+00:00 http://www.binpress.com/app/coconutkit/977 Samuel Defago noreply@binpress.com http://www.binpress.comdev/profile/12095 CoconutKit is a library of high-quality iOS classes for dealing with view controllers, multi-threading, animations, and moreWhat is CoconutKit? CoconutKit is a library of high-quality iOS components written at hortis le studio and in my spare time. It includes several tools for dealing with view controllers, multi-threading, animations, as well as some new controls and various utility classes. These components are meant to make the life of an iOS programmer easier by reducing the boilerplate code written every day, improving code quality and enforcing solid application architecture. Most of CoconutKit components are not sexy as is, but rather useful. Do not be freaked out! These components are meant to make you more productive, less focused on debugging, so that you can spend more time working on the design of your application (if you have a great designer at hand, of course). Give CoconutKit a try, your life as an iOS programmer will never be the same afterwards! CoconutKit is distributed under a permissive MIT license, which means you can freely use it in your own projects (commercial or not). What can I find in CoconutKit? CoconutKit provides your with several kinds of classes covering various aspects of iOS development: High-quality view controller containers. These containers are the result of two years of hard work, and exceed by far the capabilities of UIKit built-in containers. In particular, view controllers can be combined or stacked, using any kind of transition animation (even yours). Your applications will never look the same as before! View controller containment API (compatible with iOS 4), richer, easier to use and far more powerful than the iOS 5 UIKit containment API. Writing your own view controller containers correctly has never been easier! Easy way to change the language used by an application at runtime, without having to alter system preferences Localization of labels and buttons directly in nib files, without having to create and bind outlets anymore Classes for creating animations made of several UIView block-based or Core Animation-based sub-animations in a declarative way. Such animations can be paused, reversed, played instantaneously, cancelled, repeated, and even more! Animations have never been so fun and easy to create! Core Data model management and validation made easy. The usual boilerplate Core Data code has been completely eliminated. Interactions with managed contexts have been made simple by introducing context-free methods acting on a context stack. Core Data validation boilerplate code is never required anymore, and text field bindings make form creation painless View controllers for web browsing and easier table view search management Multi-threaded task management, including task grouping, cancelation, progress status, task dependencies and remaining time estimation New controls text field moving automatically with the keyboard cursor slideshow with several transition animations (cross fade, Ken Burns, etc.) label with vertical alignment expanding / collapsing search bar Classes for common UI tasks (keyboard management, interface locking) Classes for single-line table view cell and view instantiations Methods for skinning some built-in controls prior to iOS 5 appearance API Lightweight logger, assertions, float comparisons, etc. Various extensions to Cocoa and UIKit classes (calendrical calculations, collections, notifications, etc.) ... and more! ... and even more to come! Where can I download CoconutKit? You can download CoconutKit from the official github page, both in binary and source forms. A companion repository exists for easy installation using CocoaPods, but you do not need to check it out directly. You can also directly checkout the git repository. Note that there are submodules you must update using the git submodules update --init command. Supporting development CoconutKit is and will stay free. However, if you enjoy using it, you can support the countless hours of work that are invested into its creation. Thank you in advance! Credits If you enjoy the library, hortis and I would sincerely love being credited somewhere in your application, for example on some about page. Thanks for your support! How can I discover CoconutKit components? Check out the CoconutKit source code repository by visiting the official project github page, open the workspace and either run the CoconutKit-demo or the CoconutKit-dev targets. The result of running those targets is the same, the only difference is that CoconutKit-demo compiles and builds the CoconutKit library source code before using the resulting binaries, whereas CoconutKit-dev includes and compiles all libary sources as part of the project itself. Why should I use CoconutKit? When designing components, I strongly emphasize on clean and documented interfaces, as well as on code quality. My goal is to create components that are easy to use, reliable, and which do what they claim they do, without nasty surprises. You should never have to look at a component implementation to know how it works, this should be obvious just by looking at its interface. I also strive to avoid components that leak or crash. If those are qualities you love to find in libraries, then you should start using CoconutKit now! How should I add CoconutKit to my project? You can add CoconutKit to your project in several different ways: Adding binaries manually You can grab the latest tagged binary package available from the project download page. Add the .staticframework directory to your project (the Create groups for any added folders option must be checked) and link your project against the following system frameworks: CoreData.framework MessageUI.framework QuartzCore.framework If your project targets iOS 4 as well as iOS 5 and above, you might encounter symbol not found issues at runtime. When this happens: If the symbol belongs to UIKit, then weakly link your target with UIKit.framework (click on your target, select Build Phases, and under Link Binary With Libraries set UIKit.framework as optional) If the symbol begins with _objc, then link your target with the ARC Lite libraries by adding the -fobjc-arc flag to your target Other Linker Flags settting Adding source files using CocoaPods Since CoconutKit 2.0, the easiest way to add CoconutKit to a project is using CocoaPods. The CoconutKit specification file should be available from the official CocoaPods specification repository. If this is the case, simply edit your project Podfile file to add an entry for CoconutKit: platform :ios pod 'CoconutKit', '~ ' If the specification file is not available from the official CocoaPods specification repository, use the specification file available in the Tools/CocoaPods directory. Either add it to your ~/.cocoapods local specification repository (creating the dedicated folder structure), or edit your project Podfile to tell CocoaPods to use the file directly: platform :ios pod 'CoconutKit', :podspec = '/absolute/path/to/CoconutKit/Tools/CocoaPods/CoconutKit.podspec' The specification file has successfully been tested with CocoaPods 0.15.2. Enabling logging CoconutKit uses a logger to provide valuable information about its internal status. This should help you easily discover any issue you might encounter when using CoconutKit. To enable internal CoconutKit logging: If you are using CoconutKit binaries: Link your project against the debug version of the CoconutKit .staticframework (edit your project debug configuration settings so that the debug binaries are used) Add an HLSLoggerLevel entry to your project .plist to set the desired logging level (DEBUG, INFO, WARN, ERROR or FATAL) If you are using CocoaPods: Edit the generated Pods.xcodeproj project settings, adding -DHLS_LOGGER to the Other C Flags setting for the debug configuration. This setting is sadly lost every time your run pod install to generate the CocoaPods workspace Add an HLSLoggerLevel entry to your project .plist to set the desired logging level (DEBUG, INFO, WARN, ERROR or FATAL) CoconutKit logger also supports XcodeColors. Simply install the XcodeColors plugin and enable colors when debugging your project within Xcode by adding an environment variable called XcodeColors to your project schemes. Projects in the CoconutKit workspace all have this environment variable set. If you see strange [fg sequences in your Xcode debugging console, either install XcodeColors or disable the XcodeColors environment variable by editing the corresponding project schemes. How should I use CoconutKit? After CoconutKit has been added to your project, simply import its global public header file in your project .pch file: If you are using CoconutKit binaries, use #import If you are using CocoaPods, use #import "CoconutKit.h" Some code snippets have been provided in the Snippets directory (and more will probably be added in the future), both for ARC and non-ARC projects. Add them to your favorite snippet manager to make working with CoconutKit classes even more easier! How can I learn using CoconutKit? To discover what CoconutKit can do, read the project wiki and, once you want to learn more, have a look at header documentation. I try to keep documentation close to the code, that is why header documentation is rather extensive. All you need to know should be written there since I avoid detailed external documentation which often gets outdated. After you have read the documentation of a class, have a look at the demos and unit tests to see how the component is used in a concrete case. Good documentation is critical. If you think some documentation is missing, unclear or incorrect, please file a ticket. Versions and migration guide I sadly have not enough time to develop new features and to refactor existing ones while keeping CoconutKit public APIs unchanged or backward compatible. Sometimes method prototypes or even class names must change, and I cannot afford marking methods or classes as deprecated while still maintaining them. Let's face the truth: CoconutKit is not yet widely enough used to justify the amount of work which would be required. When updating the version of CoconutKit you use, your project might therefore not compile anymore. In general, you should keep in mind that: major versions might contain major changes to the public APIs minor versions should only contain minor changes Migrating from 1.x to 2.x Version 2.0 is a major improvement over 1.x, which means several classes have undergone major changes. As usual, please read the header documentation to find what has changed: View controller containers: Placeholder view controllers can now display several insets simultaneously, intead of just one. The placeholderView outlet has therefore been replaced with a placeholderViews outlet collection, and you need to update your code and nib files accordingly. Methods to set an inset view controller now require a new index parameter specifying which inset must be set. Moreover, transition animations are not specified anymore using an enum value, but rather using a class Stack controllers transition animations are not specified anymore using an enum value, but rather using a class. An animated parameter has also been added to push and pop methods The CoconutKit container forwardingProperties setting has been removed. If you relied on it, you will need to update your code accordingly HLSViewController autorotation is now managed using the new methods introduced with iOS 6, on iOS 4 and 5 as well. All your HLSViewController subclasses must be updated accordingly by removing any existing -shouldAutorotateToInterfaceOrientation: implementation, replacing it with -shouldAutorotate and -supportedInterfaceOrientations implementations The way your create an HLSAnimation has changed. HLSAnimationStep has now been split into HLSViewAnimationStep (for UIView block-based animation steps) and HLSLayerAnimationStep (for Core Animation layer-based animation steps). The old HLSViewAnimationStep has been replaced with HLSViewAnimation for UIView block-based animations, and a corresponding HLSLayerAnimation has been introduced. The animations you previously defined by setting transforms on HLSViewAnimationStep are now created by calling translation, rotation or scale methods on HLSViewAnimation, respectively HLSLayerAnimation Core Data: Explicit managed contexts have been eliminated. You now must create an HLSModelManager object and use the corresponding class methods to push it onto a stack for the current thread. Then use the HLSModelManager context-free methods to interact with the store The CoconutKit workspace The workspace file contains everything to build CoconutKit binaries, demos and unit tests. Several projects are available: CoconutKit: The project used to build the CoconutKit static library CoconutKit-resources: The project creating the .bundle containing all resources needed by CoconutKit CoconutKit-dev: The main project used when working on CoconutKit. This project is an almost empty shell referencing files from both the CoconutKit and CoconutKit-demo projects CoconutKit-demo: The project used to test CoconutKit binaries against linker issues. When building the demo project, the CoconutKit .staticframework is first built and saved into the Binaries directory CoconutKit-test: The project running unit tests. This project references files from the CoconutKit project Several schemes are available: CoconutKit: Builds the CoconutKit static library CoconutKit-staticframework: Builds the CoconutKit .staticframework into the Binaries directory, both for the Release and Debug configurations CoconutKit-resources: Builds the CoconutKit resource bundle into the CoconutKit directory CoconutKit-(dev|demo): The standard CoconutKit component demo CoconutKit-(dev|demo)-RootStack: A demo where CoconutKit stack controller is the root view controller of an application CoconutKit-(dev|demo)-RootSplitView: A demo where a UIKit split view controller is the root view controller of an application CoconutKit-(dev|demo)-RootTabBar: A demo where a UIKit tab bar controller is the root view controller of an application CoconutKit-(dev|demo)-RootNavigation: A demo where a UIKit navigation controller is the root view controller of an application CoconutKit-(dev|demo)-RootStoryboard: A demo where a storyboard defines the whole application view controller hierarchy (itself managed using CoconutKit view controller containers). Runs on iOS 5 and above CoconutKit-test: CoconutKit unit tests Schemes ending with ios4 are similar, but with features not available on iOS 4 removed. Frequently asked questions With which versions of iOS is CoconutKit compatible? CoconutKit is compatible with iOS 4 and later (this will change as old OS versions get deprecated), both for iPhone and iPad projects. Please file a bug if you discover this is not the case. With which versions of Xcode and the iOS SDK is CoconutKit compatible? CoconutKit can be used with Xcode 4.4.1 (iOS SDK 5.1) and above, but is best used with the latest versions of Xcode and of the iOS SDK. Binaries themselves have been compiled using LLVM so that only projects built with LLVM will be able to successfully link against it (linking a project built with LLVM GCC against a library built with LLVM may result in crashes at runtime). Can I use CoconutKit with ARC projects? Yes. As long as you use binaries or CocoaPods, no additional configuration is required. Can I use CoconutKit for applications published on the AppStore? CoconutKit does not use any private API and is therefore AppStore friendly. Several applications hortis developed use CoconutKit and have successfully been approved. Why have you released CoconutKit? My company, hortis, has a long tradition of open source development. This is one of the major reasons why I started to work for its entity devoted to mobile development, hortis le studio. When I started iOS development a few years ago, I immediately felt huge gaps needed to be filled in some areas, so that I could get more productive and write better applications. CoconutKit was born. During the last years, I was able to develop some areas of expertise (most notably view controller management, animations and Core Data). I always try to push the envelope in those areas, and I humbly hope the iOS community will be able to benefit from my experience. Does CoconutKit use ARC? No, CoconutKit currently does not use ARC itself. This will maybe change in a not-so-near future as ARC is adopted. What does the HLS class prefix mean? HLS stands for hortis le studio. Contributing to CoconutKit You can contribute, and you are strongly encouraged to. Use github pull requests to submit your improvements and bug fixes. You can submit everything you want, documentation and comment fixes included! Everything that tends to increase code quality is always warmly welcome. Requirements There are some requirements when contributing, though: Code style guidelines are not formalized anywhere, but try to stay as close as possible to the style I use. This saves me some work when merging pull requests. IMHO, having a consistent way of organizing and writing source code makes it easier to read, write and maintain Read my article about the memory management techniques I use, and apply the same rules Do not use ARC Use of private APIs is strictly forbidden (except if the private method calls never make it into released binaries. You can still call private APIs to implement helpful debugging features, for example) Development and demo projects should be updated. Both are almost the same, except that the demo project uses the library in its binary form. New components should be written using the development project, so that an example with good code coverage is automatically available when your new component is ready. The demo project should then be updated accordingly Unit tests require version 0.5.2 of the GHUnit framework for iOS to be installed under /Developer/Frameworks/GHUnitIOS/0.5.2/GHUnitIOS.framework Writing code Use the CoconutKit-dev project to easily write and test your code. When you are done with the CoconutKit-dev project, update the CoconutKit and CoconutKit-demo projects to mirror the changes you made to the source tree. New resources must be added to the CoconutKit-resources project. Any new public header file must be added to the CoconutKit-(dev|test).pch file, as well as to the publicHeaders.txt file located in the CoconutKit-dev directory. Source files with linker issues (source files containing categories only, or meant to be used in Interface Builder) must also be added to the bootstrap.txt file. Please refer to the make-fmwk.sh documentation for more information. For non-interactive components, you should consider adding some test cases to the CoconutKit-test project as well. Update it to mirror the changes made to the source and resource files of the CoconutKit project. Code repository Branches are managed using git-flow: master is the stable branch on which commits are only made when a new official release is created develop is the main development branch and should be stable enough for use in between official releases all new features are developed on feature branches. You should avoid such branches since they might not be stable all the time If you plan to develop for CoconutKit, install git-flow and setup your local repository by running git flow init, using the default settings. Acknowledgements I really would like to thank my company for having allowed me to publish this work, as well as all my colleagues which have contributed and given me invaluable advice. This work is yours as well! Contributors The following lists all people who contributed to CoconutKit: Cédric Luthi (0xced) wrote the clever dynamic localization functionality, as well as the HLSWebViewController class Joris Heuberger wrote the HLSLabel class Release notes Version 2.0.1 HLSCursor now fills the associated view frame and resizes properly, the spacing parameter has therefore been removed. The cursor behaviour has been improved. The animation duration can now be changed Fix a bug with responders Version 2.0 CoconutKit containers have been rewritten from scratch and are now more powerful than ever: Support for iOS 4, 5 and 6 Correct implementation of all view controller methods introduced with iOS 4 and 5 Placeholder view controllers can now display several child view controllers (previously only one) Full compatibility with UIKit built-in containers New transition animations, which can now be completely customized Segue support on iOS 5 and above Insertion and removal of view controllers at arbitrary locations in a stack of view controllers Support for container view resizing Complete API to implement your own correct view controller containers easily (HLSContainerStack). The old API (HLSContainerContent) is not available anymore Animations have been rewritten from scratch and are now more powerful than ever: Core Animation layer-based animations are now supported Core Animation layer-based and UIView block-based animations can be mixed Animations can be paused and resumed Animations can be played starting from an arbitrary start time, or delayed Animations can be repeated or played in a loop Animations are paused and resumed automatically when the application enters and exits background Slow motion has been implemented for Core Animation layer-based animations (iOS simulator only) HLSViewController: iOS 6 autorotation methods provide a single consistent formalism to define autorotation behavior, even on iOS 4 and 5 An aurototation mode property has been added to CoconutKit and UIKit containers, with which containers can decide whether their children decide whether rotation can occur or not Core Data: HLSModelManager has been improved: Managed contexts are not visible anymore, all database operations are now made through context-free methods acting on a stack of model manager objects (on a per-thread basis) All kinds of persistent stores are now supported HLSLabel has been added. This label performs automatic font size adjustment and provides a vertical alignment property The CoconutKit Xcode workspace has been improved. The .staticframework can now built within Xcode, and demo projects build it first as well Full iOS 6 support (autorotation, view unloading deprecation) HLSReloadable has been removed as it was pretty useless Tools for the CocoaPods source code release have been added Optional web view preloading has been added when the application starts XcodeColors support has been added to HLSLogger A -popoverController method has been added to UIViewController so that parent popover controllers can easily be accessed And of course, many other minor fixes, additions and implementation improvements! Version 1.1.4 CocoaPods can and should now be used for easy setup Resources have been packaged into a bundle Added new fade-in animation Added zeroing weak references An HLSAnimation is now automatically canceled if it has a delegate which gets deallocated Animations can now be canceled (this inhibits remaining delegate events) or terminated (this does not inhibit them) HLSKenBurnsSlideshow is now a special case of the new HLSSlideshow class (several transition effects available). The HLSSlideshowDelegate protocol has been added Minor fixes and implementation improvements Version 1.1.3 Added scroll view synchronization. This makes parallax scrolling easy to implement Fixed bugs (tab bar controller in custom containers, simultaneous container add / removal operations, iOS 4 crashes) as well as link issues with HLSActionSheet Version 1.1.2 Container view controller bug fix for iOS 5: viewWillAppear: and viewDidAppear: are now forwarded correctly to child view controllers when the container is the root of an application or presented modally Version 1.1.1 CGAffineTransform replaced by CATransform3D for creating richer animations New transition styles for containers (Flipboard-like push, horizontal and vertical flips) Various bug fixes Version 1.1 Added easy Core Data validation Added UILabel and UIButton localization in nib files Added Ken Burns slideshow Added categories for UIToolbar, UINavigationBar and UIWebView skinning Various bug fixes Version 1.0.1 Added dynamic localization (thanks to Cédric Luthi) Added unit tests Added action sheet Added UIView category for conveying custom information and tagging a view using a string Added code snippets Renamed HLSXibView as HLSNibView, and the xibViewName method as nibName. Removed macros HLSTableViewCellGet and HLSXibViewGet (use class methods instead) Moved methods for calculating start and end dates to NSCalendar extension Flatter project layout Fixes for iOS 5 Various bug fixes Version 1.0 Initial release Contact Feel free to contact me if you have any questions or suggestions: mail: defagos ((at)) gmail ((dot)) com Twitter: @defagos Thanks for your feedback! Licence Copyright (c) 2011-2012 hortis le studio, Samuel Défago 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. <![CDATA[MarqueeView (Scrolling Marquee for iOS) - Objective-C | UIKit | iPhone]]> 2012-06-11T14:36:05+00:00 2012-06-11T14:36:05+00:00 http://www.binpress.com/app/marqueeview-scrolling-marquee-for-ios/965 Apperto noreply@binpress.com http://www.binpress.comdev/profile/9414 Easily create fully customizable, auto-scrolling, infinitely looping marquees with any custom content you want. Great for building scrolling galleries, news tickers and auto-scrolling taglines.SEMarqueeView for iOS is a super easy to use component that lets you create scrolling marquees. It is a great component with which you can create scrolling galleries, news tickers, auto-scrolling tag-lines etc. The behavior and usage is just like you use a UITableView with delegate methods. The items you add in a MarqueeView are cloned automatically to create an infinite scrolling effect. Features Easily create scrolling marquees with any custom content you want. Ability to fully customize the cell designs. Ability to change the number of cells. Ability to change auto-scroll speed. Ability to change scroll direction. Choose either from left to right or the opposite. Efficient memory usage, recycling views, completely crash-free. Ability to use multiple MarqueeViews in a single view and control them separately. Compatible with iOS4.0+ SDK. Can be used both for iPhone and iPad projects. Includes demo app Xcode project for quick start. Requirements No external libraries are required. Just drop the framework file in your existing project and you are good to go! Integration Guide 1) Drag & drop SEMarqueeView.framework to your project. 2) Add this line on top whatever view controller you want to use it on. #import <SEMarqueeView/SEMarqueeView.h> 3) Create a SEMarqueeView object and add it as a subview. SEMarqueeView *mView = [[SEMarqueeView alloc] initWithFrame:CGRectMake(0, 0, 320, 200) andSpeed:100 andDirection:SCROLL_LEFT]; mView.delegate = self; [self.view addSubview:mView]; 4) Implement delegate methods to configure content and you are done! - (int) numberOfCellsInMarqueeView:(SEMarqueeView *)marqueeView { return 5; } - (CGSize) marqueeView:(SEMarqueeView *)marqueeView sizeOfCellAtIndex:(int)index { return CGSizeMake(200, 200); } - (UIView *) marqueeView:(SEMarqueeView *)marqueeView cellAtIndex:(int)index { UIView *view = [[[UIView alloc] init] autorelease]; view.backgroundColor = [UIColor redColor]; return view; } - (void) marqueeView:(SEMarqueeView *)marqueeView didSelectItemAtIndex:(int)index { NSLog(@"tapped on cell %d", index); } Want to see it in action? Send me a mail at sarp.erdag [at] apperto.com and I will send you a demo over TestFlight. <![CDATA[KNMultiItemSelector - Objective-C | UIKit]]> 2012-06-07T09:19:16+00:00 2012-06-07T09:19:16+00:00 http://www.binpress.com/app/knmultiitemselector/959 Kent Nguyen noreply@binpress.com http://www.binpress.comdev/profile/10886 A versatile multiple item selector UI control for iOSKNMultiItemSelector for iOS KNMultiItemSelector is a versatile drop in multiple items selector for iOS projects. It works with both iPhone and iPad for several usage scenarios. See features and screenshots below Demo View a demo clip here iPhone and iPad screenshots Features Multiple items selector with simple NSArray Subclass of UIViewController Enable/Disable table index Enable/Disable search control Enable/Disable recent items Optional image with out-of-box caching Facebook friends selector demo project Usage examples and Documentation Visit Documentation to see how it is used and other configuration options <![CDATA[SESpringBoard - Objective-C | UIKit | iPhone]]> 2012-06-07T06:59:35+00:00 2012-06-07T06:59:35+00:00 http://www.binpress.com/app/sespringboard/956 Apperto noreply@binpress.com http://www.binpress.comdev/profile/9414 A super easy to use launcher for your iOS projectsSESpringBoard is an easy to use launcher view for you to use in your iPhone apps. Just add all the files under SESpringBoard into your project and you are good to go! Usage vc1 = [[ChildViewController alloc] initWithNibName:@"ChildViewController" bundle:nil]; vc2 = [[ChildViewController alloc] initWithNibName:@"ChildViewController" bundle:nil]; // create or reference more view controllers here // also be sure to extend your view controllers from SEViewController // create an array of SEMenuItem objects NSMutableArray *items = [NSMutableArray array]; [items addObject:[SEMenuItem initWithTitle:@"facebook" imageName:@"facebook.png" viewController:vc1 removable:YES]]; [items addObject:[SEMenuItem initWithTitle:@"twitter" imageName:@"twitter.png" viewController:vc2 removable:NO]]; [items addObject:[SEMenuItem initWithTitle:@"youtube" imageName:@"youtube.png" viewController:vc1 removable:YES]]; [items addObject:[SEMenuItem initWithTitle:@"linkedin" imageName:@"linkedin.png" viewController:vc2 removable:NO]]; // pass the array to a newly created SESpringBoard and add it to your view SESpringBoard *board = [SESpringBoard initWithTitle:@"Welcome" items:items launcherImage:[UIImage imageNamed:@"navbtn_home.png"]]; [self.view addSubview:board]; Screenshots ![alt text](http://dl.dropbox.com/u/1124427/sespringboard.png "SESpringBoard Paged") ![alt text](http://dl.dropbox.com/u/1124427/sepringboard_wiggle.png "SESpringBoard Wiggling") Coming Soon Ability to drag menu items and change their locations. Badges and stuff.