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

So many icons, so little time

Need the crazy number of sizes and resolutions for your in-app icons or the app icon itself? This in browser tool is great

http://appicon.co/

UI helper - iOS Sizing / resolutions

Need help with all the iPhone and iPad sizes and the assets (graphics/images) you need?

This site is super handy http://iosres.com/

Optionals and ifs and lets and guards

What if.. if let and guard let and var let and well .. there is a lot of “let” in Swift. Two goodreads:

Invalid element name in Main.storyboard

I recently decided to revert a merge because a feature needed to be replaced. After carefully working through some conflicts, I brought up my branch post-revert and saw this interesting compile issue

Line 584: StartTag: invalid element name

The compiler told me this issue was in Main.storyboard.

Here is the fix

resource fork, Finder information, or similar detritus not allowed

What an ugly error message - eh?

Now this one is painful. It takes a lot of digging and false starts, but I believe the solution for most is super simple.

resource fork, Finder information, or similar detritus not allowed

To fix this, at your project root directory, run the command

xattr -cr "path to .app file

Error Domain=PlugInKit Code=13 "query cancelled

So subtle yet so vexing.

Error Domain=PlugInKit Code=13 “query cancelled

To fix this, I changed one tiny piece of code, but there are a number of related issues to check

Original

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage
        userChosenPhotoFromGalleryOrCamera.image = chosenImage
        self.dismiss(animated: true, completion: nil)

        userChosenPhotoFromGalleryOrCamera.isHidden = false
    }

Get rid of self.dismiss and replace with picker.dismiss

New

    func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) {
        let chosenImage = info[UIImagePickerControllerOriginalImage] as! UIImage
        userChosenPhotoFromGalleryOrCamera.image = chosenImage
        picker.dismiss(animated: true, completion: nil)

        userChosenPhotoFromGalleryOrCamera.isHidden = false
    }

Forcing iOS orientation for single or all ViewConroller

The app I am building really makes sense in portrait mode only. So I want to force that. And also, there is just too much to test with all the orientations. So why not?

Here are some resources that helped me:

How I Get Huge Social Media Growth with Crowdfire

Why did I upgrade my Crowdfire account from free to Plus?  What does Crowdfire offer that other platforms don't?  Why do I rely on Crowdfire as a key tool for managing social channels?

I'm here to explain...

Why is Social Media Critical to Your Business?

Social-Media-Graph.jpg

With 30% of millennials saying they engage with a brand on social at least once a month, your strategy can’t be only about existence.  Whatever your industry, segment and audience, a substantial portion of your customers and leads are on social. A recent Pew Research Center study found that 68% of American adults are Facebook users. Among 18 to 24-year-olds, 78% use Instagram and 45% are on Twitter.  Even among Americans 65 and older, 37% are social media users. 

Search engine crawlers know which pages are consistently earning traffic and which are just floating out there, forgotten and ignored. Although your killer content strategy is the most important factor in your search rankings, driving traffic to your optimized pages will cause them to climb much faster.

By investing only a few hours per week, over 91% of marketers claimed that their social marketing efforts greatly increased their exposure. There is no doubt that by simply having a social media page your brand will benefit, and with regular use it can generate a wide audience for your business.

Beyond a marketing tool, social media engagement helps to build connections with industry leaders and influencers., providing great stories for reporters, top notch products for promoters and interesting topics for experts to share with their followers. Over time, you’ll become more than a brand — you’ll be a part of a community.

If you’re a salesperson, one of the most powerful things you can do is look into your prospects’ eyes with a firm handshake. If you’re a marketer, one of the most powerful things you can do is engage with prospects and customers on social media. What do they have in common? These tactics allow you to relate to your prospects. People buy from people, and engaging with them allows the prospect to experience your culture and establish a relationship.

What Is Crowdfire?

I use it to curate content for all my social network channels to both retain my current audience as well as grow followers.  Crowdfire helps you discover and schedule content, and manage all your social accounts from one place.

My favorite part of Crowdfire is that it allows you to curate.  Many others are more "Set and forget".  And while it is tempting to use those - there is a big risk in polluting your social streams with topics that are not a fit or downright offensive.  Crowdfire gives you the tools to share what you decide to share and when you decide to share it.  And you can do so on the web or on mobile.

That's another big plus with Crowdfire.  The mobile app is sleek, easy to use, and has the right feature set for managing social channels on the go.  This includes the ability to share curated articles, post images from other sources and your own, re-post your posts, share articles from RSS feeds that you define and curate, and view analytics to help up your social game.

What Can Crowdfire Do For You?

it can automagically customize your posts for all your social profiles, taking away the headache of crafting separate posts for each individual social network.  You can schedule all your posts in advance and publish them automatically at the best times or at times chosen by you, saving you tons of time and effort.  Further it allows you to keep an eye out for updates from your website, blog or online shops and create quick, beautiful posts for every update to easily share on all your social profiles.

One thing I really love is the content automation that presents me with items I can choose to share.  With Crowdfire you can discover articles and images your audience will love, so you can share them to all your social profiles and keep your timelines buzzing.

And for Twitter, it can be extra valuable with help following the right people, unfollowing inactive accounts, engaging with your fans and followers and keeing an eye out on your competitors' followers.  You can follow your competitors' followers with ease and still curate for full control.

Which Social Networks Does Crowdfire Connect To?

socials.jpg

 

  • Facebook
  • Twitter
  • Instagram 
  • Pinterest
  • Linkedin
  • YouTube
  • WordPress
  • Shopify
  • Etsy
  • Twitch
  • Vimeo
  • 500px
  • Any blog with an RSS feed

I Also Love Crowdfire Because it is Reasonably Priced and Packed with Features

They offer a free plan that is fantastic for getting started and might be all you need.  The Plus plan, currently at $5.99/mo, that I currently use includes:

  • Two accounts (if you need more than one person managing your social)
  • All of Crowdfire's supported social networks
  • Scheduling and Publishing
    • 100 Scheduled posts per account
    • Chrome extension to share articles

    • Custom Posting Schedule

    • Video Posts Support

  • Content Curation
    • Unlimited Article Curation: Unlimited articles recommended for your topics
    • Image Curation: Unlimited images recommended for Instagram and Pinterest growth
    • Curate content from your own Blogs, Youtube videos and Shopify/Etsy shops
    • Up to 5 RSS Feed Connect
    • Hashtag Recommendations
    • Support for multiple image posts
    • Autotailored posts for each platform with preview before posting
  • 30 Day Social Analytics

And They Offer More Than Just a Tool

I find the Crowdfire Blog to be super helpful in navigating the social media waters.  Recent blog topics include:

  • What to Post on Facebook, Instagram, Twitter, LinkedIn and Pinterest
  • Instagram IGTV: 3 things you should know about Instagram’s New Video Platform

  • A Guide To Twitter Algorithm And How To Increase Your Reach

  • An Essential Guide to Instagram Stories + 5 Ways they will benefit your business

  • Top 3 reasons why Content Curation should be a part of your Social Media Marketing Strategy

This One Crowdfire Blog Post Saved Me Hundreds of Hours

It is titled "How to Repurpose Blogs Into Social Media Content".  This post covers 5 keys to leveraging your existing blog so that you don't have to always be creating new content.  A big time and money savings!  

It is written by the CEO and Founder of Rankwatch which is a platform, which helps companies and brands stay ahead with their SEO efforts in the ever growing internet landscape

Summary

You can try Crowdfire for free and see how it works for you.  It is one of my most indispensable tools for maintaining and growing my social marketing strategy.