Bad UX Roundup #17: Rain, Information Architecture, and Ergonomics

1_renPtFYaWW4qwiEZj-12Cg.png

Read the entire article

Another week, another assortment of atrocious design worthy of MOMA. In the interest of variety, I have added a few newcomers to this issue. One is a piece of architectural design and the other is a brand I have never featured before. Of course, I have also included the requisite examples from big brands like Facebook and Apple, because those companies are bad design factories. All in all, it’s a good haul this week.

If you’re wondering what gravity has to do with all of this, you’re just going to have to keep reading.

Important lessons

  • Know your user and the circumstances in which they will be using your product.
  • Sometimes simpler really is better.

Read the entire article

Junior Programmer Job Advice

StockSnap_KG40JUP28N.jpg

Read the entire post here

A few years ago I conducted one of the most interesting interviews to this day. And, it came with a big twist in the end.

We were looking for a junior AngularJS developer. Writing basic directives, simple two-way data bindings, clean code - yes. Deep understanding of the digest loop, interceptors, XSRF protection, fancy design patterns - no, not necessarily.

Then out of the blue, THE MOST gorgeous candidate applied.

Strong background with not just Angular but plenty of backend frameworks as well, he had even coded mobile apps in his spare time. Had that slightly arrogant half-smile going on, as if to say "Don't know why you even bother, dude, I'm your man."

Here comes the twist, though.

For 20 minutes of intro talk, we barely spoke about Angular. Such was his urgency to showcase all the various assets of his skill set that what I really wanted to hear was a sentence and a half about some dull directive he wrote one time.

Then came the technical part. In the next 30 minutes, I could actually see his confidence evaporating from the room, although I was trying to be as friendly as possible. Turned out his Angular knowledge was shallow, the tip of the iceberg, "I saw that in a tutorial once" type.

Although he was presenting himself as a senior developer, he was a mere junior level for this position.

Expectedly, he didn't get the job. We hired a quite younger girl with less overall experience but much more focused on what we needed.

See, not that he wasn't smart - he was. I'm sure he would have caught up eventually.

His problem was different - he didn't have a niche. He hadn't picked a thing. He was ok for everything but good for nothing.

 

This is your #1 Junior Developer Mistake - not picking your niche early.

Read the entire post here

33 awesome GitHub lists for iOS development

awmleer-401721-unsplash.jpg

Read full article here

Looking for interview questions & answers? Need to find iOS chart or animation library? Or maybe you are just curious to check new open-source apps, free courses, coming conferences or people to follow on Twitter. Whatever you’re looking or need, you will find that on GitHub :)

There are really a lot of iOS gems done by the community! We made our research and collected the most useful repositories for you. For sure, you will find there a bunch of practical resources and a lot of inspiring ideas. 
Check it out!

Read full article here

Clean Swift Architecture - an alternative to MVC

 

Read the entire article here

A couple of years ago, all of the iOS apps were small containing less than 10 screens. The codebase was small, storyboards were working excellent, and it was easy to maintain your project. From an architectural point of view, MVC was doing a great job.

How about today?

Today, we are facing big technological advancements and an insane app market growth. In other words, apps are becoming big and complex. We are working on projects that contain 20, 30 or even 40 screens making it impossible to be maintained with MVC.

As technology moves forward, so should we (developers).

Recently, I really got tired from MVC and started looking for a new architecture. After a short research, I have noticed the Clean Swiftarchitecture and instantly fell in love with it! This architecture was exactly what I was looking for. 🚀

About the Clean Swift Architecture

Clean Swift (a.k.a VIP) is Uncle Bob’s Clean Architecture applied to iOS and Mac projects. The Clean Swift Architecture is not a framework. It is a set of Xcode templates to generate the Clean Architecture components for you. That means you have the freedom to modify the templates to suit your needs.

In an MVC project, your code is organized around and grouped by models, views, and controllers. In Clean Swift, your project structure is built around scenes (or screens). Here is an example how does one scene looks like. In other words, we will have a set of components for each scene that will "work" for our controller. These are the components:

  • Models
  • Router
  • Worker
  • Interactor
  • Presenter
  • Configurator

Read the entire article here

The good and the bad of learning Swift

With more than 1 billion devices in use as of January, 2016, iOS is the world’s second most popular mobile platform. In some regions, including the USA, the UK, and France, Apple devices continue to outperform Android in smartphone sales numbers. That is why so many businesses focus their software products primarily and sometimes solely on the iOS platform as a key investment opportunity and strategic benefit.

If you are one of those smart business owners following the iOS app development path, probably the most important decision you will make is choosing the right tech stack for your product. If you decide to go for native development instead cross-platform solutions, you still have to decide which language to use: the good old Objective-C or brand-new Swift.

Read more here

How to optimize swift and iOS build times

Here is a FREE opens source repository that can help speed your builds

Includes:

  • Type checking of functions and expressions
  • Slowly compiling files
  • Build active architecture only
  • dSYM generation
  • Whole Module Optimization
  • Whole Module Optimization for CocoaPods
  • Third-party dependencies
  • Modularization
  • XIBs
  • Xcode Schemes
  • More

Here is a FREE opens source repository that can help speed your builds

Why Learn Swift?

Did you know that Swift Programming Language is today regarded as one of the fastest growing programming languages in the world? It was first introduced as an alternative to the Objective-C language at Apple’s Worldwide Developers Conference (WWDC) in June 2014. In less than four years, Swift is already there amongst the top 10 programming languages as also revealed by a recent RedMonk Programming Language Rankings. Even in the 2018 StackOverflow Developers Survey, it was found that Swift emerged as the sixth most loved programming language even ahead of JavaScript.

Read more here

16 Ugly Bugs Snap Didn’t Bother To Fix For Snap Kit And Lessons They Teach

snapchat-2480953_1920.jpg

Read the original on Medium

Snap has many business problems, including the poor rollout of Snap Kit SDK.

I’m an iOS Hobbyist developer using Swift 4 and iOS 12 and have been working with Snap Kit now for many months. With over 10 Medium posts, I have been chronicling my struggles and victories with the SDK. I have run into a number of problems.

Snapchat Snap Kit SDK Primer

Snap Kit is Snap’s attempt to go beyond its primary app offering. To grow and stay relevant, Snap login must be as prevalent as Facebook, Twitter, or Google’s authentication on Apps. GIFY has inserted itself into many other apps and Snap has the opportunity to do the same thing with AR content, Stories, Lenses, and Filters.

Snap Kit SDK is Snap’s attempt to become sticky.

The bugs described are purposefully written in “Bug Style” with the hope that each will actually get filed against Snap Kit SDK for Snapchat App

Some of the bugs documented below are nit-picky, however, Snap is in no position to allow even the slightest developer friction to occur. Snap’s future is partly riding on the success of Snap Kit, and the business has very little wiggle room to get things wrong. Winning over the developer community is paramount to Snap Kit SDK adoption.

Also, some of these could be considered feature requests, documentation requests or things that are “not bugs”. As someone with 20 years of software industry experience, I say these are “FAILURES” that need to be addressed (aka Bugs).

Business Lessons

For each of the bugs, I have added advice on improving the business approach to software release

Bugs

1 — Single Point Of Support

Steps To Reproduce

  1. Go to https://docs.snapchat.com/docs/

  2. Note the text

Feedback?
 We regularly update our documentation to give you everything you need for creative, easy integrations. If something’s not working for you, please report it to 
snapkit-support@snap.com.

Automated response text says:

Hi there!” Learn more about Snap Kit by visiting support.snapchat.com/news/snapkit. If you have further questions please reach out to us at support.snapchat.com/i-need-help. Thanks!

There are a few issues with the automated response:

  • Tells the customer who is seeking customer support to look at the news blog. The news blog is not designed as a customer support tool.

  • Tells the customer if they need further assistance to go to “I need help”. This part of the Snapchat website is not designed to deliver developer nor customer facing support for Snap Kit. A look at that URL will show that there is no way to report a specific Snap Kit SDK issue and the user will feel like anything they report there will end up in a black hole.

  • The automated response does not say that anyone will actually read the email the customer sent nor help. It only talks about where to go and what to read. It is far from customer friendly.

Suggested Mitigation

Reword the automated response:

Thank you for contacting Snap Kit Support. This automated response is to let you know we received your request and will be reaching out to you shortly

Business Lesson

When introducing a product that is outside current offerings, review all customer engagement vectors. Staff appropriately. Involve Quality Assurance and Technical Support from the start (involve all stakeholders)

Worst Software Learning Advice

I agree that a lot of advice I see is not that great.  He sums it up well and makes it funny.  I don't have a degree and I learned most everything through informal methods like online tutorials and videos.  

Pros and Cons of Swift

With more than 700 million iPhones currently in use, iOS is the second-most popular mobile platform world over. While Android may be at an advantage worldwide market-share wise, in regions, like the US, France and the UK, Apple devices continue to dominate the market. This is why, so many businesses focus solely on iOS platform for their software products, as they see it is as their key investment opportunity.

If you are one of those businesses looking to follow the iOS app development, then you have a critical decision to make. That is of choosing the right tech stack for your product. What are you gonna go for? If it is the native development instead of cross-platform, then which language will you use? The good ole Objective-C or Swift?

Let’s take a look at the pros and cons of using Swift iOS development language.

Read more here

Perks of learning Swift

Those who are already engaged with the iOS app development, there are no divergent ways to the fact that they already know the benefits. But on the contrary for the newbies still looking out to build their career might not exactly know. For quite a long time, Object C was the sole language used developing iOS apps. Objective C is the subset of C with added benefits of dynamic runtime and object-driven features. Well, the perspective of iOS app development was shaped in a different manner with the launch of Swift by Apple. The newer programming language was referred to as objective C being devoid of C.

Now, Swift was accepted with an open heart by the iPhone developers as it was safe, easy, modern and easy to learn and use. Also, Swift allows a great level of interactivity in the development process. The features in Swift simplifies the common patterns that are used in Objective C. Generics, closures, and type of interface used in Swift are comparatively easier to use. Swift is a combination of both C and objective C eradicating the hurdles that are tagged along with both of them. The attractive part is support of Cocoa Touch and Cocoa which clear outs the understanding of app development for Apple devices. If you are anywhere thinking to indulge in iPhone training and become an iPhone developer, learning Swift is mandatory.

Read more here

Build your first iOS App

Introducing Snapchat Snapkit DIY Docs

Part 3 in a continuing saga of working with Snapchat Snapkit for iOS/Swift

I have been chronicling my attempts to use Snapchat Snapkit. Now, I’m putting my GitHub where my Repository is ;)

Introducing Snapchat Snapkit DIY Documentation and Best Practices

Are you looking for plain English instructions for Snapkit? Do you find the current documentation inscrutable? Are you interested in building a community of developers for Snapkit?

Please come by Snapchat Snapkit DIY documentation and best practices

Snapchat Snapkit Developer Support Sadly Sad

Original post on Medium

Part 1 of a periodically updated diary of my attempts to work with Snapchat’s Snapkit

As an iOS Developer I thought it would be interesting to try to add Snapchat’s Snapkit features to an app I have under development.

Snapchat is playing catch-up in a race to keep its platform relevant and wants software developers to embrace its tools. Facebook and Twitter have long had development kits available for apps such that logging in to an app with Facebook and Twitter is commonplace. And posting to both is built in to probably thousands of apps.

snapssss1.png

After just scratching the surface of the offerings, I am not impressed with Snapchat’s documentation nor support.

Oh for the love of good documentation

These are the very first lines of the iOS API Reference

This documentation assumes you already made contact with us. The Snap Kit developer portal is the place for adding your application, exchanging keys, and getting set up with the proper API credentials.

It is not at all clear to me how or why one would “make contact” with Snapchat. I suspect this document is out of date and that it was written when Snapchat was working with partners. As far as I can tell, the API is now completely open to anyone interested. So I’m either wrong and need to contact Snapchat (How?) or this very first paragraph is utterly misleading and out of date.

Next up I thought I would integrate Snapchat login. My app already has authentication via Google, Twitter and Facebook (do you see that Snapchat… you need to blow me away just to enter the game)

Here’s some instruction from the Login Kit documentation

snapppssssss2.png

This line about SCSDKRedirectUrl is mind boggling

  • SCSDKRedirectUrl (string): The URL that will handle and complete login requests; must be a valid URL in the form foo://bar — without bar, redirects will fail

I’m sorry, what? What URL will complete and handle the login? And what does “foo://bar” without the bar mean? And if it means what I think it does — why would you write something like that? (I think it means .. ‘someurl://’)

I guess as a developer I’m supposed to know what the URL syntax should look like. But wait, Snapchat has a few GitHub repositories with examples.

But wait, only one of the examples is written in Swift (remember I’m developing for iOS).

Since I like to try to solve my own problems, I thought perhaps the sample app would shed some light on the mysteries of SCSDKRedirectURL. This URL is supposed to go into the info.plist. Let’s see what the example app from Snapchat has in the info.plist

<dict> 
      <key>CFBundleTypeRole</key>
      <string>Editor</string>
      <key>CFBundleURLSchemes</key>
      <array>
      <string><!-- Insert your redirect url scheme here -->   
      </string>
      </array>
</dict>

Fantastic, that clears things right up.

As I was already in GitHub and already looking at the sample app supplied by Snapchat, I thought I’d file this lack of clarity as a bug against the sample repo. It’s issue #3 Redirect URL — Clarity in documentation please

Someone named David cleared things up in response to the bug

So if you registered my-app://auth/snap then you would have this entry in your Info.plist:
<key>SCSDKRedirectUrl</key>
<string>my-app://auth/snap</string>

as well as:

<key>CFBundleURLTypes</key>
 <array>
 <dict>
 <key>CFBundleTypeRole</key>
 <string>Editor</string>
 <key>CFBundleURLSchemes</key>
 <array>
 <string>my-app</string>
 </array>
 </dict>
 </array>

Thanks David

As a side note, Snapchat support has no idea how to handle Snapkit requests. I can’t stop giggling when I read the response when I ask if they are the right folks to get help from.. “We’ll need to look further into this”

Yes, yes you will!

Aaaaaaaa.png

Ever suffer from a detached head in Xcode?

Xcode is a joy and a curse. And the git integration sometimes goes wonky. About every month I get a detached head. Here’s a great fix that I’ll add one more small teak to..

  • Step 1. Create a branch called “temp” by typing: git branch temp
  • Step 2. Switch over to your new branch by checking it out: git checkout temp
  • Step 3. Point the master pointer to the temp branch pointer (the-f means force): git branch -f master temp . //here ‘master’ would be any branch that has a head that you want to realign
  • Step 4. Check out master (or whatever the problem branch was)
  • Step 5. Now we delete our temp branch: git branch -d temp
  • Step 6. Push our new changes to the remote repository: git push origin master //or whatever the problematic branch was

More on image sizing - stickers

Found this link very helpful

Small: 100 x 100 pt @3x scale (300 x 300 pixel image)

Medium: 136 x 136 pt @3x scale (378 x 378 pixel image)

Large: 206 x 206 pt @3x scale (618 x 618 pixel image)

IB Designables – Failed to render and update auto layout status

Ever seen this error?

IB Designables – Failed to render and update auto layout status

Read more here for a solution

Huge collection of fantastic tips for Swift Development

All I can say is Wow! Check this out. Swift tips and tricks