Secure Your App, One Class at a Time

Security is one of the most critical aspects of releasing a production app, and with Parse there are lots of ways you can secure your app. As Bryan laid out in his 5-part security series, Parse provides a powerful security toolset, including the master key, Access Control Lists (ACLs), Class-Level Permissions (CLPs), and Cloud Code. Every successful production app uses some features out of this toolset, and we are always working to improve its ease of use for Parse developers to take advantage of these effective tools. A few months ago, we released an updated ACL editor, making it much easier to view and edit ACLs in the data browser. Today we are releasing a new and improved CLP editor, so you can view and edit your app’s Class-Level Permissions just as easily as its object-level ACLs!

Just like ACLs, CLPs are lists of users or roles that can access a specific class of your app. As with ACLs, you can give each user/role read or write access. Let’s see how this works in an example. Say we have a restaurant app, with a Restaurant class. To edit the CLPs for the Restaurant class, click the ‘Security’ button at the top of the data browser. This will open the new CLP editor, and you will notice that the default permissions for every class is public read and write (with some exceptions).

Screenshot 2015-02-10 20.35.50

You may notice that this looks strikingly familiar to the ACL editor. Right now the Restaurants are completely public, meaning that any user of the app can see every Restaurant, and can change every Restaurant. We probably don’t want Restaurants to be completely public, because then any user could just delete all the Restaurants in the database and our app wouldn’t do much after that. So, let’s disable public writes.

Screenshot 2015-02-10 20.42.18

Now any user can see all the Restaurants, but nobody can change any Restaurants (without the master key). But maybe I want my own user to be able to create new Restaurants, or update old ones. I can add my user to the CLP editor by typing in my username or objectId, and allow writes for that user by clicking the “Write” checkbox.

Screenshot 2015-02-10 20.48.07

Now the jamie user can do whatever he wants with all of the objects in the Restaurant class, while no one else can write to this class. But maybe there are some other users that should be able to write to this class, and I don’t want to keep adding each user one-by-one. Let’s use a role, which we’ve named admin . First we add all the users we want to have write access to the admin role, then we type the role name into the next row, and finally we enable write access by clicking on the “Write” checkbox.

Screenshot 2015-02-10 20.59.40

Any user in the admin role can now make changes to the Restaurant class. But what if we want to let some other group of users – those in the chef role – add new Restaurants, but not be able to edit existing Restaurants? To do that, we first click the settings gear at the top-right of the editor, and switch to the “Advanced” mode of the editor. In the advanced mode we can set more specific permissions on the class for different request types.

Screenshot 2015-02-11 16.28.18

There are 6 types of permissions you can manage in the CLP editor, based on the different types of requests you can make to Parse. We group these permissions into “Read” and “Write” categories, with the exception of “Add Field”.

  • Read:
    • Get — With Get permissions enabled, users can fetch objects in this class if they know their objectIds.
    • Find — Anyone with Find permissions enabled can query all of the objects in the class, even if they don’t know their objectIds. Any table with public Find permissions will be completely readable by the public, unless you put an ACL on each object. (with some exceptions)
  • Write:
    • Update — Anyone with Update permissions enabled can modify the fields of any object in the class. For publicly readable data, such as game levels or assets, you should disable this permission.
    • Create — Like Update, anyone with Create permissions enabled can create new objects of a class. As with the Update permission, you’ll probably want to turn this off for publicly readable data.
    • Delete — With this permission enabled, users can delete any object in the class. All they need is its objectId.
  • Add Field — Parse classes have schemas that are inferred when objects are created. While you’re developing your app, this is great, because you can add a new field to your object without having to make any changes on the backend. But once you ship your app, it’s very rare to need to add new fields to your classes automatically. So you should just about always turn off this permission for all of your classes when you submit your app to the public.

Going back to our example, we wanted to ensure that all users in the chef role could create Restaurants, but we don’t want them to be able to update or delete any existing restaurants. To accomplish this we simply add a row for the chef role, and check “Create”.

Screenshot 2015-02-11 16.27.43

We could add permissions for any of the other types of requests in just the same way. CLPs are an extremely powerful tool for quickly and easily securing your app. But before you add a bunch of CLPs to your app, make sure you understand how CLPs and ACLs interact with each other.

We are excited to continue giving Parse developers better ways to secure their apps, and we hope this helps you launch safer, more secure production apps! Go check out the new editor in the data browser, and as always, let us know what you think!

February 23, 2015

Parse Local Datastore for iOS

Local Datastore for iOS

Too often, we’ve seen bad reception or lack of connectivity become the downfall of what could have been an incredible user experience. Many mobile apps are simple clients that display data straight from a server, losing all functionality without an internet connection. Because of this, people who use these apps face painful loading screens and broken features. The developers who build these apps want a better experience, but it’s not easy to build all the underlying logic to handle local data storage gracefully.

Parse Local Datastore makes it a lot easier, and today we’re excited to announce that it’s available in our iOS/OS X SDK. You can now create a seamless, uninterrupted user experience free from connectivity constraints.

It’s the same functionality found in our Android implementation, but now for iPhones , iPads, and Macs everywhere. [PFObject pin] persists PFObjects to the Local Datastore and [PFObject unpin] removes them. Once pinned, you can access them anytime with a normal PFQuery:

PFQuery *query = [PFQuery queryWithClassName:@"Feed"];

// Pin PFQuery results
NSArray *objects = [query findObjects]; // Online PFQuery results
[PFObject pinAllObjectsInBackground:objects];


// Query the Local Datastore
[query fromLocalDatastore];
[query whereKey:@"starred" equalTo:@YES];
[[query findInBackground] continueWithBlock:^id(BFTask *task) {
// Update the UI

Pinned PFObjects will remain accessible while offline — through app exits and restarts — until they are unpinned. Subsequent saves, updates, or deletes will keep your Parse Local Datastore results up-to-date.

You can also choose to update your object using the PFObject method saveEventually. This will first update its instance in the Local Datastore and then do so remotely, so any changes can be kept up-to-date while offline:

feedItem.starred = YES;

// No network connectivity
[feedItem saveEventually];


PFQuery *query = [PFQuery queryWithClassName:@"Feed"];
[query fromLocalDatastore];
[query whereKey:@"starred" equalTo:@YES];
[[query findInBackground] continueWithBlock:^id(BFTask *task) {
// "feedItem" PFObject will be returned in the list of results

This also means that if you’re already using the PFObject method saveEventually to protect your app against network failures, you’ll get most of this without any additional work–simply by updating to the latest iOS/OSX SDK and enabling Local Datastore.

With Parse, it’s easy to take your app offline! Check out our guide and API docs to get started now.

Grantland Chew
December 9, 2014

Introducing Parse Crash Reporting

Crash Reporting

We at the Parse London office are happy to announce Parse Crash Reporting: the simplest way to register, track, and resolve crashes in your apps. Being able to capture and fix crashes efficiently means fewer frustrated users and better retention–one of the most important metrics to any developer.

In the past, we’ve seen Parse developers use third-party crash reporting tools, but this approach required developers to manage several different SDKs, learn new APIs, and monitor many dashboards at once. We wanted it to be simpler. Part of Parse’s core mission has always been to abstract away common tasks and streamline the developer’s experience — so we built a way to manage crash reports right within Parse.

Crash Reporting

Say you’ve released a new version of your app that unfortunately “features” a newly introduced bug. Have no fear! All you have to do is enable Parse Crash Reporting, making the experience of handling crashes in your app much smoother than ever before. We’ve updated our iOS and Android SDKs to provide a simple and intuitive interface that detects the bug, pinpoints the issue, and generates a report allowing you to resolve problems quickly and easily. With this update, our SDKs automatically cache and resend your crash reports if connectivity is spotty. And, our backend tracks bugs on a per-version basis, so that if you’ve reintroduced an old bug in a new version of your app, Crash Reporting still ensures you’ll notice and fix it as soon as possible—even if you’ve previously marked it as “resolved.”

Here’s an example snippet showing how you can enable Parse Crash Reporting for Android:


Here’s an example snippet showing how you can enable Parse Crash Reporting for iOS:

[ParseCrashReporting enable];

As you may have expected, the sending of crash reports from the client is asynchronous and takes place automatically in the background.

We’re always looking to improve our products and would love to hear your feedback. Check out our guides, try it out, and let us know what you think!

Islam Ismailov
December 9, 2014

Migrating from Urban Airship

Making mobile development as easy as possible has always been our mission at Parse. And ensuring your data is portable and remains yours is an important part of that mission. We’ve worked hard on improving the accessibility of your data on Parse and are committed to ensuring our customers can access their data at any time.

In that spirit, we also want to make sure new customers are able to easily migrate from other providers to Parse. We noticed that the push notification provider Urban Airship recently made their product paid only. So, a few of our engineers spent a weekend building a very simple migration tool. This tool will import all of your Urban Airship push subscriptions for iOS and Android (GCM) devices to Parse. Simply enter your Urban Airship app key and secret and we’ll take care of the rest!

Parse Push allows developers to send unlimited push notifications to up to 1 million devices for free every single month. Beyond that, the pricing is simple: you’ll pay $0.05 a month for every 1000 extra devices. That’s $50 for another million devices, and you can send them as many pushes as you want.


After the import is complete, check out the Data Browser to see all of your data. You can then immediately start sending pushes to existing devices without requiring an update to your app. Until you require an update, you can continue using the migration tool to import any new devices. Don’t worry, we’re keeping track of which ones you’ve already imported, so there won’t be any duplicates. Once you’ve integrated the Parse SDK and updated your app, new devices will start showing up in Parse. You can then start taking advantage of our powerful analytics features. To learn more about the steps of migrating to Parse, take a look at our tutorial that will guide you through the whole process.

We’re excited for you to experience all that Parse has to offer. With Parse Push, you can now enjoy device targeting, in-depth analytics, and timezone and badge increment support for your push messaging. Plus, don’t miss our brand new A/B testing feature — engage with your users more intimately and effectively than ever before.

If there’s any other importer you’d like to see, let us know!

Mattieu Gamache-Asselin
December 8, 2014

Parsing All Over the Globe

View this post in:  中文(简体)   |  中文(台灣)   |    한국어    |    日本語    |    Русский

Parsing All Over the Globe

My cofounders and I started Parse in 2011 to solve our own problems. We were frustrated with all the repetitive work needed to build great cross platform mobile apps. Our first customers were our friends who also built apps and they mostly lived near us in San Francisco. Over time, we started attracting more customers that weren’t just our friends — first in Silicon Valley and soon throughout North America. Today, over 500,000 apps have been created on Parse, and hundreds of thousands of our developers hail from outside of the United States. Our team is incredibly honored that so many developers across the globe have trusted Parse with their businesses and apps. Here are some cool stats about our global presence:

  • Active apps in Asia grew nearly 90% in the first half of 2014.
  • Apps in APAC that use all three Parse products—Parse Core, Parse Push, and Parse Analytics—grew by more than 90% in the first half of 2014.
  • 6 of Parse’s 15 largest countries (by number of active apps) are in Asia: India, Japan, Australia, China, Taiwan, Korea.

We are extremely excited about how much our community has grown since 2011. As that growth continues to accelerate, today I’m pleased to share the efforts we have made to make Parse even more friendly to our international community:

  • Localizing our content — We have localized our technical documentation and customer success stories into Chinese ( Simplified & Traditional ), Japanese, Korean and Russian.
  • Creating a truly global team — When we joined Facebook, our entire team moved from San Francisco to Menlo Park in California. Since then, we’ve expanded our horizons quite a bit. We’re now a global team with dedicated folks in London, Dublin, Paris, and Singapore. And we’re excited to continue expanding wherever mobile developers need help!

We hope you’re as excited as we are about these announcements and we appreciate you being part of our global community.

– Ilya Sukhar, Parse Founder and CEO

Ilya Sukhar
December 1, 2014

Parsing по всему миру

View this post in: English

Parsing All Over the Globe

Мы с соучредителями запустили Parse в 2011 году для решения наших собственных проблем. Нас смущала вся та скучная монотонная работа, которую нужно было выполнять, чтобы создать качественное межплатформенное мобильное приложение. Нашими первыми клиентами стали друзья, которые тоже создавали приложения и в большинстве своем жили по соседству с нами в Сан-Франциско. Со временем мы начали работать не только с друзьями, но и с настоящими клиентами — сначала только из Кремниевой долины, а потом и со всей Северной Америки. Сегодня Parse используется более чем для 500 000 приложений сотнями тысяч разработчиков за пределами Соединенных Штатов. Наша команда невероятно горда тем, что такое количество разработчиков со всего мира доверяют Parse свой бизнес и свои приложения. Ниже мы собрали немного интересной статистики о нашем присутствии в мире:

  • Количество активных приложений в странах Азии выросло на целых 90% в первой половине 2014 года
  • Количество приложений в Азиатско-Тихоокеанском регионе, использующих все три продукта Parse: Parse Core, Parse Push и Parse Analytics, выросло на 90% в первой половине 2014 года.
  • 6 из 15 стран, в которых наиболее распространены продукты Parse (по количеству активных приложений), находятся в Азии

Нас чрезвычайно вдохновляет то, как наше сообщество выросло с 2011 года. Поскольку рост становится все интенсивнее, сегодня я рад представить наши достижения, благодаря которым мы сделали продукцию Parse еще более доступной международному сообществу:

  • Локализация наших материалов Мы перевели техническую документацию и истории успеха наших клиентов на китайский (упрощенный и традиционный), японский, корейский и русский языки.
  • Создание по-настоящему интернациональной команды Когда мы присоединились к Facebook, вся наша команда переехала из Сан-Франциско в Менло-Парк в Калифорнии. С этого момента наши горизонты порядком расширились. На сегодняшний день в нашей команде работают замечательные люди из Великобритании, Франции и Сингапура. И мы с радостью продолжим расширяться, работая с мобильными разработчиками везде, где им требуется поддержка!

Мы надеемся, что эти новости воодушевляют вас так же, как и нас, и очень рады тому, что вы являетесь частью нашего международного сообщества.

– Илья Сухарь, основатель и генеральный директор Parse

Ilya Sukhar
December 1, 2014

전 세계를 향해 나아가는 Parse

View this post in: English

Parsing All Over the Globe

2011년, 저와 공동 창립인 일동은 멋진 플랫폼 간 모바일 앱을 빌드할 때 필요한 엄청난 반복 작업에 좌절하던 끝에 이를 해결하기 위한 도구인 Parse를 만들기 시작했습니다. 첫 고객은 대부분 샌프란시스코 근처에 살면서 앱을 빌드하던 친한 친구들이었지만, 시간이 지남에 따라 실리콘밸리의 친구들뿐 아니라 북미 전역에서 수많은 고객이 몰려들기 시작했습니다. 오늘날 Parse는 미국 외 지역의 수십만 명의 개발자와 500,000개 이상의 앱을 지원하고 있습니다. 전 세계의 수많은 개발자 여러분이 비즈니스와 앱을 위해 Parse를 이용해 주시는 데 대해 진심으로 감사하게 생각합니다. Parse에 보내주시는 뜨거운 성원을 보여주는 대표적인 수치는 다음과 같습니다.

  • 아시아에서 Parse를 활용하는 앱 수가 2014년 상반기에만 무려 90% 증가했습니다.
  • Parse Core, Parse Push, Parse Analytics 등 세 개의 Parse 제품을 모두 사용하는 APAC 앱 수가 2014년 상반기에 90% 증가했습니다.
  • Parse 이용률(액티브 앱 수 기준)이 가장 높은 15개 국가 중 6개가 아시아에 있습니다.

특히 2011년 이후 커뮤니티가 점점 커지고 있다는 점은 매우 반가운 소식입니다. 이러한 성장세가 가속화될 것으로 전망됨에 따라 국제 커뮤니티에 Parse를 더욱 가까이 소개하기 위해 노력해 온 내용을 기쁜 마음으로 공유하고자 합니다.

  • 콘텐츠 로컬라이제이션 – 기술 설명서와 고객 성공 사례를 한국어, 중국어(간체번체), 일본어, 러시아어로 번역했습니다.
  • 진정한 글로벌 팀 구축 – Facebook 합류 당시, 팀 전체가 샌프란시스코에서 캘리포니아 멘로파크로 들어온 이래 전 세계적인 도달의 폭을 넓혀 이제 영국, 프랑스, 싱가포르에 지사를 둔 글로벌 팀으로 성장했습니다. 앞으로도 모바일 개발자가 도움을 필요로 하는 곳이라면 어디로든 지속적으로 확장할 계획입니다!

이 모든 내용이 개발자 여러분께도 즐거운 소식이기를 바라며, Parse 글로벌 커뮤니티에 합류해주신 데 다시 한 번 감사드립니다.

– Ilya Sukhar, Parse 창립인 겸 CEO

Ilya Sukhar
December 1, 2014

Parse 風靡全球

View this post in: English

Parsing All Over the Globe

我和我的共同創辦人在 2011 年創立了 Parse,一開始只是為了解決自己的難題。當時,為了製作絕佳的跨平台行動應用程式,我們需要反覆執行同樣的工作,這令我們感到十分挫折。我們一開始的幾位客戶同樣都是開發應用程式的朋友,大多住在舊金山,離我們不遠的地方。漸漸地,我們開始吸引朋友以外的顧客上門,一路從矽谷擴展到整個北美洲。時至今日,已有超過 500,000 個應用程式使用 Parse,其中有成千上萬的開發人員來自美國以外的地區。在這世界上能有這麼多開發人員信任 Parse,願意運用在業務和應用程式中,我們的團隊為此感到無比榮幸。以下列出的統計數據十分亮眼,展現我們縱橫全球的實力:

  • 2014 上半年,亞洲地區有效運作的應用程式數字大幅飆升,成長率高達 90%
  • 2014 上半年,亞太地區使用 Parse 全部三種產品(Parse Core、Parse Push 及 Parse Analytics)的應用程式總數成長了 90%。
  • 依照有效運作的應用程式來計算,全球前 15 大使用 Parse 的國家,亞洲就佔了 6 個

社群人數自 2011 年後快速成長,我們十分樂見這份佳績,目前,使用人數的成長速度仍未放緩,我很榮幸在此與大家分享 Parse 努力耕耘的成果,也就是為國際社群創造一個更加友善的 Parse 平台:

  • 將內容本地化-我們將技術文件和顧客的成功案例翻成多種語言版本,包括簡體中文繁體中文日文韓文俄文
  • 建立真正的全球團隊-加入 Facebook 後,我們原先位於舊金山的整個團隊,全都搬到加州的門洛帕克(Menlo Park)。從那之後,我們大幅拓展了團隊的領域,目前已發展為全球團隊,在英國、法國及新加坡等地都有專職同仁。只要有行動開發人員需要協助,不論身在何處,我們都很樂意繼續拓展服務地點!


-Ilya Sukhar,Parse 創辦人兼執行長

Ilya Sukhar
December 1, 2014

Parse 风靡全球

View this post in: English

Parsing All Over the Globe

我和合伙创始人从 2011 年开始开发 Parse,用于解决自己遇到的难题:编写大型跨平台移动应用产生的令人崩溃的重复劳动。我们的第一批客户是一些也在编写应用的朋友,他们大多数住在旧金山,离我们很近。除了身边好友以外,随着时间推移,外来客户开始慕名而来,我们的业务足迹先踏入硅谷,然后遍布北美。如今,超过 50 万款应用在使用 Parse 平台,数十万的开发者位于美国本土以外。看到全球有如此多的开发者信赖 Parse 平台,用它来开发业务和应用,我们倍感荣幸。以下列举一些能有力说明 Parse 风靡全球的统计数据:

  • 2014 年上半年,亚洲活跃应用数量猛增 90%
  • 2014 年上半年,在亚太地区使用全部三款 Parse 产品 - Parse Core (Parse 核心)、Parse Push (Parse 推送) 和 Parse Analytics (Parse 分析) 的应用数量增长了 90%
  • 最广泛使用 Parse 的 15 个国家(按活跃应用数量计算)有 6 个位于亚洲

我们对 2011 年以来 Parse 社区的迅猛成长感到由衷兴奋。随着社区的加速成长,我在此荣幸地宣布,我们对 Parse 进行了修改,让世界各地的用户群体能更轻松地使用它:

  • 内容本地化 - 我们对技术文档和客户成功案例进行了本地化,推出中文(简体繁体)、日文韩文俄文版本。
  • 创建真正全球化的团队 - 加入 Facebook 以后,整个 Parse 团队从旧金山搬到了加利福尼亚州门洛帕克。自此之后,我们进行了一些扩充。现在,我们是一支在英国、法国和新加坡都拥有专职员工的全球化团队。而且我们仍会顺应移动应用开发者的需要,继续扩大规模。

我希望您在看到这些话时心中为之一振,我们非常欢迎您加入 Parse 的全球化社区。

Ilya Sukhar,Parse 创始人兼首席执行官

Ilya Sukhar
December 1, 2014


View this post in: English

Parsing All Over the Globe


  • アジアにおける利用アプリ数は2014年上半期で90%の急増
  • APACにおいて、Parseの3製品(Parse Core、Parse Push、Parse Analytics)すべてを利用したアプリ数は、2014年上半期で90%の増加
  • Parse利用アプリ数上位15か国のうち、6か国はアジア


  • コンテンツのローカライズ―技術文書と顧客成功事例を、中国語(簡体字および繁体字)、日本語韓国語ロシア語にローカライズしました。
  • 真のグローバルチームを結成―Facebook傘下に入ったことを機に、チーム本部をカリフォルニア州サンフランシスコからメンローパークに移転しました。さらに海外へも視野を広げ、現在は英国、フランス、シンガポールの各拠点にも専任スタッフを抱える、国際色豊かなチームとなっています。これからも、あらゆる国や地域のモバイル開発者の支えとなるよう、サポート体制を拡大してまいります。


―Parse創業者、CEO、Ilya Sukhar(イリヤ・スハール)

Ilya Sukhar
December 1, 2014