Now this looks like a wicked awesome new sprite game making tool: Andreas Löw, already revered in sprite game maker circles for sprite sheet maker TexturePacker which has just continued getting more awesome since we reviewed 2.4 ages ago and for PhysicsEditor the premiere collision shape creator, has decided that the next thing that needs to be made easy is … dynamic lighting, with SpriteIlluminator!
These are supported in pretty much whatever major sprite framework you’re using, including SpriteKit’sSKLightNode as of iOS 8. So if you’re doing any 2D sprite work that would benefit FROM ADDING EXTRA AWESOME, we strongly suggest that you head right on over to the beta signup page while that’s still open!
Like to make a game, but held up somewhat by the practical issue of having absolutely no artistic ability whatsoever? Yep, we feel your pain. Quite thoroughly indeed. But here’s a series of videos to watch that might help you fake it enough to get by –
Here’s an interesting set of links from an HN discussion, should you be interested in making a roguelike of your own some day as All True Programmers Are:
Another cheap and very effective technique for procedural level and maze generation is to create a “walker” or series of walkers that start at some point, walk in a direction and then turn at random intervals, leaving a path of corridors and occasionally rooms in their wake. This is how Vlambeer’s Nuclear Throne generates its levels, and there’s a good article from Jan Willem Nijman, it’s developer, here…
If you’d like a more academic look into procedural 2d game generation, there’s a nice research paper here, that describes a method and talks about Spelunky a lot (the king of procedural 2d level generation, in my book)…
The action roguelike genre, particularly the roguelike FPS, is a vital new area being explored by indie game developers. It reminds me of the way 2D platformers were mined, explored, and iterated upon starting around 7 or 8 years ago…
Cool stuff! At least to us old school types who still think ASCII Nethack is TEH BESTEST GAME EVAR!!!1!one!!!
So since we moved off Lightspeed Pascal as our Macintosh development environment way back in the day, we’ve been toting around this suite of logging, timing, and so forth debugging macros that by this time can be called transparently from .c/.cpp/.m/.mm files in development environments ranging from Lightspeed C through Metrowerks CodeWarrior up to Xcode 6+; but as we gear up to take on our intended New Year’s resolution of shipping a full hand of Swift apps next year … oh wait, there’s no macros in .swift code now! Well, there goes two and a half decades of accumulated cleverness out the window, bah humbug.
Not that it would be too terribly hard to rewrite said suite using NDEBUG and @autoclosurelike assert(), but why bother with that when no doubt there’s somebody else’s projects for native Swift logging out there doing that already we can join? And why yes, here’s two that the exemplarily diligent ManiacDev folk have turnedup on Github:
XCGLogger looks considerably more active than Swell, so we’ll go with that one. Unless any of you Dear Readers have an excellent reason why not. But long as we’re on the topic, let’s take a look at what Objective-C options checking CocoaPods brings up that we could raid for feature additions … my, there are a lot, aren’t there now?
CCLogSystem (5/54/18) “A Log system for iOS.Support print, record and review logs.”
CocoaLumberjack (270/4131/705) “A fast & simple, yet powerful & flexible logging framework for Mac and iOS”
DLLog (1/2/1) “NSLog-like logging API with support for level and context filtering”
GRLogger (1/2/1) “a logger utility for debugging and tracing”
TULogging (1/7/0) “Better logging that uses ASL log levels”
UALogger (11/235/21) “A powerful and flexible logging utility for Mac/iOS apps”
WZLog (1/2/0) “A log system for iOS” … and that’s about it not in Japanese.
XLFacility (8/97/2) “Elegant and extensive logging facility for OS X & iOS (includes database, Telnet and HTTP servers)”
CocoaLumberjack is pretty much the venerably accepted standard, as the numbers there attest, but some of these othes look interesting too. Particularly that very last one, XLFacility; from the ManiacDev writeup,
Some of the features of XLFacility include:
Viewing of logging messages in real-time via Telnet or TCP
An HTTP server for viewing real-time log messagess and browsing past logging messages
Different logging levels, and macros for easy logging at each level
Customizable logging formats
An in-app logging overlay that can appear when messages are sent to XLFacility
A nice syntax for creating your own custom loggers
With XLFacility you can log to the console, a file, a SQLite database, and you can also view messages in realt-time via Telnet or TCP and there is a built-in http server so you can browse past log messages or see live updates…
That’s some serious feature-laden logging there, that is.
In case you’re not on the AWS mailing list like apparently we got onto somehow, there’s a new version of the AWS mobile SDK out, and it looks like it might be worth some serious consideration for your cross platform back end needs:
The AWS Mobile SDK helps you build high quality mobile apps quickly and easily. It provides access to AWS Mobile services, mobile-optimized connectors to popular AWS data and storage services, and easy access to a broad array of other AWS services…
And what are these services? Quite a bit actually:
Amazon Cognito makes it easy to save user data, such as app preferences or game state, in the AWS Cloud without writing any backend code or managing any infrastructure. You can save data locally on users’ devices allowing your apps to work even when the devices are offline. With Amazon Cognito, you can focus on creating great app experiences instead of having to worry about building and managing a backend solution to handle identity management, network state, storage, and sync.
Amazon Mobile Analytics lets you easily collect, visualize, and understand app usage data at scale. Amazon Mobile Analytics is designed to provide aggregated data within 60 minutes of receiving events from an app so that you can act on the data more quickly. With Amazon Mobile Analytics, you get 100 million events per month for free.
Amazon Simple Notification Service (Amazon SNS) makes it simple and cost-effective to push notifications to Apple, Google, Fire OS, and Windows devices, as well as Android devices in China with Baidu Cloud Push. You can also use SNS to push notifications to internet connected smart devices, as well as other distributed services. You get 1 million notifications/month for free.
Amazon Simple Storage Service (S3) provides secure, durable, highly-scalable object storage. Amazon S3 is easy to use, with a simple web services interface to store and retrieve any amount of data from anywhere on the web, and the AWS Mobile SDK includes additional functionality to optimize access from a mobile device.
Amazon DynamoDB is a fast and flexible NoSQL database service for all applications that need consistent, single-digit millisecond latency at any scale. It is a fully managed database and supports both document and key-value data models. Its flexible data model and reliable performance make it a great fit for mobile applications.
Amazon Kinesis is a fully managed service for real-time processing of streaming data at massive scale. Amazon Kinesis can continuously capture and store terabytes of data per hour from hundreds of thousands of sources such as mobile app events and website clickstreams. You can also emit data from Amazon Kinesis to other big data services such as Amazon S3, Amazon Redshift, and Amazon Elastic Map Reduce (Amazon EMR).
Looking for some Christmas presents for the other Apple fanbois/fangrrrls in your life? Here’s a rundown of various pieces of kit that are HealthKit-enabled, that’s a good way to combine geek fun with subtle lifestyle commentary:
..the free Health Mate app from WiThings can track your steps and log stats like weight using the iPhone’s M7 and M8 motion coprocessors. Where WiThings really shines is the integrated hardware accessories (sold separately) that can track unique data without user intervention..
If users are wanting to track nutrition and calories, the free MyFitness Pal app is a great choice. MyFitness Pal incorporates a large food database that can automatically fill nutrition information just by scanning a package’s barcode…
One of the most popular fitness tracking band lines on the market, Jawbone’s UP series boasts a number of tools to keep users healthy. The UP app was recently updated to integrate with HealthKit to track activity and add a sleep tracker capable of sending your data to the Health app. The software also provides personal coaching tips to achieve your personal fitness goals…
Another popular line of activity trackers come from Fitbit. Unfortunately, Fitbit has refused to natively incorporate HealthKit into its app. Instead, a third-party developer has created an unofficial app called Sync Solver for Fitbit that will read the data from your online Fitbit account and send it to HealthKit…
With numerous accessories and one of the most mature platforms for fitness, the free Nike+ Running app can send your distance traveled, calories burned, run duration and more to HealthKit…
So there you go. We’ve been users of various pieces of the Withings kaboodle since the first scale shipped wow is it that long ago? and quite recommend them for keeping tabs on your various measurements. The other stuff mentioned above, well we’re sure it’s nice too, as always let us know any strong feelings you might have one way or the other!
And while we’re on the topic of HealthKit, the prolifically inquisitive Natasha The Robot has some intros here if you feel like programming your own healthy app:
Which is about all we’ve noticed in the way of tutorials — even the generally exhaustive Wenderlich iOS <N> By Tutorials didn’t have anything on HealthKit this time out. There’s a few testbeds and adapters on Github, but nothing jumping out as compelling. Hmmmm, wonder why that striking lack of interest from the development community in healthy apps. Hey, think how good the testing would be for you!
… At this point the Promo Codes link appears at the bottom of the app details page.
And apparently promo codes can be requested and work just fine even when the app isn’t technically released yet! Aside from this small caveat:
… when the promo code is for an update, iOS sometimes gets confused. It’s not consistent. But sometimes the App Store app shows an Update button right after the download is complete. It’s not clear to me if tapping the Update button will download the update you really want, or if it will “update” to the latest public release available on the App Store. Sometimes the whole process fails and my update is nowhere to be seen. So don’t be dismayed if need to burn more than one promo code to get the binary you want downloaded onto your device…
Still, it’s pretty awesome to be able to do a finalfinal final test that no showstoppers slipped through into the actual App Store binary and reduce your launch day stress by several orders of magnitude, tisn’t it now?
You’ll want to use NSFileCoordinator any time you want to read or write your shared files. You’ll also want to implement NSFilePresenter any time you need to know if a file has changed. These were introduced as companions to iCloud, where both your app and the iCloud daemon might want to access the same file. They’re not iCloud specific, though…
There’s still no full IPC mechanism on iOS. NSDistributedNotification hasn’t made the jump from OS X to iOS and probably never will. But file coordination and presentation can serve the same purpose, as long as the apps use the same app group.
When I was adding file coordination and presentation to my demo app, I realized that they could also be used for notifications between an app and its extensions. If one of them does a coordinated write while the other is using a file presenter for the file, the call to presentedItemDidChange happens almost instantly. Notification is the whole purpose of that method, so it makes sense it would work this way. I want to be notified if a specific file changes, and that’s how I get the notification.
But you don’t need to care about the file contents to be interested in notifications. If you just want a notification, choose a file name and use it as the notification mechanism. Any time one process needs to notify the other, make a change to the file. The other will get a file presenter call, and the notification is complete. It feels sort of like a hack but really this is exactly how the API is designed to work.
Cool beans! That opens up the extension useful problem space a good deal, doesn’t it now?
View controllers become gargantuan because they’re doing too many things. Keyboard management, user input, data transformation, view allocation — which of these is really the purview of the view controller? Which should be delegated to other objects? …
The Data Source Pattern is a way of isolating the logic around which objects live behind what index paths. Particularly in complicated table views, it can be useful to remove all of the logic of “Which cells are visible under these conditions?” from your view controller…
View controllers can be composed using the View Controller Containment APIs introduced in iOS 5. If your view controller is composed of several logical units that could each be their own view controller, consider using Composition to break them apart…
If you’re allocating all of your view controller’s subviews inside of the view controller’s class, you may consider using a Smarter View. UIViewController defaults to using UIView for it’s view property, but you can override it with your own view…
The Presenter Pattern wraps a model object, transforms its properties for display, and exposes messages for those transformed properties…
In method form, this might be called -configureView. The Binding Pattern updates a view with model data as it changes…
Interactions often include an initial user input (like a button press), optional additional user input (“Are you sure you want to X?”), and then some activity, like a network request or state change. The entire lifecycle of that operation can be wrapped up inside the Interaction Object…
Updating the view after the keyboard state changes is another concern that is classically stuck in the view controller, but this responsibility can easily be shifted in a Keyboard Manager. ..
Navigating from screen to screen is normally done with a call to -pushViewController:animated:. As these transitions get more complicated, you can delegate this task to a Navigator object..