<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Bright Inventions iOS RSS Feed]]></title><description><![CDATA[A leading digital product agency in Poland. From mobile apps and complex backend systems to emerging technology solutions, we create success stories for startups, consultancy agencies, and mid-size organisations across industries including FinTech, Blockchain, HealthTech, Retail, Logistics and more.]]></description><link>https://brightinventions.pl</link><generator>GatsbyJS</generator><lastBuildDate>Wed, 13 May 2026 14:16:48 GMT</lastBuildDate><item><title><![CDATA[Your First iOS CI Pipeline in Azure DevOps]]></title><description><![CDATA[In this article I will guide you through creation of your first CI pipeline using Azure DevOps Platform. Since I wrote my first test and run it on CI pipeline in one of my past projects I got hooked on the concept of Continuous Integration and Delivery (CI/CD). From that moment I tried to dip my fingers into sauce of automation whenever I could. Since then I have maintained and created many such CI/CD pipelines. Recently I got opportunity to prepare yet another one - this time in Azure DevOps…]]></description><link>https://brightinventions.pl/blog/first-ios-ci-in-azure-devops/</link><guid isPermaLink="false">https://brightinventions.pl/blog/first-ios-ci-in-azure-devops/</guid><pubDate>Thu, 13 Nov 2025 20:00:00 GMT</pubDate></item><item><title><![CDATA[AI Agents Comparison from iOS Developer Perspective]]></title><description><![CDATA[GitHub Copilot was one of the earliest LLM powered tools helping developers with their everyday chores. It was also quite early to support Xcode (first by third party and later by first party plugins). Due to that and few other factors (copilot being endorsed in one of my projects as well as having educational license for it) I ended up using it in my AI supercharged coding endeavour. In iOS development I was mostly using Copilot in autocomplete mode and never really dove deep into agentic…]]></description><link>https://brightinventions.pl/blog/ai-agents-comparison-from-ios-dev-perspective/</link><guid isPermaLink="false">https://brightinventions.pl/blog/ai-agents-comparison-from-ios-dev-perspective/</guid><pubDate>Thu, 16 Oct 2025 10:00:00 GMT</pubDate></item><item><title><![CDATA[Integrating Firebase into Tuist Project]]></title><description><![CDATA[Firebase is one of the most commonly used third-party library in iOS development. With functionalities ranging from Crashlytics, to analytics, feature flags... there is too much stuff to list all of it 😅 Today we will be focusing on integrating Firebase Crashlytics into our iOS app, with one caveat: it uses Tuist. Lo and behold, we might run into some strange behaviors!

TL;DR

For pure and suggested tuist integration code jump straight to Tuist "native" integration.

But wait, why Tuist?

If you…]]></description><link>https://brightinventions.pl/blog/integrating-firebase-into-tuist-project/</link><guid isPermaLink="false">https://brightinventions.pl/blog/integrating-firebase-into-tuist-project/</guid><pubDate>Thu, 18 Sep 2025 11:00:00 GMT</pubDate></item><item><title><![CDATA[Certificate Pinning on iOS in Practice]]></title><description><![CDATA[New feature for yesterday, too long backlog of bug tasks and this crazy new crash that started occurring randomly out of nowhere... No wonder that there is no time to focus on security aspects of our apps. But lets break this vicious cycle now and dive into fundamental practice for securing your app: Certificate pinning. Someone is looking

Main reason for Certificate pinning implementation is so called Man in the middle attack. Not only does it allow malicious user to reverse engineer our APIs…]]></description><link>https://brightinventions.pl/blog/certificate-pinning-in-ios-app/</link><guid isPermaLink="false">https://brightinventions.pl/blog/certificate-pinning-in-ios-app/</guid><pubDate>Thu, 14 Aug 2025 09:25:00 GMT</pubDate></item><item><title><![CDATA[One Codebase for iOS and Android with Kotlin Multiplatform]]></title><description><![CDATA[In this article, I'll guide you step-by-step through creating a shared library, with a focus on implementing it for iOS via an XCFramework. Setting Up a Kotlin Multiplatform Library

In Android Studio, I created a new project using the "Kotlin Multiplatform Library" template.
 During the setup, there's an option for iOS framework distribution, where you can choose between:

Regular Framework (built for one architecture) XCFramework (supports all architectures) CocoaPods (iOS dependency manager)…]]></description><link>https://brightinventions.pl/blog/one-codebase-for-ios-and-android-with-kotlin-multiplatform/</link><guid isPermaLink="false">https://brightinventions.pl/blog/one-codebase-for-ios-and-android-with-kotlin-multiplatform/</guid><pubDate>Tue, 01 Jul 2025 11:04:39 GMT</pubDate></item><item><title><![CDATA[Migrating from iOS App to Flutter – a Painless Getting Started Guide]]></title><description><![CDATA[Migrating iOS app from native to Flutter doesn't have to mean rewriting your entire app from scratch. If you have a working iOS app and you want to enjoy the benefits of Flutter you can introduce it gradually — a great way to migrate iOS app to Flutter without a full rewrite. In this post, I'll show you step-by-step how to add Flutter to an existing iOS project, and the different ways to run Flutter views - from the simplest to more optimized ones.

Adding flutter to an existing iOS application

T…]]></description><link>https://brightinventions.pl/blog/migrating-from-ios-app-to-flutter-–-a-painless-getting-started-guide/</link><guid isPermaLink="false">https://brightinventions.pl/blog/migrating-from-ios-app-to-flutter-–-a-painless-getting-started-guide/</guid><pubDate>Fri, 23 May 2025 05:58:15 GMT</pubDate></item><item><title><![CDATA[Top Podcasts for 2025 from iOS Developer's Perspective]]></title><description><![CDATA[Are you an iOS developer, or maybe a technology maniac with a bias for apple? Do you listen to podcasts (if not, then start 😉)? Here are my top picks for iOS and general tech related podcasts to listen to in 2025. Best iOS development podcasts in 2025

Let me start with iOS focused ones. Those are high quality podcasts that vary in focus and topics from quite technical to totally informal.

ATP - Accidental Tech Podcast

My favorite podcast in this list. Marco Arment, Casey Liss and John…]]></description><link>https://brightinventions.pl/blog/top-ios-podcasts-from-ios-developer-perspective/</link><guid isPermaLink="false">https://brightinventions.pl/blog/top-ios-podcasts-from-ios-developer-perspective/</guid><pubDate>Thu, 05 May 2022 11:39:04 GMT</pubDate></item><item><title><![CDATA[Build and Run iOS App Tests with GitHub Actions – 2025 Tutorial with Example]]></title><description><![CDATA[In the first part of a tutorial we configured fastlane and succeeded in running tests locally, right from our console, now it's time to make them fly, fly on GitHub! Creating a workflow file

To make your project running on GitHub you need to create a yaml file that will be executed there. To do that, in your main project folder enter command

mkdir .github  && cd .github

This command creates GitHub directory and enters into it.

mkdir workflows && cd workflows

This one creates workflows directory…]]></description><link>https://brightinventions.pl/blog/build-and-run-ios-app-tests-with-github-actions-–-2024-tutorial-with-example/</link><guid isPermaLink="false">https://brightinventions.pl/blog/build-and-run-ios-app-tests-with-github-actions-–-2024-tutorial-with-example/</guid><pubDate>Thu, 18 Jul 2024 11:14:12 GMT</pubDate></item><item><title><![CDATA[Upload iOS App to TestFlight with GitHub Actions and Fastlane Match – 2025 Tutorial with Example]]></title><description><![CDATA[In previous parts of a tutorial we were building app and running tests locally with fastlane and building app and running tests with usage of GitHub Actions. Now our goal is to upload an app to TestFlight with usage of GitHub Actions and Fastlane Match! Before we move on, you need to have an

Empty, private repository on GitHub where you will store your certificates and provisioning profiles generated by Fastlane Match.   Fastlane configured on your device, I described how to do it here. Apple…]]></description><link>https://brightinventions.pl/blog/upload-ios-app-to-testflight-with-github-actions-and-fastlane-match-–-2024-tutorial-with-example/</link><guid isPermaLink="false">https://brightinventions.pl/blog/upload-ios-app-to-testflight-with-github-actions-and-fastlane-match-–-2024-tutorial-with-example/</guid><pubDate>Tue, 13 Aug 2024 10:53:56 GMT</pubDate></item><item><title><![CDATA[Build and Run iOS App Tests Locally with Fastlane - 2025 Tutorial with Example]]></title><description><![CDATA[Quick and reliable iOS application delivery is crucial and properly configured CI/CD pipelines can significantly aid in this process. Learn how to start your journey by building your app and running tests locally with Fastlane in 2025. Enjoy the part 1 of the step-by-step iOS CI/CD tutorial. More to come soon! Before we start, you need to have an iOS project with at least one unit test.

What is CI/CD and what can you gain from it?

Continuous Integration (CI) is the practice of frequently…]]></description><link>https://brightinventions.pl/blog/building-and-running-ios-app-tests-locally-with-fastlane-2024-tutorial-with-example/</link><guid isPermaLink="false">https://brightinventions.pl/blog/building-and-running-ios-app-tests-locally-with-fastlane-2024-tutorial-with-example/</guid><pubDate>Thu, 11 Jul 2024 12:06:31 GMT</pubDate></item><item><title><![CDATA[Adding PrivacyInfo to Your iOS App]]></title><description><![CDATA[Read a tutorial on how to add a Privacy Manifest to your codebase, which has been required by Apple since the beginning of May 2024. Starting from May 1, Apple demands the addition of a Privacy Manifest to your codebase. This file provides an explanation why your app is using 'SDKs that require a privacy manifest and signature'.

Find more info here.

Do I have to take action?

If you received an email from AppStoreConnect containing the phrase:

ITMS-91053: Missing API declaration

Then you are…]]></description><link>https://brightinventions.pl/blog/adding-privacyinfo-to-your-ios-app/</link><guid isPermaLink="false">https://brightinventions.pl/blog/adding-privacyinfo-to-your-ios-app/</guid><pubDate>Wed, 08 May 2024 13:26:07 GMT</pubDate></item><item><title><![CDATA[Diving into Alternative Marketplaces Coming with iOS 17.4]]></title><description><![CDATA[Apple is forced by the EU to introduce the ability to install apps by alternative marketplaces other than AppStore. What does it mean for iOS developers and app owners? In this article, I will cover the main tech and business requirements to set up your marketplace. Source: https://developer.apple.com/documentation/appdistribution/creating-an-alternative-app-marketplace

The directive, called the Digital Markets Act (DMA), which will be effective in March 2024, implies on Apple some major…]]></description><link>https://brightinventions.pl/blog/diving-into-alternative-marketplaces-coming-with-ios-17-4/</link><guid isPermaLink="false">https://brightinventions.pl/blog/diving-into-alternative-marketplaces-coming-with-ios-17-4/</guid><pubDate>Mon, 29 Jan 2024 12:34:40 GMT</pubDate></item><item><title><![CDATA[Focusing Tests in Quick. A Tip for iOS Developers]]></title><description><![CDATA[When writing unit tests in Quick, you can easily change it to fit to have a focused test – then only this one will execute. It is great for debugging. Check it out! In Quick you can focus on specific test with use of fit. Just change it to fit and only this test will run. It’s especially useful when we want to ensure that another test does not activate our breakpoint.

Similarly to fit you can focus groups of tests with use of fcontext and fdescribe. Then only tests within such group will run.

F…]]></description><link>https://brightinventions.pl/blog/focusing-tests-in-quick-a-tip-for-ios-developers/</link><guid isPermaLink="false">https://brightinventions.pl/blog/focusing-tests-in-quick-a-tip-for-ios-developers/</guid><pubDate>Wed, 26 Jul 2023 06:53:35 GMT</pubDate></item><item><title><![CDATA[Becoming an iOS Developer Again. Meet Michał – a Programmer with over 10 Years of Experience]]></title><description><![CDATA[Michał worked with Swift since the 1.0 version. For a period of time, he was even a team manager. Some would say that's a usual career path. Yet for him, it was just a turn in a different direction. Eventually, he missed programming too much and came back to his developer roots. 😉 Dive into Michał’s story! What did your road to iOS development look like? I heard you started from PHP.

Yes, the first language I used at work was PHP. Yet before that, I actually didn’t want to be a software…]]></description><link>https://brightinventions.pl/blog/michal-ios-developer-10-years-of-experience/</link><guid isPermaLink="false">https://brightinventions.pl/blog/michal-ios-developer-10-years-of-experience/</guid><pubDate>Tue, 30 Aug 2022 09:18:47 GMT</pubDate></item><item><title><![CDATA[Swift Package Manager, build configurations and non compiling iOS projects]]></title><description><![CDATA[Swift Package Manager in Xcode is the newest way of managing third party dependencies of Swift projects. It is very neatly integrated and allows for clean and easy dependency management. At least sometimes. TL;DR

In this article I am going through struggle of adding SPM to legacy project containing frameworks not compatible with Apple Silicon iOS simulators (arm64). If you are in rush for a solution head straight to SPM build configurations paragraph.

When working on greenfield projects SPM in…]]></description><link>https://brightinventions.pl/blog/swift-package-manager-build-configurations-and-non-compiling-ios-projects/</link><guid isPermaLink="false">https://brightinventions.pl/blog/swift-package-manager-build-configurations-and-non-compiling-ios-projects/</guid><pubDate>Fri, 29 Jul 2022 10:34:45 GMT</pubDate></item><item><title><![CDATA[Everything You Need to Know about Bluetooth Development Company Based in Poland]]></title><description><![CDATA[What can you expect from Polish Bluetooth developers? Why should you consider hiring a Bluetooth Development Company from Poland? Get all the answers. Polish programmers are top of the top

It is a fact that Polish devs have proficient programming skills. HackerRank proved that a couple of years ago conducting a global tech challenge. Polish programmers came third.

Polish Bluetooth developers are fluent in English

Polish devs know English and are eager to communicate with international clients…]]></description><link>https://brightinventions.pl/blog/everything-you-need-to-know-about-bluetooth-development-company-poland/</link><guid isPermaLink="false">https://brightinventions.pl/blog/everything-you-need-to-know-about-bluetooth-development-company-poland/</guid><pubDate>Fri, 06 May 2022 07:17:42 GMT</pubDate></item><item><title><![CDATA[What to Expect From Swift Development Company from Poland]]></title><description><![CDATA[Everything you should know about working with Swift development agency from Poland. What does the Swift development company do?

Swift development team specializes in building and maintaining mobile applications for iOS. Swift developers take care of every aspect of the iOS app development process: from the ideation phase, building MVP, launch to maintenance.

Swift is the official Apple language used for iOS app development. Bright Inventions, as one of the top iOS development companies from…]]></description><link>https://brightinventions.pl/blog/what-to-expect-from-swift-development-company-from-poland/</link><guid isPermaLink="false">https://brightinventions.pl/blog/what-to-expect-from-swift-development-company-from-poland/</guid><pubDate>Tue, 22 Mar 2022 11:49:41 GMT</pubDate></item><item><title><![CDATA[Join Our Software Workshops for Polish Dev Community]]></title><description><![CDATA[2022 is the year we turn 10 as Bright Inventions. 🎉 We decided to celebrate it by sharing insights with the community. At the same time our goal is to keep improving our knowledge sharing skills. We organize workshops for the software development community from Poland. Join Agile or iOS workshops or sign up for a webinar for future tech leaders. All workshops are conducted in Polish. Everyday Agile Workshops

Everybody seems to be doing Agile these days. But how to be agile on a daily basis…]]></description><link>https://brightinventions.pl/blog/join-our-software-workshops-for-polish-dev-community/</link><guid isPermaLink="false">https://brightinventions.pl/blog/join-our-software-workshops-for-polish-dev-community/</guid><pubDate>Mon, 28 Feb 2022 13:28:25 GMT</pubDate></item><item><title><![CDATA[What most startup owners fail to get about mobile development ]]></title><description><![CDATA[“What’s it like being a startup owner?” Anyone who’s ever run a tech company would answer in a heartbeat that it’s equally exciting and challenging. Truth be told, most successful startup founders who’ve pioneered the tech world and are now on everyone’s lips have learned what they know the hard way. This comes with a silver lining for all of us though – by learning from their shortcomings, you won’t repeat their mistakes!

With the above in mind, we’ve put together a list of things startup…]]></description><link>https://brightinventions.pl/blog/what-most-startup-owners-fail-to-get-about-mobile-development/</link><guid isPermaLink="false">https://brightinventions.pl/blog/what-most-startup-owners-fail-to-get-about-mobile-development/</guid><pubDate>Tue, 17 Sep 2019 08:05:05 GMT</pubDate></item><item><title><![CDATA[Are we ready for deep learning on mobile devices?]]></title><description><![CDATA[Due to the rapid growth of deep learning possibilities, lots of smart people do their best to create more and more sophisticated algorithms that beat human’s performance in many areas. Luckily, a great chunk of their work is throw open and waits for you to harness it in some fancy way. One way to take advantage of it is to make an inference of a pre-trained model in an environment that has plentiful data sources like mobile phones and their sensors. You can wonder why even bother with the…]]></description><link>https://brightinventions.pl/blog/are-we-ready-for-deep-learning-on-mobile-devices/</link><guid isPermaLink="false">https://brightinventions.pl/blog/are-we-ready-for-deep-learning-on-mobile-devices/</guid><pubDate>Sun, 24 Mar 2019 23:00:00 GMT</pubDate></item><item><title><![CDATA[N ways to debug React Native app]]></title><description><![CDATA[React Native is an abstraction over the native code, which allows us to have one code base for multiple platforms. Sounds great, right? Not everybody though is so enthusiastic about this approach. One of the reasons might be troublesome running and debugging the JavaScript code. In this blog post you may find a short tutorial on how to debug your app on Android and iOS, on a physical device or a simulator/emulator, the JavaScript code and the native one. Run the iOS app

It is quite convenient…]]></description><link>https://brightinventions.pl/blog/n-ways-to-debug-rn/</link><guid isPermaLink="false">https://brightinventions.pl/blog/n-ways-to-debug-rn/</guid><pubDate>Wed, 09 Jan 2019 23:00:00 GMT</pubDate></item><item><title><![CDATA[Don't be a mockup developer]]></title><description><![CDATA[Many times as a mobile developer I have to work on apps without the API ready that was crucial for the feature I was implementing. Either the backend was developed by another team that was not entirely in sync with us or our backend team had no chance to implement those endpoints earlier. For this reason, I was not able to satisfy the Definition of Done but it does not mean that I have implemented the UI only. Ninety-ninety rule

One might think that without the API our work on certain features…]]></description><link>https://brightinventions.pl/blog/dont-be-mockup-developer/</link><guid isPermaLink="false">https://brightinventions.pl/blog/dont-be-mockup-developer/</guid><pubDate>Thu, 06 Sep 2018 22:00:00 GMT</pubDate></item><item><title><![CDATA[Different iOS build configurations than Debug and Release in React Native]]></title><description><![CDATA[Default iOS build configurations, Debug and Release, might be enough for the beginning, but sooner or later you will probably need to extend the number of build configurations in your app. While this is pretty straightforward in native development, unfortunately, it is not in React Native. Build configurations

To manage build configuration go to Xcode the project settings ([PROJECT]→Info):

You can easily add a new build configuration by duplicating an existing one. Duplicate Debug configuration…]]></description><link>https://brightinventions.pl/blog/react-native-custom-ios-build-configurations/</link><guid isPermaLink="false">https://brightinventions.pl/blog/react-native-custom-ios-build-configurations/</guid><pubDate>Tue, 27 Feb 2018 23:00:00 GMT</pubDate></item><item><title><![CDATA[How to use different Google configurations for each build config]]></title><description><![CDATA[If you have ever used Google Sign-In, Firebase, or Google Analytics for iOS, you should be familiar with a GoogleService-Info.plist configuration file. Using property list files instead of setting every required property manually in code is convenient, especially while using more than one Google service at once and the configuration grows. But have you ever wondered how this can be adjusted to multiple environments? Environments

To set up multiple environments in iOS application I use build…]]></description><link>https://brightinventions.pl/blog/ios-google-configuration-per-environment/</link><guid isPermaLink="false">https://brightinventions.pl/blog/ios-google-configuration-per-environment/</guid><pubDate>Wed, 07 Feb 2018 23:00:00 GMT</pubDate></item><item><title><![CDATA[Side effects of transferring iOS application]]></title><description><![CDATA[When the time you are selling your long-developed application comes, or you are about to take over an app, you probably do not bother about the transition process. Although Apple has described the steps in details, you should consider potential consequences before starting the transition. You should also make sure that the application meets all criteria and is eligible for the transfer. What is most important, the app must have had at least one version that has been released to the App Store and…]]></description><link>https://brightinventions.pl/blog/app-transfer-side-effects/</link><guid isPermaLink="false">https://brightinventions.pl/blog/app-transfer-side-effects/</guid><pubDate>Wed, 31 Jan 2018 23:00:00 GMT</pubDate></item><item><title><![CDATA[My motives for MVVM + FlowControllers path]]></title><description><![CDATA[There are many different approaches to building an iOS application. MVC (Model View Controller), MVP (Model View Presenter), MVVM (Model View ViewModel), VIPER (View Interactor Presenter Entity Routing), Redux... And surely, you can name many others. I've been writing iOS apps for some time now, and I have noticed that MVVM + FlowControllers approach works pretty well for me. In this post I'd like to focus on "Why?" I use it over other approaches and "How?" I use it in my apps. The beginning

St…]]></description><link>https://brightinventions.pl/blog/mvvm-flowcontrollers/</link><guid isPermaLink="false">https://brightinventions.pl/blog/mvvm-flowcontrollers/</guid><pubDate>Thu, 11 Jan 2018 23:00:00 GMT</pubDate></item><item><title><![CDATA[Implementing a simple pedometer using Swift]]></title><description><![CDATA[Ok... but what the pedometer is? Here you have a wikipedia definition: A pedometer is a device, usually portable and electronic or electromechanical, that counts each step a person takes by detecting the motion of the person's hands or hips.

and YES, you can create your own pedometer using iOS framework called CoreMotion.

CoreMotion is a well-known iOS framework. As we could read in docs it processes accelerometer, gyroscope, pedometer environment-related events. In this post I want to focus…]]></description><link>https://brightinventions.pl/blog/coremotion-pedometer-swift/</link><guid isPermaLink="false">https://brightinventions.pl/blog/coremotion-pedometer-swift/</guid><pubDate>Thu, 07 Dec 2017 23:00:00 GMT</pubDate></item><item><title><![CDATA[Working with iOS push notifications]]></title><description><![CDATA[Push notifications, also known as remote notifications, are a tremendously useful feature of mobile applications. They can be used for sending users marketing offers, increase users engagement by providing a personalised content, implementing a chat or even triggering some action to be performed in the background. And what's really useful, users don't have to keep their app opened. Sounds great, doesn't it? Yes, but it's necessary to understand how push notifications work and learn how to set…]]></description><link>https://brightinventions.pl/blog/working-with-ios-push-notifications/</link><guid isPermaLink="false">https://brightinventions.pl/blog/working-with-ios-push-notifications/</guid><pubDate>Thu, 30 Nov 2017 23:00:00 GMT</pubDate></item><item><title><![CDATA[Design Patterns with Swift: Facade pattern]]></title><description><![CDATA[About the pattern Facade pattern is one of the Structural Patterns. The main aim of it is to hide the complexity of a system, class or logic and provide all functionalities behind a simple interface. Commonly, Facade is implemented in a way that one class is related to other classes which represents a system logic. Please take a look at the diagram:

As you can see, there is one class called Facade which separates the logic from LogicA, LogicB, LogicC classes. As a result our client only call…]]></description><link>https://brightinventions.pl/blog/swift-facade-pattern/</link><guid isPermaLink="false">https://brightinventions.pl/blog/swift-facade-pattern/</guid><pubDate>Wed, 15 Nov 2017 23:00:00 GMT</pubDate></item><item><title><![CDATA[TeamCity for iOS project]]></title><description><![CDATA[Hi! Today's topic will be about TeamCity and how to provide continuous integration in your iOS project. Motivation

I have configured a TeamCity many times and for many projects. There are many advantages of using Continuous Integration system in your project development process. Also, there is a lot of alternatives to TeamCity like CircleCI, TravisCI and many more. But in this post I want to share with you TeamCity experience that I have gained at Bright Inventions.

Every project that we start…]]></description><link>https://brightinventions.pl/blog/teamcity-for-ios-project/</link><guid isPermaLink="false">https://brightinventions.pl/blog/teamcity-for-ios-project/</guid><pubDate>Fri, 10 Nov 2017 23:00:00 GMT</pubDate></item><item><title><![CDATA[Working with iOS in-app purchases]]></title><description><![CDATA[There are more pleasant things to do in iOS development than setting up and testing in-app purchases. The process is laborious and requires thorough testing, especially that in-app purchases are crucial from a business perspective. iTunes Connect configuration - part 1

This tutorial is based on auto-renewable subscriptions, but you can configure any other in-app purchase in a very similar way.

To set up the in-app purchases follow the steps below:

Log in to iTunes Connect.

Open My Apps and…]]></description><link>https://brightinventions.pl/blog/working-with-ios-in-app-purchases/</link><guid isPermaLink="false">https://brightinventions.pl/blog/working-with-ios-in-app-purchases/</guid><pubDate>Mon, 30 Oct 2017 23:00:00 GMT</pubDate></item><item><title><![CDATA[Slack + Fastlane = ❤️. About one of Continuous Integration puzzles.]]></title><description><![CDATA[Professional development process consists of many puzzles. Some of these puzzles can be: unit testing, choosing good architecture, clean code, continuous integration and many more. In this post I will focus on one of these puzzles - Continuous Integration(CI). An integral part of CI in iOS Development process is a great tool called Fastlane. Fastlane is a powerful engine which handles a number of tasks like: dealing with code signing, creating .ipa files, generating screenshots to AppStore and…]]></description><link>https://brightinventions.pl/blog/slack-fastlane/</link><guid isPermaLink="false">https://brightinventions.pl/blog/slack-fastlane/</guid><pubDate>Wed, 25 Oct 2017 22:00:00 GMT</pubDate></item><item><title><![CDATA[React Native - 4 steps to improve your workflow as a mobile developer]]></title><description><![CDATA["A developer needs tools that support her/his workflow to be fully productive". Well, I guess that this statement fits to any profession that you can think of. It is really important for me to feel that the environment that I'm working in really supports my flow and works well with my approach to software development. That's why, today I'd like to share a number of things that boost my productivity while creating mobile app in React Native. The following list has been prepared by a developer…]]></description><link>https://brightinventions.pl/blog/react-native-4-steps-to-improve-workflow/</link><guid isPermaLink="false">https://brightinventions.pl/blog/react-native-4-steps-to-improve-workflow/</guid><pubDate>Thu, 19 Oct 2017 22:00:00 GMT</pubDate></item><item><title><![CDATA[A few things I like about React Native. And a few I don't.]]></title><description><![CDATA[React Native is still a hot topic at the company. After spending some time with it, many of us have some thoughts and I think there is still a lot to say about it so I would like to share some of my observations and feelings. This post is going to be extremely subjective so please don't treat it as the only truth. Actually, there are as many different opinions on RN as there are people who have worked with it... or even more :)

Documentation

Or maybe I should say: „the lack of it”? It's not like…]]></description><link>https://brightinventions.pl/blog/a-few-things-i-like-about-react-native-and-a-few-i-dont/</link><guid isPermaLink="false">https://brightinventions.pl/blog/a-few-things-i-like-about-react-native-and-a-few-i-dont/</guid><pubDate>Sun, 15 Oct 2017 22:00:00 GMT</pubDate></item><item><title><![CDATA[Don’t let your iOS app be rejected]]></title><description><![CDATA[While implementing in-app purchases, especially auto-renewable subscriptions, there is a good chance your app will be rejected during a review process if you don’t follow the guidelines exactly. How can you avoid unnecessary trouble? Monetise your app

Phil Schiller announced at WWDC 2017 that Apple so far had paid out over 70 billion dollars to the developers of which 21 billion dollars within last year. By 2017, the total global sales from in-app purchases is projected to amount of 36 billion…]]></description><link>https://brightinventions.pl/blog/dont-let-your-ios-app-be-rejected/</link><guid isPermaLink="false">https://brightinventions.pl/blog/dont-let-your-ios-app-be-rejected/</guid><pubDate>Thu, 12 Oct 2017 22:00:00 GMT</pubDate></item><item><title><![CDATA[React Native - The things that you should be aware of before coming onboard]]></title><description><![CDATA[React Native is a neat piece of technology that I get along pretty well with. Creating multiplatform apps using a shared codebase and having a great feedback loop sounds really promising and after hearing such things you may start wondering "Why the hell am I not using React Native?!". Well... As you probably know, many things aren't all that shiny after you go past the happy-path tutorials. In this post I'd like to give you my perspective on things that I have found problematic, frustrating or…]]></description><link>https://brightinventions.pl/blog/react-native-the-things-that-you-shoud-be-aware-of-before-coming-onboard/</link><guid isPermaLink="false">https://brightinventions.pl/blog/react-native-the-things-that-you-shoud-be-aware-of-before-coming-onboard/</guid><pubDate>Thu, 12 Oct 2017 22:00:00 GMT</pubDate></item><item><title><![CDATA[Design Patterns with Swift: Quick look at a Strategy Pattern]]></title><description><![CDATA[Let's take a quick look at one of the design patterns that should help us to write a good Object-Oriented code. The basic assumption of Strategy Pattern is that you can define many implementations that will conform to the protocol. Take a look at a simple example that can be used on iOS applications.

Firstly, create a protocol which contains a method. In our case it will be:

Define protocol
Create strategies

Ok, most of the iOS apps use an UIImage to represent images in applications. The UIIma…]]></description><link>https://brightinventions.pl/blog/quick-look-on-a-strategy-pattern-using-swift/</link><guid isPermaLink="false">https://brightinventions.pl/blog/quick-look-on-a-strategy-pattern-using-swift/</guid><pubDate>Sun, 08 Oct 2017 22:00:00 GMT</pubDate></item><item><title><![CDATA[It might be worth it]]></title><description><![CDATA[Today you can find Bright Inventions at Trójmiejskie Targi Pracy and this marks a significant milestone for us. We are now getting really serious about growing our team here and inviting next bright developers to join us. I would like to use this occasion to share a few words with you, our potential next great hire. First of all, who are we? Bright Inventions is not just a team, it’s the team. It’s a collective of people who truly enjoy working together and do it in a way that makes them and our…]]></description><link>https://brightinventions.pl/blog/it-might-be-worth-it/</link><guid isPermaLink="false">https://brightinventions.pl/blog/it-might-be-worth-it/</guid><pubDate>Mon, 08 May 2017 22:00:00 GMT</pubDate></item><item><title><![CDATA[Are your views dumb enough? — A way to run your tests without simulator]]></title><description><![CDATA[Hi! As you can see, the title of this post consists of two parts. “Are your views dumb enough” refers to managing code between your classes in project, which is really interesting topic, but there is also a second part — “A way to run your tests without simulator”. Managing your code is pretty straight forward topic and you probably know what to expect from this part, but how do I want to run my tests without simulator? Isn’t a simulator something we really need to test an application? Turns out…]]></description><link>https://brightinventions.pl/blog/are-your-views-dumb-enough/</link><guid isPermaLink="false">https://brightinventions.pl/blog/are-your-views-dumb-enough/</guid><pubDate>Sun, 11 Dec 2016 23:00:00 GMT</pubDate></item><item><title><![CDATA[3D Touch - Peak&amp;Pop feature.]]></title><description><![CDATA[In my previous post I wrote about adopting UIApplicationShortcutItems in your app. Now it's time to implement Peak&Pop - a feature provided by 3d Touch. Get started

First of all we need to check if our device supports force touch events. Then if our device is familiar with force touch we can easily register our UIViewController for force touch events. Take a look at this snippet:

As you can see the above code uses the traitCollection property. It is available in every UIViewController and…]]></description><link>https://brightinventions.pl/blog/3dtouch-peak-and-pop/</link><guid isPermaLink="false">https://brightinventions.pl/blog/3dtouch-peak-and-pop/</guid><pubDate>Sat, 10 Dec 2016 23:00:00 GMT</pubDate></item><item><title><![CDATA[3D Touch - Adopting shortcut items to your app.]]></title><description><![CDATA[With the beginning of the iPhone 6s, Apple has introduced a 3D Touch mechanism which is very cool thing. The 3D Touch is also available on the newest iPhones 7. Nothing indicates that in the future Apple devices will run out of that feature so, here is a quick tutorial on how to improve your app using the one of the three main features of 3D Touch. Modify your Info.plist file
Add to your Info.plist file a special key called UIApplicationShortcutItems. It should be an array. Add items to UIApp…]]></description><link>https://brightinventions.pl/blog/3dtouch-adopting-shortcut-items-to-your-app/</link><guid isPermaLink="false">https://brightinventions.pl/blog/3dtouch-adopting-shortcut-items-to-your-app/</guid><pubDate>Sat, 26 Nov 2016 23:00:00 GMT</pubDate></item><item><title><![CDATA[Make your development better. Use the proxy.]]></title><description><![CDATA[In this post, I would like to describe you to set up a proxy using Charles desktop app. I believe that many of you work with API or consume some REST Service. If haven't heard about proxy yet I believe the knowledge from this post will be useful in your future development. The following example concerns an iOS environment and configuring at the OSX system. What the proxy is?

To tell you what the Proxy is I use the definition that I found in Charles documentation

An HTTP Proxy is a server that…]]></description><link>https://brightinventions.pl/blog/improve-your-development-using-charles/</link><guid isPermaLink="false">https://brightinventions.pl/blog/improve-your-development-using-charles/</guid><pubDate>Tue, 08 Nov 2016 23:00:00 GMT</pubDate></item><item><title><![CDATA[PureLayout vs NSLayoutAnchor - Great confrontation]]></title><description><![CDATA[Last week I've made basic comparison between two libraries that will help you layout your interfaces - PureLayout and SnapKit. You can find this comparison here. Today I'd lake to take the same examples and see how they work with NSLayoutAnchor. NSLayoutAnchor is available to us since iOS 9 and provides us with a new way of creating your constraints. If you do not like creating NSLayoutConstraints using it's initializers or visual format, and do not want any external dependencies for your layout…]]></description><link>https://brightinventions.pl/blog/purelayout-vs-anchors/</link><guid isPermaLink="false">https://brightinventions.pl/blog/purelayout-vs-anchors/</guid><pubDate>Sat, 05 Nov 2016 23:00:00 GMT</pubDate></item><item><title><![CDATA[PureLayout vs SnapKit - Great confrontation]]></title><description><![CDATA[At first, let me clear something out. I'm heavy PureLayout user. I've been creating my UIs in code for some time now and it's not looking like I'm going back to Interface Builder any time soon. I'm not saying IB is bad, but it's just not the way that I do things. I started working with PureLayout back in Objective-C days and I kept on using it in Swift as well. However, recently I've been interested in a framework called SnapKit, that offers a nice "swifty" way of building views in your…]]></description><link>https://brightinventions.pl/blog/purelayout-vs-snapkit/</link><guid isPermaLink="false">https://brightinventions.pl/blog/purelayout-vs-snapkit/</guid><pubDate>Sun, 30 Oct 2016 23:00:00 GMT</pubDate></item><item><title><![CDATA[ReactiveSwift - Manage your memory!]]></title><description><![CDATA[Memory management is a pretty important issue when talking about any kind of system. You can't pretend that your resources are unlimited, and give them out no matter what. When working with ReactiveSwift it's really easy to fall into the pit of wasted resources if you don't follow simple rules. Disposables

Basic unit that will help us handle our memory management, when working with ReactiveSwift is disposable. At the same time that you start observing Signal, or start any work with Signal…]]></description><link>https://brightinventions.pl/blog/reactiveswift-manage-your-memory/</link><guid isPermaLink="false">https://brightinventions.pl/blog/reactiveswift-manage-your-memory/</guid><pubDate>Fri, 21 Oct 2016 22:00:00 GMT</pubDate></item><item><title><![CDATA[My first Cocoapod created]]></title><description><![CDATA[The first Cocoapod created Hello, today I want to share with you my first created pod.

It is called ContactCircularView and it allows you to create circular views with some text or image inside in an easy way.

Main inspiration to create it was a Circles (as you can see below) in iOS Contact application.

More information about my pod you can get via link to my Github :

GitHub

or Cocoapods site :

CocoaPods

I'll be grateful if you try it ;)

This…]]></description><link>https://brightinventions.pl/blog/first-pod-created/</link><guid isPermaLink="false">https://brightinventions.pl/blog/first-pod-created/</guid><pubDate>Sun, 16 Oct 2016 22:00:00 GMT</pubDate></item><item><title><![CDATA[ReactiveCocoa UI bindings with Rex]]></title><description><![CDATA[Today, we will take a closer look at Rex - ReactiveCocoa extensions. I find Rex pretty helpful when working with ReactiveCocoa, especially creating UI bindings. If you are binding your view model with UI layer, Rex will let you do it much easier with it's extensions to UIControls. Here are some examples of Rex usage.

UIButton
let cocoaAction = CocoaAction(action) { _ in }

//without Rex
button.addTarget(cocoaAction, action: CocoaAction.selector, forControlEvents: .TouchUpInside)

//with Rex…]]></description><link>https://brightinventions.pl/blog/2016-8-22-reactivecocoa-ui-bindings-with-rex/</link><guid isPermaLink="false">https://brightinventions.pl/blog/2016-8-22-reactivecocoa-ui-bindings-with-rex/</guid><pubDate>Sun, 21 Aug 2016 22:00:00 GMT</pubDate></item><item><title><![CDATA[ReactiveCocoa 4 - CocoaActions]]></title><description><![CDATA[CocoaAction is a wrapper around Action type that is available in ReactiveCocoa. (Here  you can read more about Action). We use CocoaAction to bind our Actions to GUI controls. Let's see a quick example of how it works. Example

Let's imagine a situation, where we have we have a UISwitch control. Every time we switch it on or off, we want to change a MutableProperty text value.

var text = MutableProperty<String>("Switch is on")
let switchControl = UISwitch()


First, let's create Action that will…]]></description><link>https://brightinventions.pl/blog/2016-8-16-reactivecocoa-4-cocoaaction/</link><guid isPermaLink="false">https://brightinventions.pl/blog/2016-8-16-reactivecocoa-4-cocoaaction/</guid><pubDate>Mon, 15 Aug 2016 22:00:00 GMT</pubDate></item><item><title><![CDATA[ReactiveCocoa 4 - Action]]></title><description><![CDATA[Today I'll tell you about an Action type that is available in ReactiveCocoa 4. Action is pretty straightforward, It takes input, does some work and returns output. Moreover, it can fail and provide us with an Error type. Let's look at creation of a simple action that takes Int as an input and returns String or NSError if it fails.

let action = Action<Int, String, NSError>({ (number) -> SignalProducer<String, NSError> in
  return SignalProducer<Void, NSError> {observer, disposable in
    observer…]]></description><link>https://brightinventions.pl/blog/reactivecocoa-4-action/</link><guid isPermaLink="false">https://brightinventions.pl/blog/reactivecocoa-4-action/</guid><pubDate>Sat, 06 Aug 2016 22:00:00 GMT</pubDate></item><item><title><![CDATA[ReactiveCocoa 4 - Events]]></title><description><![CDATA[Understanding signal events in ReactiveCocoa is a must. We can't effectively use signals and signal producers if we don't know what will happen after certain event is received. We distinguish two kinds of events that you can send through signals - terminating and non-terminating. There are three kinds of terminating events: Failed, Interrupted, Completed, and one non-terminating - Next. Signals and events

You can either create a pipe with Signal.pipe() that will return signal and observer, or…]]></description><link>https://brightinventions.pl/blog/2016-7-20-reactivecocoa-4-events/</link><guid isPermaLink="false">https://brightinventions.pl/blog/2016-7-20-reactivecocoa-4-events/</guid><pubDate>Tue, 19 Jul 2016 22:00:00 GMT</pubDate></item><item><title><![CDATA[Creating an UIImage using ImageIdentifiers]]></title><description><![CDATA[Hi! In my first post I want to share with you some cool tip which I watched in 'Swift in Practice - Apple WWDC 2015' Alex Migicovsky presentation about using UIImages in Swift project. Normally you create UIImageView with UIImage like this :

or like this

But what happens If you have typos (e.g. "rign") in file name or there is not an image named "ring" ? Nothing. You don't get any warnings or errors from a compiler. Everything will compile without problems. But unfortunately our UIImageView…]]></description><link>https://brightinventions.pl/blog/2016-4-3-UIImageConcept/</link><guid isPermaLink="false">https://brightinventions.pl/blog/2016-4-3-UIImageConcept/</guid><pubDate>Sat, 02 Apr 2016 22:00:00 GMT</pubDate></item><item><title><![CDATA[Fetching contacts with CNContactStore]]></title><description><![CDATA[Since iOS 9.0 we have a new nice method of fetching and saving contacts - CNContactStore! Today I will show you how to create a simple UITextField that will be responsible for fetching a contact for you! Setting up

Let me introduce you our textfield!

Our text field will be unique this time. It will not behave the way it usually does. After tapping it we don't want to see a keyboard, we want to see contacts! In order to achieve this, first we have to implement specific delegate method from our…]]></description><link>https://brightinventions.pl/blog/2016-2-5-fetching-contacts-with-cncontactstore/</link><guid isPermaLink="false">https://brightinventions.pl/blog/2016-2-5-fetching-contacts-with-cncontactstore/</guid><pubDate>Thu, 04 Feb 2016 23:00:00 GMT</pubDate></item><item><title><![CDATA[Heartbeat button]]></title><description><![CDATA[Hi! Today I will show you how to create a simple heart button that will simulate a heartbeat upon each tap. You can find an example project on my Github. Create a button

First of all we have to create a button. We create a heart image from the resources that you can find in an example project and we assign it to our button. Then we simply position out button inside a view and assign a certain size to it. The size should equal our heart image's size. Next, we add target to our button's…]]></description><link>https://brightinventions.pl/blog/2016-2-1-heartbeat-button/</link><guid isPermaLink="false">https://brightinventions.pl/blog/2016-2-1-heartbeat-button/</guid><pubDate>Sun, 31 Jan 2016 23:00:00 GMT</pubDate></item><item><title><![CDATA[ReactiveCocoa 4 - Signal]]></title><description><![CDATA[Today, let's take a look at basic aspect of ReactiveCocoa - Signal. What is it?

A signal is an event stream. When you create a Signal, you decide what type of values and errors are sent over it. That's different to what it used to be in ReactiveCocoa 2, where RACSignal did not have a value type attached to it. Generally, Signals are representation of event streams that are already in progress. Each signal may have multiple observers, that will detect events pushed inside the stream. A signal may…]]></description><link>https://brightinventions.pl/blog/2016-1-29-reactivecocoa-4-signal/</link><guid isPermaLink="false">https://brightinventions.pl/blog/2016-1-29-reactivecocoa-4-signal/</guid><pubDate>Thu, 28 Jan 2016 23:00:00 GMT</pubDate></item><item><title><![CDATA[ReactiveCocoa 4 - SignalProducer]]></title><description><![CDATA[Today we will take a look at SignalProducer class which is provided with ReactiveCocoa 4. How should we treat SignalProducer? It should be treated as representation of a operations/tasks. As an example, take a look at this method, which returns a SignalProducer instance.

We can use it to create a signal producer and assign it to a variable. Then when we have a producer that we can ask for signals. If we don't start an actual signal, nothing will happen.

What is important here, is the fact that…]]></description><link>https://brightinventions.pl/blog/2016-1-25-reactivecocoa-4-signal-producer/</link><guid isPermaLink="false">https://brightinventions.pl/blog/2016-1-25-reactivecocoa-4-signal-producer/</guid><pubDate>Sun, 24 Jan 2016 23:00:00 GMT</pubDate></item><item><title><![CDATA[ReactiveCocoa 4 - MutableProperty]]></title><description><![CDATA[MutableProperty which comes with ReactiveCocoa allows us to track variable's changes. Let's take a quick look on how it actually works. Let's assume, that we want to create a bank account balance variable, that we will be tracking later on.

MutableProperty has three fields that we are especially interested in.

###Value First one is value, which grants us access to a current value of our property. Everytime we change a this value, all observers of signals created by a producer get notified about…]]></description><link>https://brightinventions.pl/blog/2016-1-21-reactivecocoa-4-mutableproperty/</link><guid isPermaLink="false">https://brightinventions.pl/blog/2016-1-21-reactivecocoa-4-mutableproperty/</guid><pubDate>Wed, 20 Jan 2016 23:00:00 GMT</pubDate></item><item><title><![CDATA[My thoughts on - StatefulViewController]]></title><description><![CDATA[I had a chance to play a little bit with a nice pod that is called StatefulViewController, created by Alexander Schuch. StatefulViewController works with both UIView and UIViewController, and allows you to introduce placeholders for their different states: Loading, Error, Empty or Content. Everything is based on an intuitive protocol and after providing your placeholder views and implementing required methods everything works like a charm. You can find this pod on Alexander's github. I've looked…]]></description><link>https://brightinventions.pl/blog/2016-1-18-my-thoughts-on-statefulviewcontroller/</link><guid isPermaLink="false">https://brightinventions.pl/blog/2016-1-18-my-thoughts-on-statefulviewcontroller/</guid><pubDate>Sun, 17 Jan 2016 23:00:00 GMT</pubDate></item><item><title><![CDATA[Custom XCode key bindings]]></title><description><![CDATA[When I started writing Swift code, I found out that my beloved IDE(AppCode) for Objective-C, was not doing as well as I thought it would. Moreover, I've noticed that XCode did better job in terms of handling CocoaPods, autocompletion, debugging etc. It was more than enough for me to say sorry to XCode and leave AppCode for some time to let it solve it's problems. I really miss it's Objective-C features like code refactoring and it's ability to generate code, but there is no place for…]]></description><link>https://brightinventions.pl/blog/2016-1-15-custom-xcode-key-bindings/</link><guid isPermaLink="false">https://brightinventions.pl/blog/2016-1-15-custom-xcode-key-bindings/</guid><pubDate>Thu, 14 Jan 2016 23:00:00 GMT</pubDate></item><item><title><![CDATA[My thoughts on - Whisper]]></title><description><![CDATA[Lately I've come across a nice pod which makes in-app messaging easier and decided to give it a quick look. I've created a test project in order to see how the pod behaves and my first impression was... "That was easy!". If you want to find out how to use this pod, check out Hyperoslo's github, which shows how easy it is to start sending your messages! I took a quick look into the source code of this pod and instantly found two things that caught my eye. ####Creating UI components First thing…]]></description><link>https://brightinventions.pl/blog/2016-1-13-my-thoughts-on-whisper/</link><guid isPermaLink="false">https://brightinventions.pl/blog/2016-1-13-my-thoughts-on-whisper/</guid><pubDate>Tue, 12 Jan 2016 23:00:00 GMT</pubDate></item><item><title><![CDATA[Swift files generator]]></title><description><![CDATA[For some time, I have been creating iOS apps without using storyboards at all. Because of this fact, creating screens in the application is connected to some repetitive steps. You create a ViewController, then a View which will be presented in the controller. You want a PageViewController? Create one, set up ViewControllers that will be presented inside it. After some time, you can recognise a pattern and prepare a bunch of code snippets that will do the job for you. Or... You can prepare a code…]]></description><link>https://brightinventions.pl/blog/2016-1-8-swift-files-generator/</link><guid isPermaLink="false">https://brightinventions.pl/blog/2016-1-8-swift-files-generator/</guid><pubDate>Thu, 07 Jan 2016 23:00:00 GMT</pubDate></item><item><title><![CDATA[3 tips for iOS Calabash beginners]]></title><description><![CDATA[Have you ever felt that your app needs UI tests? Are you tired of checking behaviours of your application again and again? Consider using Calabash! What is Calabash? It is an open source framework that is constantly supported by Xamarin. Calabash will let you run your UI tests written in Cucumber on iOS and Android. Moreover, it's really easy to read for people that are not familiar with programming.

If you started writing UI tests in Calabash and it isn't going as smooth as you expected, then…]]></description><link>https://brightinventions.pl/blog/3-tips-for-ios-calabash-beginners/</link><guid isPermaLink="false">https://brightinventions.pl/blog/3-tips-for-ios-calabash-beginners/</guid><pubDate>Sun, 13 Dec 2015 23:00:00 GMT</pubDate></item><item><title><![CDATA[Quickly access Documents Directory for the iOS Simulator]]></title><description><![CDATA[Let me share a small trick that I use to quickly navigate to documents directory for an iOS application that runs in the simulator. It requires adding some small snippet of code to the app but it really pays off. Here's the snippet:

In essence it creates a symbolic link to app documents directory and puts that symbolic link on your Desktop. Just add it to application: didFinishLaunchingWithOptions: method and you will find SimulatorDocuments link recreated on your Desktop anytime you run the…]]></description><link>https://brightinventions.pl/blog/quickly-access-application-documents-directory/</link><guid isPermaLink="false">https://brightinventions.pl/blog/quickly-access-application-documents-directory/</guid><pubDate>Wed, 02 Dec 2015 23:00:00 GMT</pubDate></item><item><title><![CDATA[Desymbolicate crash reports from the command line]]></title><description><![CDATA[I was struggling again with desymbolicating of iOS app crash logs and thought that it would be nice to have a handy script that is a bit easier to use than the multi step process I had been using thus far. There's no rocket science in it, just a simple script named desym that seems to work for me and probably will require more than one adjustment to work in general. The source code is here on GitHub.

The idea is to put .ipa and .dsym.zip file in the same directory and then execute ./desym.sh…]]></description><link>https://brightinventions.pl/blog/desymbolicate-crash-reports/</link><guid isPermaLink="false">https://brightinventions.pl/blog/desymbolicate-crash-reports/</guid><pubDate>Sun, 18 Oct 2015 22:00:00 GMT</pubDate></item><item><title><![CDATA[Data transfer between Apple Watch and iPhone]]></title><description><![CDATA[Today's post will cover basic data transfer between your iPhone app and Apple Watch app. Let's assume that you have already created an Apple Watch extension in your project and you want to transfer some data to your watch. As an example, we will be sending Event object to our watch, so let's have a look at Event class! The most important thing here is to implement NSCoding protocol. We will need it, because we won't be able to send pure Event object to our watch app, however we can easily send…]]></description><link>https://brightinventions.pl/blog/apple-watch-iphone-data-transfer/</link><guid isPermaLink="false">https://brightinventions.pl/blog/apple-watch-iphone-data-transfer/</guid><pubDate>Thu, 01 Oct 2015 22:00:00 GMT</pubDate></item><item><title><![CDATA[Queueing audio files with AVQueuePlayer]]></title><description><![CDATA[Today's short post will cover queueing audio files using Swift. In order to do this we will be using AVQueuePlayer. Import AVFoundation in order to use the AVQueuePlayer
Create an instance of AVQueuePlayer

Ps. Hold it as instance variable. If you create it as local variable, you will lose it after exiting the scope and audio won't play.

Add audio file to queue

Here we will be adding a file which is added to our project. In order to do this, we create an instance of AVPlayerItem and add it to…]]></description><link>https://brightinventions.pl/blog/queueing-audio-files/</link><guid isPermaLink="false">https://brightinventions.pl/blog/queueing-audio-files/</guid><pubDate>Fri, 28 Aug 2015 22:00:00 GMT</pubDate></item><item><title><![CDATA[iOS: The simplest star rating control ever]]></title><description><![CDATA[Recently I had a need to show the simple rating control in one of our iOS apps - the typical row of stars, few leftmost highlighted, the more highlighted, the better the rating is - something as obvious as this: My first thoughts were wandering around star images one after another, the hell with positioning with frames or multitude of Auto Layout constraints. Nah. The second take led me to EDStarRating, a library that does this pretty well. But all I needed was only to show few stars in a row…]]></description><link>https://brightinventions.pl/blog/ios-simplest-star-rating-control-ever/</link><guid isPermaLink="false">https://brightinventions.pl/blog/ios-simplest-star-rating-control-ever/</guid><pubDate>Thu, 13 Aug 2015 00:00:00 GMT</pubDate></item><item><title><![CDATA[NSKeyedArchiver / Unarchiver]]></title><description><![CDATA[Lately I've spent some time wrtiting an app for myself. It is supposed to let you create tasks, mark them as done/undone and then track your progress. I've called it "Habit Tracker" and it is available . While writing this utility I came across a few interesting issues and this blogpost will cover one of them. Saving and Loading data

The feature that "Habit tracker" surely needed was ability to store and load users tasks. Core data seemed a bit overkill for me, so I decided to use…]]></description><link>https://brightinventions.pl/blog/2015-8-04-saving-and-loading-data-to-iOS-device/</link><guid isPermaLink="false">https://brightinventions.pl/blog/2015-8-04-saving-and-loading-data-to-iOS-device/</guid><pubDate>Mon, 03 Aug 2015 22:00:00 GMT</pubDate></item><item><title><![CDATA[[CocoaHeads Tricity] Automate your iOS deployment a bit]]></title><description><![CDATA[Here come the slides from a talk I gave at the last Cocoaheads Tricity meeting. It's titled "Automate your iOS deployment a bit" and shows how we approach build and deployment automation at Bright Inventions. In just a few days we're going to publish our "generate-ios" Yeoman generator on Github. We welcome you to join us at next Cocoaheads Tricity meetings where we talk and learn about Cocoa, Swift, Objective-C, UX/UI design and everything else related to creating apps on this platform.]]></description><link>https://brightinventions.pl/blog/cocoaheads-automate-your-ios-deployment/</link><guid isPermaLink="false">https://brightinventions.pl/blog/cocoaheads-automate-your-ios-deployment/</guid><pubDate>Sun, 31 May 2015 22:00:00 GMT</pubDate></item><item><title><![CDATA[iOS layouts for web developers]]></title><description><![CDATA[Almost all of my past development experience is centered around the web. Just recently I had an opportunity to dive into an iOS development and while I enjoy it, I miss a lot of things from the web development world. I've quickly discovered that applying the techniques and approaches directly from the web is often not possible. Sometimes I had to switch to the different mindset than the one I'm used to. To make things easier, I was looking for an iOS begginer guide targeted specifically to the…]]></description><link>https://brightinventions.pl/blog/ios-layouts-for-web-developers/</link><guid isPermaLink="false">https://brightinventions.pl/blog/ios-layouts-for-web-developers/</guid><pubDate>Wed, 27 May 2015 00:00:00 GMT</pubDate></item><item><title><![CDATA[iOS layouts for web developers #5 - events handling]]></title><description><![CDATA[Time to finish the iOS layouts for web developers series with the post about events. Earlier in the series you might read about the controls, control positioning, managing the appearance and CSS properties replacements. Touchy state of the mobile touch events

Both in the web and in iOS we employ event-based models to define and control the interactions between our application and the external world, especially the user. The general idea of listening and reacting to particular events on specific…]]></description><link>https://brightinventions.pl/blog/ios-layouts-for-web-developers-5-events-handling/</link><guid isPermaLink="false">https://brightinventions.pl/blog/ios-layouts-for-web-developers-5-events-handling/</guid><pubDate>Thu, 21 May 2015 00:00:00 GMT</pubDate></item><item><title><![CDATA[iOS layouts for web developers #4 - CSS properties replacements]]></title><description><![CDATA[This is the fourth post in the iOS layouts for web developers series. The previous ones were about the controls, control positioning and managing the appearance. This time something more lightweight, I hope. We’ll go through various visual aspects of the controls and see how we can set it up, compared to CSS. Let’s start with the basics - margin and padding. Box model & controlling controls spacing

There was a lot of confusion in the past in the web world around the box model, i.e. whether the…]]></description><link>https://brightinventions.pl/blog/ios-layouts-for-web-developers-4-css-properties-replacements/</link><guid isPermaLink="false">https://brightinventions.pl/blog/ios-layouts-for-web-developers-4-css-properties-replacements/</guid><pubDate>Fri, 10 Apr 2015 00:00:00 GMT</pubDate></item><item><title><![CDATA[iOS layouts for web developers #3 - managing the appearance]]></title><description><![CDATA[This is the third part of the iOS layouts for web developers series. The first part was about the controls, the second about its positioning. Now I’m going to tackle how to approach managing the controls appearance - something that we have CSS for in the web. CSS equivalent?

CSS was first standardised back in 1996, it was around early 2000s when it became ubiquitous. We've then left behind the times when the <center> tag was used to align content and view specific definitions like fonts or…]]></description><link>https://brightinventions.pl/blog/ios-layouts-for-web-developers-3-managing-appearance/</link><guid isPermaLink="false">https://brightinventions.pl/blog/ios-layouts-for-web-developers-3-managing-appearance/</guid><pubDate>Fri, 03 Apr 2015 00:00:00 GMT</pubDate></item><item><title><![CDATA[[CocoaHeads Tricity] Do not reinvent the wheel - most popular Cocoa libraries]]></title><description><![CDATA[On Tuesday 31th March 2015 I gave a presentation about most popular Cocoa libraries and [CocoaPods] (http://cocoapods.org) at the local Cocoaheads Tricity group meeting, which we are now co-organizing. If you have ever wondered what libraries we use at Bright Inventions or you didn't know that you can divide your app into private Pods you may find this presentation interesting.

If you are interested in Apple technologies we invite you to Cocoaheads Tricity meetings where we talk and learn…]]></description><link>https://brightinventions.pl/blog/cocoaheads-tricity-do-not-reinvent-the-wheel/</link><guid isPermaLink="false">https://brightinventions.pl/blog/cocoaheads-tricity-do-not-reinvent-the-wheel/</guid><pubDate>Tue, 31 Mar 2015 22:00:00 GMT</pubDate></item><item><title><![CDATA[iOS layouts for web developers #2 - control positioning]]></title><description><![CDATA[In the first part of the iOS layouts for web developers series I’ve discussed controls as the basic building blocks that comprises the layout in iOS world and how that compares to HTML. I haven’t tackled anything about how and where these controls are drawn on the screen. The matter is complex enough so that here is the separate post only about it. Let’s start with restating the acknowledgement that my overall goal here is trying to find best analogies to the web development world, not creating…]]></description><link>https://brightinventions.pl/blog/ios-layouts-for-web-developers-2-control-positioning/</link><guid isPermaLink="false">https://brightinventions.pl/blog/ios-layouts-for-web-developers-2-control-positioning/</guid><pubDate>Mon, 23 Mar 2015 23:00:00 GMT</pubDate></item><item><title><![CDATA[Setup AppCode to start Simulator in RTL mode]]></title><description><![CDATA[Question How to make iOS Simulator work with Right-To-Left languages when it's started from AppCode?

Answer

Paste these two parameters:

-AppleTextDirection YES 
-NSForceRightToLeftWritingDirection YES


into `program arguments' in Run/Debug Configuration.

Keep in mind that if you kill the app and start it again in simulator, parameters wouldn't be included for the new process. Thus the app will start in the common LTR mode. The only way to restart the app in RTL is to run the app from…]]></description><link>https://brightinventions.pl/blog/setup-appcode-to-work-with-rtl-languages/</link><guid isPermaLink="false">https://brightinventions.pl/blog/setup-appcode-to-work-with-rtl-languages/</guid><pubDate>Mon, 16 Mar 2015 23:00:00 GMT</pubDate></item><item><title><![CDATA[iOS layouts for web developers #1 - basic building blocks]]></title><description><![CDATA[In the first part of iOS layouts for web developers series I'll have a look at the basic building blocks of the view layer in iOS and compare it to what HTML offers. First, we need to shift our mindset a bit and accept the fact we need to give up some control (pun intended) over our views to the iOS. Elements vs. controls

In HTML, everything we can see in the browser is built upon the low-level HTML elements (tags) organized within a hierarchy. The browser draws the elements visual…]]></description><link>https://brightinventions.pl/blog/ios-layouts-for-web-developers-1-basic-building-blocks/</link><guid isPermaLink="false">https://brightinventions.pl/blog/ios-layouts-for-web-developers-1-basic-building-blocks/</guid><pubDate>Thu, 26 Feb 2015 23:00:00 GMT</pubDate></item><item><title><![CDATA[Reactive Cocoa presented on CocoaHeads Tricity]]></title><description><![CDATA[On Thursday 18th December 2014 I gave a small presentation about ReactiveCocoa to the local Cocoaheads Tricity group. Cocoaheads is a group of passionate iOS and MacOS X developers willing to share their knowledge and learn. If you've never heard of ReactiveCocoa the presentation might plant a seed of interest:

It's probably not easy to get started thinking in FRP terms to get most out of ReactiveCocoa - but once you do, using the library is a pleasant experience.]]></description><link>https://brightinventions.pl/blog/cocoaheads-tricity-reactivecocoa/</link><guid isPermaLink="false">https://brightinventions.pl/blog/cocoaheads-tricity-reactivecocoa/</guid><pubDate>Sun, 21 Dec 2014 00:00:00 GMT</pubDate></item><item><title><![CDATA[InjectionForXcode meets command line]]></title><description><![CDATA[I find InjectionForXcode to be an indispensable tool in my daily iOS development. It works brilliantly but generates a lot of noise that I just couldn’t cope with. I use AppCode. Whenever I execute Run -> Patch Project For Injection there’s a flood of messages telling me about changes in each individual prefix.pch file. There’s one prefix file for each CocoaPod in the project so you can imagine the pain of having to press “OK” button in a dozen of alert messages. Additionally after each file has…]]></description><link>https://brightinventions.pl/blog/xcodeforinjection-meets-command-line/</link><guid isPermaLink="false">https://brightinventions.pl/blog/xcodeforinjection-meets-command-line/</guid><pubDate>Thu, 06 Nov 2014 23:00:00 GMT</pubDate></item></channel></rss>