2014年最新申请IDP账号的过程(含DUNS申请方法)

5月份接到公司要申请开发者账号的任务,就一直在各个论坛找申请的流程,但都是一些09年10年的比较旧的流程,现在都已经不适用了,好不容易找到2012年分享的流程吧,才发现申请过程中少了DUNS编码的步骤,又是一篇旧流程,于是唯有自己在申请的路上借鉴前辈的经验摸索着走下去,终于花一个月的时间把IDP账号申请下来了,现在的申请流程已经取消传真营业执照和 purchase form的步骤了,直接在申请的过程中填写就行,整个申请过程其实也没有说的那么难,所以我分享一下这次申请的过程,希望能帮到正在申请的同胞们~~

其实在开始申请前呢,我建议可以到support center了解一下申请的问题,这样可以减少好多困难嗒.

https://developer.apple.com/cn/support/ios/

我是要申请iOS developer program 的公司账号,在support center里有写关于DUNS编码的内容如下

IDP duns申请过程
所以要申请IDP账号前必须先拥有DUNS编码,如果没有申请过的话,可以到苹果提供的免费申请链接去申请.
https://developer.apple.com/ios/enroll/dunsLookupForm.action

听说很多人在中国地区申请是要交年费的,貌似费用还不低,这个链接是苹果公司提供的,绝对免费,大家不要去交冤枉钱。

说一下申请DUNS编码的情况吧,在填写申请DUNS的时候,要先把公司的信息翻译成英文的,填写的时候要用全英文填写,如果填写中文的话会识别不了的,填写完以后提交,如果是第一次注册的话,它会显示大概意思是说没找到你提交的公司信息,页面最下面会有选项叫你直接将刚才填写的内容提交到D&B注册DUNS编码,然后继续提交,接着页面会提示提交成功,并告诉你会在一段时间后收到D&B的邮件。好啦,接下来就是等待的时间了。这里要提醒的是,填写的过程中,所填写过的信息一定要真实并且要记住,必要时可以截图下来保存以免忘记,因为后面申请账号的时候,所填写的信息必须和这个一致,否则就会不通过~~~

一天后我就收到D&B发过来的邮件,内容如下:

Thank you for submitting your D-U-N-S Number request / update to D&B. It should be completed by 06/06/2013, or sooner.Your request id is: XXXXXX-XXXXX. A D&B representative may be contacting you directly. Your cooperation will help to expedite the resolution of this request.Please contact嬀攀洀愀椀氀=miniinvestigationsupport@dnb.com]miniinvestigationsupport@dnb.com[/email]椀昀 you have any questions.

要注意的是上面提供的一串数字还不是正式的编码,还不能使用的。

然后当天我就接到D&B打来的电话,基本上就是核实一下提交的信息,并告诉我很快就会发DUNS编码的邮件给我。挂完电话的当天下午,就收到D&B发过来的DUNS编码,那才叫效率啊!邮件内容如下:

Your D-U-N-S Number request/update submitted on 5/28/2013 with ID Number xxxxxx-xxxxx has been completed. You may start using your number in 14 days.D-U-N-S Number: xxxxxxxxx Resolution Description: New Record CreatedThe following information was submitted as part of your request:Business Name: SunZun Network Co.,LtdCity: ZhanJiang CityCountry: CHINA PEOPLES REPThank you for using D&B’s Mini Investigation Service.

要注意,邮件里后面的9位数字才是真正的DUNS编码,不过这个编码要14天才能生效,需要与苹果公司的数据库同步,这是个考验耐心的等待过程。曾经看过一些帖子说有些童鞋几天就生效了,也有童鞋说可以尝试一周试一次到开发者账号申请的页面填写,但不要在生效前试超过三次,否则账号会被锁定,为了安全起见,我还是耐心的等到了14天(其实是因为我要准备申请做开发者账号的邮箱还没审批下来啦,哈哈)。

我是美丽的分割线,啦啦啦,猫猫正在上班中,等一下再更新了。好消息好消息,刚接到苹果公司的电话,我申请的另一个ios developer enterprise program已通过审批,现在准备付款中,付款中……

开发者账号申请的过程

申请地址:https://developer.apple.com/cn/programs/ios/

进入链接后点击注册,然后继续再继续,可以看到以下页面,如果你已经拥有apple ID的话,可以选择使用已有的ID来进行下一步申请,没有的话就选择创建新的apple ID。个人建议还是注册一个新的专门用于开发者账号使用,我选择了注册新的apple ID。

IDP duns申请教程

选择以后,接下来会跳转到选择个人或公司的页面,我是申请公司的,所以选择了company。再接下来,如果你之前是选择用已有APPLE ID申请的话,就会跳转到登录页面,如果是选择创建新ID的话,就会跳转到申请APPLE ID的页面。我是跳转到申请APPLE ID的页面的,填写一些个人信息,这里我就不细说了,估计大家都会的,对吧。

IDP duns申请教程

好了,注册完APPLE ID以后,登录ID转回Ios developer program继续操作,会先让你选择一些公司准备要开发的一些信息,例如你要开发平台啊等等,然后选择是否有权代表公司操作,选择申请的计划等等,这些的顺序我有点忘记了,你就按照真实的来选择就行,接下来才是重点,就是填写你的公司名称、地址、网址、联系电话和duns编码等信息,记住必须与当时申请DUNS编码时填写的名称地址一样,连标点符号都必须一致,否则将有可能不通过,这样后面的工作就要拖延时间了,网址的话,我就纠结了一下,因为我们的网址好像过期了,但不管三七二十一,我照填上去,然后continue。以下是一些操作的截图(有些的忘记截下来了,我忏悔)

IDP duns申请教程

IDP duns申请教程

填写完毕以后,确认如上图,无误点击contin,如果,你填写的资料与duns的数据吻合,便会出现以下顺利通过验证的页面,你会得到enrollment ID,如果资料不吻合便会出现不匹配的英文字样,不通过的截图我就没有了,童鞋们可以到论坛里搜一下,会看到不通过的童鞋发上来的截图哈。所以说这一步相当的重要,只要这一步通过了,以后的就顺了。以下就是我顺利通过的页面,同时,苹果公司会发一封邮件到你的邮箱。

IDP duns申请教程

邮件的内容如下,接下来就是等待苹果公司的审核,大概一到两个工作日,苹果公司代表会打电话过来核实你提交的申请,童鞋们请放心,是说中文的哈

IDP duns申请教程

核实后的当天,苹果公司会发一封可以继续操作的邮件给你,也就是等于通过审核了,邮件的内容如下:

IDP duns申请教程

接下来,就到了付款的步骤了,在付款之前,先要同意一份合约,合约还蛮长的,我都没怎么看,都到了这个地步了,看不看都要同意的了,否则就无法进行下一步。

IDP duns申请教程

点击i agree以后,就进入purchase的步骤了,本来我还纳闷着怎么没见叫我传真营业执照就直接进入付款步骤了呢,而且还不用下载pdf的表格来填写,然后传真,原来这些传真的步骤都已经取消了,现在的流程简化了许多,减少了许多繁琐的步骤,之前我还愁着去哪里传真呢,好了,不废话了,先上图再解释。其实不难填写,不过记住选择好你要购买的项目,记得不要多选啊,我后来就是多选了,搞得申请延迟了几天通过。下面就是填写信用卡的信息,记住是个人的信用卡,必须支持国外付款的信用卡,说白了,也就是卡上带有“visa”“master”标志的信用卡。我由始至终都是用同一个人的名字来申请和付款的。

IDP duns申请教程

好了,都填写完毕以后,就可以点击continue了,接下来的页面是重复了刚才你所填写的信息,让你核对一遍,这里一定要一项项对清楚,确认没有选错和填错,千万别学我这么粗心呐,如果确认无误了,就点击最下面的place order,这样订单就算完成了,接着就看见大大“thank you”了,然后告诉你会在两个工作日完成扣款,并会发送一封激活账号的邮件到你邮箱。这时候正常来说就只要等待两天就可以了,可是我确在选择购买计划的时候,不知网络问题还是系统问题,导致我选择了两遍,最终订单显示我购买两次,需要扣198美刀,就为这个事,我快打破苹果支持热线,最终花了五个工作日确定扣款只扣了99美刀,苹果的服务还是不错滴~~~

IDP duns申请教程

终于,我收到苹果发给我关于成功扣款的邮件,同时也收到账号激活码的邮件,只要把激活码填到以下这个框框里,我的使命就终于完成了!!

IDP duns申请教程

IDP duns申请教程

How to create Custom Icons for your BlackBerry 10 Device

The thing I most miss about the Java based BlackBerry’s is decent Twitter apps – I really wish there was a Twitter app for BB10 that was as good as T4BB or one of the other choices, or as good as Blaq for the PlayBook. A close second to that though is theming – I was very disappointed when BlackBerry decided not to launch Theme Builder for BlackBerry 7, and far more disappointed when it was announced that there would be no BlackBerry 10 Theme Builder.
A small amount of customization can be contrived using apps like my recent Z Theme app, but that doesn’t let you modify the device icons. However, there is a way to create a shortcut for many of the existing applictions. For a more in-depth explanation of how these icons work, read this CrackBerry Forums post.
Creating your Custom Icons:
Step 0: Get BlackBerry Signing Keys and configure your PC for signing.
Step1: Download the templates from my Github: https://github.com/SCrid2000/BlackBerry-URI-Builder, and copy the templates you’d like to use into a folder on your desktop.
Step 2 (optional but recommended): Set up the signing tools. To make this easy, I have provided downloads for all needed signing tools. Get the signURI.bat and sideloadFile.bat files from github and put them into a folder with the signing tools contained at http://www.mediafire.com/?qq64yck165xtbwc.
You’ll need to open the .bat files with a text editor to add your Signing Key Password and BlackBerry IP/password to them.
Step 3: Get the icon you’d like to use. Resize it to be 114×114 pixels, and place it in the folder with the META-INF folder.
Step 4: Modify the MANIFEST.MF of the launcher you’d like to create. You will need to modify the following:
Package-Version: must be increased by at least 0.0.0.1 for each successive signing;
Application-Version: must match Package Version;
Archive-Asset-SHA-512-Digest: does not always need to be updated, but sometimes might cause signing to fail. Use a site like http://hash.online-convert.com/sha512-generator to get the appropriate SHA-512 hex for your image.

Other attributes can be modified if you’d like, such as Application-Name, Entry-Point, and others. However, this is unnecessary if you just use the templates included in the Github link above.
Step 5: Compress the icon.png you created and the META-INF folder containing the MANIFEST.MF file into a .zip file. Change the .zip extension to .bar
Step 6: Sign the URI by dragging it onto the signURI.bat

That’s it! Just do that for any icon you want a custom icon for, and sideload it to your BlackBerry!
Keep in mind that these are shortcuts, and will not replace the stock icon.

C++ and QML integration

QML is designed so that data can easily be passed to and from C++. You can use the classes in the Qt Declarative module to load and modify QML documents from C++. In addition, QML and C++ objects can easily communicate using Qt signals and slots.

There are a number of reasons that you might want to mix QML and C++ in your application. For example, you might have a data source for a list that you define in C++, while the visuals for the list are in QML. Or you might define your UI in QML, but you must access functionality in the Qt Declarative module or another Qt class.

Loading a QML document from C++

An image demonstrating for qml is passed to c++.Loading a QML document into C++ is a common way that Cascades applications are created. You can define your UI in QML, and then load it into your C++ application to be displayed for the user.

To load a QML document into an application, you create a QmlDocument object by callingQmlDocument::create() and specifying the QML asset that you want to load. To display the content of the QmlDocument, you retrieve the root node using QmlDocument::createRootObject(), and display the content using Application::setScene().

The following example demonstrates how to create a Cascades app using QML for the UI:

main.cpp

int main(int argc, char **argv)
{
    Application app(argc, argv);
    QmlDocument *qml = QmlDocument::create("asset:///main.qml").parent(&app);
    AbstractPane *root = qml->createRootObject<AbstractPane>();
    app.setScene(root);
    return Application::exec();
}

main.qml

Page {
    property alias labelText: label.text     
    Container {           
        Label {
            id: label
            text: "Label"
        
                      
        Button {
            objectName: "button"
            text: "Button"
        }                              
    }
}

After you load a QML document into C++, you can modify its properties usingQObject::setProperty(). The following example shows how you can change the text for thelabelText property:

root->setProperty("labelText", "New text");

In this example, we can change the text because we define an alias to the text property for the Labelat the root of the QML document. Without an alias to the label’s text property, the value is not accessible because it’s not located at the root of the QML document.

When you set the scene in an application, the root object must be a subclass of AbstractPane. However, the root node of the QML document that you want to load doesn’t need to be an AbstractPane subclass. For example, if your main.qml file includes a Container control at its root, you can load this document and create a scene to display it as follows:

QmlDocument *qml = QmlDocument::create("asset:///main.qml");
Container *c = qml->createRootObject<Container>();
Application::instance()->setScene(Page::create().content(c));

Accessing child objects

Since QML documents are organized in a tree hierarchy, another option for accessing child properties and objects is to search for the object by using QObject::findChild(). In this example, we do a search for the button and change its text property:

QObject *newButton = root->findChild<QObject*>("button");
if (newButton)
    newButton->setProperty("text", "New button text");

To be able to search for the object using findChild(), the button must have an objectName.

Exposing C++ values and objects to QML

An image demonstrating how to expose C++ to qml.There are often cases that require you to embed data from C++ into QML that you loaded into your application. A convenient way of passing C++ data or objects to QML is by using theQDeclarativePropertyMap class. This allows you to define key-value pairs in C++ that you can bind to QML properties.

For example, this is how you could use QDeclarativePropertyMap to pass a name and phone number to QML.

QmlDocument *qml = QmlDocument::create("asset:///main.qml");
QDeclarativePropertyMap* propertyMap = new QDeclarativePropertyMap;
propertyMap->insert("name", QVariant(QString("Wes Barichak")));
propertyMap->insert("phone", QVariant(QString("519-555-0199")));
qml->setContextProperty("propertyMap", propertyMap);

In your QML document, you can access the values by specifying the property name and the key that you define in C++.

Label {
    text: "User name: " + propertyMap.name
}
Label {
    text: "Phone number: " + propertyMap.phone
}

Since QDeclarativePropertyMap accepts QVariant objects, you can pass a QObject to QML this way as well.

Exposing C++ objects to QML

An image displaying the application running on the device.

In an application, it’s possible to create a C++ object and expose it to QML. Before you can pass a C++ object to QML, there are some important Qt macros that you need to implement in the header file for the C++ class.

  • Q_OBJECT is a required macro for classes that use the signals and slots mechanism.
  • Q_PROPERTY exposes a class property to QML. It also defines the read and write values from and to the property, as well as the signal that is emitted with the property is changed.
  • Q_INVOKABLE exposes member functions so that they can be invoked from QML.

In the example header below, the class has a Q_PROPERTY called value. It also has three functions;value(), setValue(), and reset(). The reset() function is invokable from QML using theQ_INVOKABLE macro. The header also defines the signal that is emitted when the value property changes.

#ifndef MYCPPCLASS_H_
#define MYCPPCLASS_H_
#include <QObject>
#include <QMetaType>
class MyCppClass : public QObject {
    Q_OBJECT
    Q_PROPERTY(int value READ value WRITE setValue NOTIFY valueChanged)
public:
    MyCppClass();
    virtual ~MyCppClass();
    Q_INVOKABLE void reset();
    int value();
    void setValue(int i);
signals:
    void valueChanged(int);
private:
    int m_iValue;
};
#endif

And this is how you could implement the resulting class.

#include "MyCppClass.h"
MyCppClass::MyCppClass()
{
    m_iValue = 0;
}
MyCppClass::~MyCppClass()
{
}
int MyCppClass::value()
{
    return m_iValue;
}
void MyCppClass::setValue(int i)
{
    m_iValue = i;
    emit valueChanged(m_iValue);
}
void MyCppClass::reset()
{
    m_iValue = 0;
    emit valueChanged(m_iValue);
}

To expose MyCppClass to QML, you create an instance of the class and use setContextProperty()to expose it.

MyCppClass *cppObject = new MyCppClass();
qml->setContextProperty("cppObject", cppObject);

From QML, you can access the Q_PROPERTY by using the property name that is defined in the header file. In the example below, the value property is displayed in the text property of a label.

Label {
  text: "Value of cppObject: " +  cppObject.value
}

From QML, you can also change the value of a Q_PROPERTY, connect slots to its signals, and callQ_INVOKABLE functions. In the example below, a button is used to increase the value property each time the user presses it. The button also defines a custom slot and connects it to the property’svalueChanged() signal. When the slot is invoked, the slot changes the text on the button. A reset button is also used, which calls MyCppClass::reset() to reset the value property.

Button {
    id: increaseButton
    text: "Increase the value"
    onClicked: {
        cppObject.valueChanged.connect
                (increaseButton.onCppValueChanged);
        cppObject.value = cppObject.value + 1;
    }
    function onCppValueChanged (val) {
        increaseButton.text = "Set value to " + (val + 1);
    }
}
Button {
    id: resetButton
    text: "Reset the value"
    onClicked: {
        cppObject.reset ()
    }
}
Label {
    id: valueLabel
    text: "The value is " + cppObject.value
}

Using C++ classes in QML

In some instances, instead of passing a C++ object or values to QML, you may want to use the C++ class in QML directly. In the Cascades framework, there are a few ways that you can use a C++ class in QML directly, whether it’s a class from the core Qt library, or a class that you define yourself:

In both cases, you must register the class for QML, by using qmlRegisterType().

Using the attachedObjects property

An image displaying the application running on the device.

Since the attachedObjects property is a member of UIObject, you can use it to attach a QObject to almost any Cascades QML component that has a visual representation. For example, if you want access to the functionality in the QTimer class, this is how you would register the class for use in QML:

qmlRegisterType<QTimer>("my.library", 1, 0, "QTimer");

After you register the QTimer class, you can create and manipulate QTimer objects within your QML document. In the following example, a QTimer object is attached to a Label. When the page is created, the timer is started. When the timer is complete, the text for the label is updated with new text.

import bb.cascades 1.0
import my.library 1.0
Page {
    Label {
        id: timerTestLabel
        text: "Hello world"
            
        attachedObjects: [
            QTimer {
                id: timer
                interval: 1000
                onTimeout :{
                    timerTestLabel.text = "Timer triggered"
                }
            }
        ]
    }
        
    onCreationCompleted: {
        timer.start();
    }
}

For another example demonstrating how to use the attachedObjects property in an application, see the Signals and slots tutorial.

Subclassing CustomControl

An image displaying the application running on the device.

By subclassing CustomControl, you can use your C++ class in a QML document without attaching it to another component using attachedObjects. In the following header file, a simple class calledTextControl is declared. TextControl is composed of a text property, functions to set and get thetext property, and a signal that is emitted when the text changes.

#include <QObject>
#include <QString>
#include <bb/cascades/CustomControl>
class TextControl : public bb::cascades::CustomControl
{
    Q_OBJECT
    Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged)
public:
    QString text();
    void setText(QString text);
signals:
    void textChanged();
};

To use the class in QML, first you must register the class.

qmlRegisterType<TextControl>("my.library", 1, 0, "TextControl");

After you register the class, you can import its library into a QML document, and use it the way you use any other QML component:

import bb.cascades 1.0
import my.library 1.0
Page {
    TextControl {
        text: "Custom text control"
    }
}

Injecting C++ objects into QML

An image displaying the application running on the device.

In previous sections, we’ve looked at how to define values and objects in C++ and use them in QML. We’ve also looked at how to expose C++ classes to QML as attached objects or custom controls. In this section, we’ll see how to create objects in C++ and inject them dynamically into QML.

Being able to inject C++ content into to QML is useful if you have a UI that is dynamically generated. For example, you might want the ability to add or remove containers from your screen during run time.

The first step is to provide an objectName for the QML component that you want to add content to (or remove from). In this case, content is going to be added to a Container.

Page {
    Container {
        objectName: "rootContainer"
    }
}

Next, you load the QML file into C++ and create a Page object using the root from the QML file. Once you have the root of the QML file, you use findChild() to search for the Container with the specified object name.

QmlDocument *qml = QmlDocument::create("main.qml");
// Sets the context property that we want to use from within QML.
// Functions exposed via Q_INVOKABLE will be found with this
// property name and the name of the function.
qml->setContextProperty("injection", this);
// Creates the root using the page node
Page *appPage = qml->createRootNode<Page>();
// Retrieves the root container from the page
Container *container = appPage->findChild<Container*>("rootContainer");

Now that you have the container you want to add content to, it’s just a matter of adding your content. Here’s how to add another container as the last child in the parent.

container->add(Container::create()
    .background(image)
    .preferredSize(200,200));

You aren’t restricted to just adding content though. If you wanted, you could remove components, replace components, or insert components at a specific index.

Here’s an example that demonstrates how to create containers in C++ and inject them into QML. The QML file contains a button that when clicked, calls a function in C++ that creates a new container and adds it to QML.

main.qml

import bb.cascades 1.0
Page {
    // Allows the user to scroll vertically
    ScrollView {
        scrollViewProperties {
            scrollMode: ScrollMode.Vertical
        }
        // Root container that containers from C++ are added to
        Container {
            objectName: "rootContainer"
            layout: StackLayout {}
            // Button that calls the C++ function to add a
            // new container. The selectedIndex from the drop down
            // is passed to C++.
            Button {
                text: "Add container"
                onClicked: {
                    injection.injectContainer();       
                }
            }
        }
    }
}

TestApp.cpp

#include "TestApp.hpp"
#include <bb/cascades/Application>
#include <bb/cascades/QmlDocument>
#include <bb/cascades/AbstractPane>
using namespace bb::cascades;
TestApp::TestApp(bb::cascades::Application *app)
: QObject(app)
{
    QmlDocument *qml = QmlDocument::create("asset:///main.qml").parent(this);
    qml->setContextProperty("injection", this);
    AbstractPane *root = qml->createRootObject<AbstractPane>();
    app->setScene(root);
}
void TestApp::injectContainer()
{
    // Creates the container and adds it to the root
    // container in qml
    mRootContainer->add(Container::create()
        .background(Color::Red)
        .preferredSize(200,200)
        .bottomMargin(20)
        .horizontal(HorizontalAlignment::Center));       
}

TestApp.hpp

#ifndef TestApp_HPP_
#define TestApp_HPP_
#include <QObject>
namespace bb { namespace cascades { class Application; }}
class TestApp : public QObject
{
    Q_OBJECT
public:
    TestApp(bb::cascades::Application *app);
    virtual ~Test() {}
    
    // By using Q_INVOKABLE we can call it from qml
    Q_INVOKABLE void injectContainer();
private:
    Page *appPage;
    Container *mRootContainer;
};
#endif /* Test_Hpp_ */

海因斯对 BB10 信心十足,认为其将取代笔记本电脑

来源:黑莓时光

 

纽约时报之前对 BlackBerry 的报道引起了众多反响,而海因斯在最近接受纽约时报的时候,表达了对 BlackBerry 10 的雄心壮志。他认为,BlackBerry 10 将会取代你的笔记本电脑。海因斯拍着自己放在口袋中的 BB10 说:以后,员工们进到办公室,将不再需要笔记本电脑,只需要把 BB10 接上显示器和键盘,就可以工作了,未来 3~5 年内你将不需要笔记本电脑了!不知道海因斯这样的信心,从何而来。

几点因素决定 BlackBerry 10 将巩固第三大移动平台地位

RIM 对于 BlackBerry 10 的市场定位比起 BlackBerry 7 时的“super Phone”来讲,明确了很多,那就是与微软的 Windows Phone 争夺 iOS 和 Android 之后的第三大移动平台。而这两歌阵营对已自己的形式都抱有很乐观的态度,比如著名的黑莓网站 BerryReview 就认为,有几点因素已经决定了 BlackBerry 10 几乎已经赢得了这场战争。大致概括一下原文分享给大家,这就好像美国大选,两方都说自己是拯救世界的强者,其实都难逃强词夺理之嫌,谁笑到最后还得销售出来见真章。

资讯来源:BerryReview

BerryReview  的 Brighton 最近听到一些开发者表示,宁可为 Windows Phone 开发应用,也不愿意再为 BlackBerry 10 开发,令他很不满意,他认为,短期来看,好像 Windows Phone 似乎占一些优势,但是用长远的眼光来看,还是赢不了 BlackBerry 的,主要原因有以下几点。

  • 1:BlackBerry 有 8000 万用户。

BlackBerry 的 8000 万用户应该是 RIM 最后的法宝了,Brighton 的观点是 BlackBerry 的 8000 万用户是微软不可比拟的,Windows Phone 总共才有 400 万的出货,8000 万用户每人换一台 BlackBerry 10,RIM 就赢了。

  • 2:BlackBerry 有广阔的国际市场。

别看在北美地区和欧洲地区 BlackBerry 形式差得很,但是在东南亚如印尼,马来西亚,又在非洲如尼日利亚等这些国家,BlackBerry 的普及率相当的高,几乎占据了半个以上的市场。而比起来微软在国际市场上的占有就不如 BlackBerry 了(这个结论不知道是怎么的出来的。)。

  • 3:BlackBerry 有深厚的品牌影响力。

Brighton 最后人为,BlackBerry 在消费者心中仍然有一个光明的形象,想比起来微软是做桌面 OS 的,转换到移动市场上来,专业度和给予消费者的信心都会不足。

综上三点,Brighton 认为开发者赢及早站好队伍,BlackBerry 一定会在这场战争中赢得最后的胜利。关于这些,你又怎么看呢?

第一个BlackBerry 10 Cascades应用

windows上的整体开发环境安装成功之后,就可以开发BlackBerry10 Cascades应用了。

下面进行第一个BlackBerry 10 Cascades应用。

1、首先打开IDE,然后File -> New -> BlackBerry Cascades C++ Project

BlackBerry 10 Cascades应用
2、然后输入项目名称,Next

BlackBerry 10 Cascades应用

3、选择模版,这里选择Cascades HelloWorld,然后Finish

BlackBerry 10 Cascades应用

4、新建完成之后,在左侧的Project Explorer里可以看到刚才新建的项目

BlackBerry 10 Cascades应用

5、在模拟器上运行该程序,需要启动模拟器,然后在项目上点击右键,如下图:

BlackBerry 10 Cascades应用

6、然后在项目上右键,选择Build Project,最后选择Run as -> BlackBerry C/C++ Application,稍等后即可在模拟器上看到运行结果,效果如下:

BlackBerry 10 Cascades应用

 

至此第一个BlackBerry 10 Cascades应用就完成了,其实BlackBerry 10 Cascades应用和PlayBook开发的相关配置等都是相同的,之前接触过PlayBook Native SDK开发的人员对于当前的Cascades开发会感到相当的熟悉。

接下来就该深入了解Cascades的相关开发了。

BlackBerry Cascades开发环境搭建(二)

根据黑莓世界大会中展示的BlackBerry 10 Dev Alpha来看,部分功能的确让人眼前一亮,例如:输入法的联想输入和照相机的功能。

而模拟器会是什么样子的呢?刚刚安装完模拟器之后,给我的第一感觉就是缩小版的PlayBook,无论是从界面还是手势等方面。

首先要安装VMware Player.  参考:

https://developer.blackberry.com/devzone/develop/simulator/simulator_systemrequirements.html

那下面来介绍下模拟器的安装。

1、下载模拟器安装文件

下载地址:https://bdsc.webapps.blackberry.com/cascades/download

BlackBerry 10 Dev Alpha Cascades

2、待安装文件下载完成之后,开始安装,点击Next

BlackBerry 10 Dev Alpha Cascades

3、选择我接受,继续Next

BlackBerry 10 Dev Alpha Cascades

4、选择安装路径,继续Next

BlackBerry 10 Dev Alpha Cascades

5、显示安装信息,Install

BlackBerry 10 Dev Alpha Cascades

6、开始安装

BlackBerry 10 Dev Alpha Cascades

7、安装成功

BlackBerry 10 Dev Alpha Cascades

8、打开安装路径,运行BlackBerry10Simulator.vmx

BlackBerry 10 Dev Alpha Cascades

9、启动模拟器,显示等待界面

BlackBerry 10 Dev Alpha Cascades

10、模拟器启动成功,可以看到界面了

BlackBerry 10 Dev Alpha Cascades

 

至此模拟器也就安装完成了,我们就可以开始开发第一个Cascades应用了。