System and method for data collection and analysis of information relating to mobile applications

A system and method are provided for data collection and analysis of information related to applications. Specifically, the developer of the application may install analytic software, which may be embodied as a software development kit (SDK), on an integrated development environment (“IDE”) associated with the developer, wherein the analytic software may be installed with a wizard-like interface having a series of easy to follow instructions. Once installed, the application, with the analytic software incorporated therein, may be provided and installed on a plurality of end user devices. Thereafter, the analytic software may work in conjunction with analytic processing logic to assist the developer in obtaining pertinent information related to bugs associated with the application that is being executed on an end user device.

TECHNICAL FIELD

The present disclosure relates generally to application debugging and, more particularly, to providing a developer of an application with pertinent information associated with errors, bugs, and/or defects associated with an application that is executing on an end user's mobile device.

BACKGROUND

Debugging is a process of finding and extracting bugs, error and/or defects (hereinafter generally “bugs”), in a computer program, such as an application, thus making the application behave as expected by the application developer. Conventionally, developers have been primarily limited to debugging applications prior to those applications being distributed to end users for installation on an end user's mobile device, e.g., a smart phone, personal digital assistant (PDA), tablet computer, etc. With the growth of applications that may be provided to end users across the world (e.g., mobile applications), developers have limited ways of receiving information as to what may cause specific bugs in the applications, while the application is being utilized by the end user and executed on an end user's device.

One technique is to have the developer provide a test group of end users with the application to obtain feedback and test results regarding the application prior to distributing the final version to all end users. Such testing, commonly referred to as “beta testing”, is a well known technique to identify certain bugs prior to the general release of a product.

Further, the developer may receive feedback from end users after the distribution of the final version; however, in such cases, the end users are required to take a proactive role in contacting the developer and informing them as to the issues they may have with the application when executed on the end user's device. In both scenarios, end user initiation is required (e.g., participating in the test group and/or contacting the developer). Further, the developer may not be provided with all pertinent and useful information regarding the bugs, the end user's device (e.g., type), and/or other information that may help the developer in understanding and remedying the bug so that the application behaves as expected.

SUMMARY

The disadvantages of the prior art are overcome by providing a system and method for data collection and analysis of information related to applications, and more specifically, mobile applications. Specifically, the developer of the application may install analytic software, which may be embodied as a software development kit (SDK), on an integrated development environment (“IDE”) associated with the developer, wherein the analytic software may be installed with a wizard-like interface having a series of easy to follow instructions. The analytic software may be any type of software associated with a SDK, such as an advertising framework, or any other framework, as known by those skilled in the art. Illustratively, the analytic software is installed in a source code format that may be integrated into the developer's source code for the application. During compilation and/or a build of the application, the analytic software is incorporated into the application. Once installed, the application, with the analytic software incorporated therein, may be provided and installed on a plurality of end user devices. Thereafter, the analytic software may work in conjunction with analytic processing logic to assist the developer in obtaining pertinent information related to bugs associated with the application that is being executed on the end user devices.

Specifically, in a first embodiment, particular debugging information, for example, a dSYM file, may be automatically sent from the developer's IDE to a web server over a network, wherein the web server may be managed by an analytic service provider. Specifically, this is accomplished because the analytic software was installed on the IDE, which in turn may automatically detect when a new dSYM is generated, may then de-duplicate the dSYM based on an identifier (to obtain the most current version of the dSYM), and may then automatically upload or send the particular debugging information from the IDE to the web server. A dSYM file may be created, as known by those skilled in the art, when an Xcode project is built. A dSYM may allow a user to strip debug symbols from the Xcode project. Specifically, when a user sends a “crashdump,” the developer with the dSYM file can use the original dSYM file to generate a proper “stacktrace,” as known by those skilled in the art, for debugging. Thereafter, an end user may experience a crash or other error, associated with the application that incorporates the analytic software therein, on the end user's device. The crash data may then be sent to the web server over the network. Analytic processing logic may then be used in conjunction with the debugging information, that was sent to the server, to “symbolicate” the crash data to obtain pertinent information associated with bugs of the application executing on the end user's device (e.g., source code file names, method names, and/or line numbers).

The developer may be notified, for example by receiving an email, that the crash data is available for the developer to review. The developer may then access the web server, managed by the analytic service provider, to view the pertinent information associated with the bugs of the application.

In a second embodiment, a developer may be reluctant in sending the particular debugging information (e.g., dSYM file) over the network to the web server due to regulatory or compliance constraints. In such a situation, an identifier, extracted from the debugging information that remains resident on the developer's system, is sent to the web server, wherein the identifier is associated with an address of the developer's system (e.g., IP address) and indexed. Thereafter, an end user may experience a bug associated with the application (the analytic software incorporated therein) on the end user's device, and the crash data may be sent to the web server over the network. The web server may then extract the same identifier from the crash data to identify the address of the developer's system. Analytic processing logic on the developer's system may then used in conjunction with the debugging information to “symbolicate” the crash data to obtain pertinent information associated with the bug of the application on end user's device (e.g., source code file names, method names, and line numbers). The pertinent information may then be sent to the web server, and the developer may be notified, for example by receiving an email, that the crash data may be available for the developer to review. The developer may then access the web server, managed by the analytic service provider, to view the pertinent information associated with the crash of the application.

It is noted, that a third embodiment may entail a system that has some developers utilizing the first embodiment and some developers utilizing the second embodiment, wherein the overall system is a “hybrid system” that functions to provide both capabilities.

Advantageously, a developer of an application may identify the particular location within the source code and other pertinent information associated with bugs that have occurred while the end user is utilizing or executing the application on an end user's device.

DESCRIPTION OF EXAMPLE EMBODIMENTS

A computer network is a geographically distributed collection of entities interconnected by communication links and segments for transporting data between end nodes, such as personal computers and workstations. Many types of networks are available, with the types ranging from Wi-Fi networks, cell phone networks, local area networks (LANs) to wide area networks (WANs). Wi-Fi is a mechanism for wirelessly connecting a plurality of electronic devices (e.g., computers, cell phones, etc.). A device enabled with Wi-Fi capabilities may connect to the Internet via a wireless network access point, as know by those skilled in the art. Cellular networks are radio network distributed over land areas called “cells”, wherein each cell may be served by at least one fixed-location transceiver known as a cell site or base station. When joined together, these cells may provide radio coverage over a wide geographic area. As known by those skilled in the art, this may enable a large number of portable transceivers (e.g., mobile phones) to communicate with each other. LANs typically connect the entities over dedicated private communications links located in the same general physical location, such as a building or campus. WANs, on the other hand, typically connect geographically dispersed entities over long-distance communications links, such as common carrier telephone lines, optical lightpaths, synchronous optical networks (SONET), or synchronous digital hierarchy (SDH) links. The Internet is an example of a WAN that connects disparate networks throughout the world, providing global communication between entities on various networks. The entities typically communicate over the network by exchanging discrete frames or packets of data according to predefined protocols, such as the Transmission Control Protocol/Internet Protocol (TCP/IP), Hypertext Transfer Protocol (HTTP). In this context, a protocol consists of a set of rules defining how the entities interact with each other and how packets and messages are exchanged.

FIG. 1is a schematic block diagram of an exemplary computing environment100in accordance with an illustrative embodiment of the present invention. Specifically, the computing environment100may include one or more integrated development environments (IDE)300coupled to one or more web servers200(managed by an analytic service provider), interconnected by one or more communication links105. Developer IDEs300, described further below in reference toFIG. 3, represent development environments utilized by application developers for creation of source code to be compiled, or otherwise built, to generate applications to be distributed for execution on end user device400. Illustratively, IDE300may implement an Xcode development environment. As known by those skilled in the art, Xcode is a suite of tools for developing software on a Macintosh (MAC) Operating System X (OS), developed by Apple Inc. While the present invention is described in relation to IDE300utilizing Xcode, it should be noted that the teaching of the present invention may be utilized with any development environment. Web server200, described further below in reference toFIG. 2, is illustratively utilized to enable distribution of the analytic software to IDE300, collection of data from IDE300and end user device400, as well as provides proper message passing among the various entities in environment100.

Further, end user device400, database110, analytic processing logic125, and storage device(s)115may be coupled to web servers200via communication link(s)107,130,135,140,145, and150, respectively. Storage device(s)115may for example store debugging information (e.g., dSYM file), among other data associated with the IDE300and end user device400. End user device400, described further below in reference toFIG. 4, may comprise any device capable of executing applications. Illustratively, end user device400may comprise a smart phone, a personal digital assistant and/or a tablet computer. Exemplary smart phones may utilize the Android operating system, available from Google, Inc., and/or the iOS system, available from Apple, Inc. It should be noted that other smart phones may be utilized in alternative embodiments. As such, the description herein directed to development for iOS systems should be taken as exemplary only.

It is noted that links105,107,130,135,140,145, and150are depicted inFIG. 1as separate and individual links for simplicity purposes, and that communications between the devices may occur over a single link (e.g., Internet), a plurality of links, or virtual links as know by those skilled in the art. Moreover, one or more web servers200, database110, analytic processing logic125, and storage device(s)115may all reside on a single device, or a plurality of devices, and managed by the analytic service provider. The devices are shown as separate entities inFIG. 1for simplicity purposes. Further, those skilled in the art will understand that any number of devices and/or links may be used in the computer environment, and that the view shown herein is for simplicity.

FIG. 2is a schematic block diagram of an exemplary web server200in accordance with an illustrative embodiment of the present invention. The web server200may comprise a plurality of network interfaces240, one or more processors220, storage device225, and a memory205interconnected by a system bus235. The network interfaces240contain the mechanical, electrical, and signaling circuitry for communicating data over physical links coupled to a network, such as links105,107,130,135,145, and140. The network interfaces may be configured to transmit and/or receive data using a variety of different communication protocols, including, inter alia, TCP/IP, UDP, ATM, SONET, HTTP, wireless protocols, Frame Relay, Ethernet, Fiber Distributed Data Interface (FDDI), etc. Notably, a physical network interface240may also be used to implement one or more virtual network interfaces, such as for Virtual Private Network (VPN) access, known to those skilled in the art.

The memory205comprises a plurality of locations that are addressable by the processor(s)220and the network interfaces240for storing software programs and data structures associated with the embodiments described herein. The processor240may comprise necessary elements or logic adapted to execute the software programs and manipulate the data structures. An operating system210, portions of which are typically resident in memory205and executed by the processor(s), functionally organizes the web server200by, inter alia, invoking network operations in support of software processes and/or services executing on the web server. A web server215, portions of which are typically resident in memory205are executed by the processor(s), functionally store and execute logical commands inputted by the analytic service provider and developers. For example, web server215may implement a website managed by the analytic service provider, wherein developers may access that web site to obtain pertinent information associated with their applications and information associated with bugs incurred on the developer's application executing on an end user device. It should be noted that any system for distribution of the analytic software, collection of debugging information and crash data, etc. may be utilized. As such, the description of a web server should be taken as exemplary only. In alternative embodiments, the various functionalities may be distributed among a plurality of servers. As such, the description of a single web server200should be taken as exemplary only.

A storage device225may store debugging information230, such as a dSYM file, that is sent, for example automatically, over the communication links from an IDE. Those skilled in the art will understand that a dSYM file may contain a plurality of mappings between memory offsets, such as addresses, and method names and line numbers associated with the built/compiled application created by the developer. The structure and information relating to a dSYM file and the functions associated therewith are well-known and described in more detail in “DWARF Debugging Information Format,” dated Jul. 27, 1993, the contents of which are hereby incorporated by reference. It will be apparent to those skilled in the art that other types of processors and memory, including various computer-readable media, may be used to store and execute program instructions pertaining to the techniques described herein. Also, while the embodiments herein are described in terms of processes or services stored in memory, alternative embodiments also include the processes described herein being embodied as modules consisting of hardware, software, firmware, or combinations thereof.

FIG. 3is a schematic block diagram of an exemplary IDE300in accordance with an illustrative embodiment of the present invention. The IDE may comprise a plurality of network interfaces340, one or more processors320, a memory305, a storage device325, and database355interconnected by a system bus335. The network interfaces340contain the mechanical, electrical, and signaling circuitry for communicating data over physical links coupled to a network, such as links105,107,130,135,140,145, and150. The network interfaces may be configured to transmit and/or receive data using a variety of different communication protocols, including, inter alia, TCP/IP, UDP, ATM, SONET, HTTP, wireless protocols, Frame Relay, Ethernet, Fiber Distributed Data Interface (FDDI), etc. Notably, a physical network interface340may also be used to implement one or more virtual network interfaces, such as for Virtual Private Network (VPN) access, known to those skilled in the art.

The memory305comprises a plurality of locations that are addressable by the processor(s)320and the network interfaces340for storing software programs and data structures associated with the embodiments described herein. The processor320may comprise necessary elements or logic adapted to execute the software programs and manipulate the data structures. An operating system310, portions of which are typically resident in memory305and executed by the processor(s), functionally organizes the IDE by, inter alia, invoking network operations in support of software processes and/or services executing on the web server.

A developer analytic module315, that is associated with the analytic service provider, portions of which are typically resident in memory305are executed by the processor(s), may functionally be installed onto IDE300by a user, such as a developer. The analytic module315may, for example, assist in gathering debugging information230associated with the developer's application on IDE300. A storage device325may store debugging information230, such as a dSYM file, that is associated with application330of the developer. Further, storage device325may also store the application330of the developer that may be written and compiled on IDE300by a developer, for example. An analytic library345and analytic source code350, that are associated with an analytic service provider, may be installed/incorporated within application330of the developer through use of an analytic installer, that is described in further detail with reference toFIG. 6andFIGS. 9-12.

Database355, is illustratively configured to store an index of the debugging information360that may be gathered by developer analytic module315. For example, database355may store an index of a URL of a dSYM file by an identifier, e.g., a universally unique identifier (UUID), associated with the debugging information230. In an illustrative embodiment, database355may be implemented using the well-known SQLite database, however, it should be noted that in alternative embodiments any type of data structure that permits indexing, including, e.g., hash tables, etc., may be used. As such, the description of a database should be taken as exemplary only. Also, while the embodiments herein are described in terms of processes or services stored in memory, alternative embodiments also include the processes described herein being embodied as modules consisting of hardware, software, firmware, or combinations thereof.

FIG. 4is a schematic block diagram of an exemplary end user device400in accordance with an illustrative embodiment of the present invention. End user device400may comprise any device capable of executing applications. Illustratively, end user devices400may comprise a smart phone, a personal digital assistant and/or a tablet computer. Exemplary smart phones may utilize the Android operation system, available from Google, Inc., and/or the iOS system, available from Apple, Inc. It should be noted that other smart phones may be utilized in alternative embodiments. As such, the description herein directed to the development for iOS systems should be taken as exemplary only. The end user device may comprise network interfaces440, one or more processors420, a memory405, a storage device425, and a cellular network card445interconnected by a system bus435. The network interfaces440and cellular network445contain the mechanical, electrical, and signaling circuitry for communicating data over physical links coupled to a network, such as links105,107,130,135,140,145, and150. The network interface440and cellular network card445may be configured to transmit and/or receive data using a variety of different communication protocols, including, inter alia, TCP/IP, UDP, ATM, SONET, HTTP, wireless protocols, Frame Relay, Ethernet, Fiber Distributed Data Interface (FDDI), etc. Notably, a physical network interface440may also be used to implement one or more virtual network interfaces, such as for Virtual Private Network (VPN) access, known to those skilled in the art.

The memory405comprises a plurality of locations that are addressable by the processor(s)420and the network interfaces440for storing software programs and data structures associated with the embodiments described herein. The processor420may comprise necessary elements or logic adapted to execute the software programs and manipulate the data structures. An operating system410, portions of which are typically resident in memory405and executed by the processor(s), functionally organizes the end user device by, inter alia, invoking network operations in support of software processes and/or services executing on the web server. An application450, that may have been created by a developer on an IDE, and portions of which are typically resident in memory405, are executed by the processor(s). Application450may be downloaded or installed on end user device400in any manner known to those skilled in the art. Further, application450includes analytic library455and analytic source code460that may have been incorporated within application450on IDE300by the developer. When the application450encounters a bug, crash data430associated with the bug and application (e.g., running processes, current RAM usage, IP address and network settings, physical orientation of the device in 3D space, among other aspects) may be created. Crash data430may be stored on storage device425. Such storage devices may be non-volatile random access memory, flash, micro HD, etc. Also, while the embodiments herein are described in terms of processes or services stored in memory, alternative embodiments also include the processes described herein being embodied as modules consisting of hardware, software, firmware, or combinations thereof.

B. Overview of Analysis of Bugs in Application

FIG. 5is a flowchart detailing the steps of an exemplary procedure500for providing a developer of an application pertinent information associated with bugs associated with the application that is executing on an end user's device in accordance with an illustrative embodiment of the present invention. The procedure500starts at step505and continues to step600, described below in reference toFIG. 6, where analytic source code and/or an analytic library is installed within the application on an IDE. In step1300, debugging information (e.g., version number, icon, dSYM file) may be locally stored on the IDE. In step510, particular debugging information, such as a dSYM file, may be automatically sent over a network, to web server200, and stored at storage device115. As explained above, the dSYM is capable of being automatically uploaded or sent to web server200due to the installation of the analytic source code an/or analytic library. Specifically, the integration of the analytic source code and/or analytic library may automatically detect when a new dSYM is generated on the IDE, de-duplicate the dSYM based on an identifier, and automatically upload or send the dSYM to the web server. As described further below, with reference toFIGS. 16-23, a plurality of different types of messages may be utilized to transmit the particular debugging information from the IDE to the storage device, and other entities as described above in reference toFIG. 1. The particular debugging information is typically generated when the application developer compiles a new version of the application, i.e., a new “build” of the application. For example, and as know by those skilled in the art, a developer may select a particular command, such as a “DWARF with dSYM file”, as a Debug Information Format in the build settings of an application (e.g., Xcode). A dSYM may then be generated automatically when the application is complied, wherein the dSYM file may be placed in the same destination, e.g., folder, as the resulting/compiled application file.

In step515, the application may be distributed and installed on end user devices, such as mobile phones or other entities. For example, the application may be downloaded on the end user device over a cellular network or any other type of network. For example, the application may be available to end users through libraries associated with particular end user devices (e.g., iTunes on an iPhone). The end user may then select the develop application from the library and download the application on the end user device. The end user may then utilize the application on his/her end user device. In other instances, the application may simply be available on a particular web site, that the user may find through conventional web based search techniques. After finding the application, the user may then download the application from the website and utilize the application on the end user device. As is known to those skilled in the art, applications may be available for installation on an end user device through various techniques, and the techniques described above are simply exemplary in nature.

In step520, the application may be launched, by an end user for example, on the end user device. The end user may then utilize the application, that includes the analytic library and/or the analytic software, on the end user device. The end user, may for example, go through a series of set up steps associated with whether crash detection and reporting should be enabled. For example, some user may determine that they do not want to enable crash detection and reporting for privacy reasons or other reasons. In such a case, the user of the end user device may indicate, utilizing a keypad associated with the end user device, that he/she wishes to disable crash detection and reporting on the end user device. Thereafter, for example when network connectivity is obtained (e.g., cell phone network or WIFI network), the preference indicated by the user may be transmitted to the web server. Thereafter, when the application incurs a bug, the crash data may remain on the end user device instead of sending the crash data to web server200for analytic processing.

In step525, the application on the end user device encounters a bug. For example, the application may crash unexpectedly or may behave in a manner not intended. In step530, crash data (e.g., running processes, current usage, network address and network settings, physical orientation of the device in 3D space, among other aspects) may be stored locally on the end user device. Thereafter, after network connectivity is obtained, the crash data may be sent and to web server200and stored at storage device115that is managed by the analytic service provider. For example, the end user device may be out of “range” (e.g., in a tunnel) if he is utilizing a device that is trying to connect to a cellular phone network. Alternatively, the end user device may be device, such a laptop or iPad, that has WIFI connection capabilities, but for whatever reason has lost its connection or is not connected to the WIFI network. In step1400, analytic processing, that may be associated with the analytic service provider and/or the IDE, may be performed on the crash data, utilizing the dSYM file associated with the application and stored on storage device115. Specifically, analytic processing logic125may be utilized by the analytic service provider to perform the processing as described in further detail with respect toFIG. 14. Alternatively, in step1500, analytic processing, associated with the IDE, may be performed on the crash data, utilizing the dSYM file associated with the application and stored locally on the IDE. Specifically, processor320of the IDE may be utilized to perform the analytic processing on the crash data as described in further detail with respect toFIG. 15. The procedure500then ends at step535.

C. Installation of Analytic Software

FIG. 6is a flowchart detailing the steps of an exemplary procedure600for installing analytic software, such as a software development kit (“SDK”), on an IDE300in accordance with an illustrative embodiment of the present invention. It is noted that the SDK may be analytic software or any type of SDK, such as an advertising framework. Further, it is noted that the analytic software may be obtained in a variety of ways. For example, the analytic software may be downloaded on the IDE from a library (e.g., iTunes), or downloaded from a website. In an alternate embodiment, the launcher may reside at a remote location, and may simply reside thereon wherein the IDE may have access to the analytic software via the Internet. The procedure600starts at step605and continues to step610, where an analytic installer is launched. For example, the analytic software may be launched utilizing a GUI or a command line interface (CLI), as known by those skilled in the art.

After the analytic software is launched, a developer may select an application with which the developer wishes to incorporate the analytic software on in step615.FIG. 7is an exemplary GUI window700displayed to a developer to enable selection of a application to be incorporated with the analytic software in accordance with an illustrative embodiments of the present invention. As shown inFIG. 7, a window700may be displayed to the developer of the IDE that allows the developer to choose the application. Specifically, window700may include a list of developer applications705, where a developer can choose a particular application from the list, that the developer wishes to associate the analytic software with. Further, window700may include an other button/tab710(e.g., or other mechanism as know by those skilled in the art to execute a process on a computing device), that may allow a developer to choose a different application than one on the list of developer applications705, that the developer wishes to associate the analytic software with. Further, the developer may select a sign-in button/tab720, that allows for an authentication procedure where the developer may provide a username and password to access particular information pertaining to applications associated with the developer. Moreover, after the user has selected a particular application (e.g., from the list or after selecting the other button/tab and choosing a particular application), the developer may select a next button/tab715, to proceed to the next step in installing the analytic software.

Referring back toFIG. 6, after an application has been selected in step615, the procedure continues to step620, where an analytic module may be integrated on the developer's IDE. The analytic module, for example, may assist in gathering debugging information on the IDE that is associated with the application on the developer's IDE.FIG. 8is an exemplary GUI window800displayed to a developer to enable integration of an analytic module on an IDE in accordance with an illustrative embodiment of the present invention. As shown inFIG. 8, window800may be displayed to the developer of the IDE that assists the developer in integrating the analytic module. Specifically, window800may include a new run script805that may be displayed to the developer where the new run script, associated with the analytic software, may be integrated by having the developer select the copy button/tab810. Specifically, the script may be copied into the Xcode build. It is noted that such a copy may be performed explicitly by the user, or may be automated. By incorporating the new run script into the Xcode build, particular information regarding the application may be extrapolated and gathered. Once the analytic module is integrated, next button/tab715may become clickable, so that the developer can proceed to the next phase in installing the analytic software. For example, if the new run script is not copied or not copied correctly, the next button/tab715may be unclickable, so that the user cannot proceed to the next phase until the new run script is copied correctly. Further, the developer may select a cancel button/tab815, if the developer wishes to cancel integrating the analytic module or cancel the installation process all together.

Referring back toFIG. 6, after the analytic module has been integrated in step620, the procedure continues to step625, where the developer may log into the system (e.g., web server215that is managed by the analytic service provider) so that the developer's activity and files/applications associated with the developer may be tracked. It is noted, that if the user logs in prior to integrating the analytic module, step625may be skipped.FIG. 9is an exemplary GUI window900displayed to a developer to enable the developer to log into the system in accordance with an illustrative embodiment of the present invention. As shown inFIG. 9, window900may be displayed to the developer that may allow the developer to log into the system, for example, web server215. Specifically, a developer may log into the system by providing an email address or other identifier that is unique to the developer in entry field905. Further, the developer may provide a password in entry910that may authenticate the developer. Authentication procedures are well known by those skilled in the art, and it is noted that any authentication procedure may be used. After the developer has provided the correct email address and password, the develop may click button/tab915to log into the system (e.g., web server215). If the email address and password are correct, the developer is authenticated and may have access to the system managed by the analytic service provider (e.g., web server215), and may further have access to particular information managed by the analytic servicer provider and associated with the application originally created on the developer's IDE, for example. However, if either the email address or password are incorrect, the developer may be denied access to the system, and may be prompted to enter the “correct” email address and/or password.

Referring back toFIG. 6, after the developer has logged in at step625, the procedure continues to step630, where the analytic library may be installed in the application selected by the developer's (e.g., selected in step615).FIG. 10is an exemplary GUI window1000displayed to a developer to enable installation of an analytic library on an application in accordance with an illustrative embodiment of the present invention. As shown inFIG. 10, window1000may be displayed to a developer that assists the user in installing the analytic library in the application selected by the user. Specifically, window1000may include a draggable icon1005that may be dropped “into” the selected application. This is accomplished by associating the draggable icon1005with an on-disk file path to the analytic library (i.e., which may be copied into application directory during a previous step). When the user initiates a drag operation, the file path may be placed on a Drag and Drop Pasteboard, as know by those skilled in the art, thus “tricking” the selected application into thinking that a file (e.g., the library) was dragged instead of the picture/icon. In a different embodiment, the analytic library may be installed automatically after the developer selects the application at step615. After the developer has installed the analytic library, the developer may select the next button/tab715, to proceed to the next phase in the installation of the analytic software. Alternatively, the developer may select the back button/tab1010to revert back to step625and view window900.

Referring back toFIG. 6, after the analytic library has been installed on the application in step630, the procedure continues at step635, where analytic source code may be installed in the application selected by the developer.FIG. 11is an exemplary GUI window1100displayed to a developer to enable installation of analytic source code on an application in accordance with an illustrative embodiment of the present invention. As shown inFIG. 11, a window1100may be displayed to the developer. Specifically, the developer may be displayed specific analytic software code1105that the user is to incorporate or install within the code associated with the application selected by the developer. After the developer has installed the analytic source code, the developer may select the next button/tab715, to proceed to the next phase in the installation of the analytic software. Alternatively, the developer may select the back button/tab1010to revert back to step630and view window1000.

After selecting the next button/tab715, the developer may be provided with another window1200, as shown inFIG. 12, that may display a header1205, for example, that the developer may incorporate or install within the code associated with the application as part of installing the analytic source code in the application selected by the developer. After it is determined that the analytic software has been installed correctly, a done button/tab1210may be clickable to complete the installation of the analytic software. Alternatively, the developer may select the back button/tab1010to revert back to window1100. It should be noted that the installation of the analytic source code and header may be done automatically after the application has been selected, wherein the developer will not be required to manually incorporate the source code or header. At step640, after the developer logs in the system, he may be provided, through a list, or by any other layout, information associated with applications associated with the developer, information associated with bug(s) incurred by the applications associated with the developer, and other information associated with the developer. Referring back toFIG. 6, after the analytic software has been installed in step635, procedure600ends at step645.

FIG. 13is a flowchart detailing the steps of an exemplary procedure for obtaining settings associated with crash detection and reporting for an end user's device400in accordance with an illustrative embodiment of the present invention. The procedure1300starts at step1305and continues to step1310, where it is determined whether the settings are cached at the end user's device. Such settings may relate to whether the user of the end user device has enabled crash detection and reporting for the end user device, whether crash reporting should first alert the user of the end user device (via a dialog for example) that information will be reported, message text and options for this type of dialog, the extent to which additional device state information is collected, and how long the settings should be cached on the end user device. Thus, the settings may indicate the manner in which the end user device interacts with the web server, managed by the analytic service provider, and what type of information may be provided from the end user device to the web server. For example, assume that the settings indicate that crash detection and reporting is enabled on the end user device. When the application incurs a bug while executing on the end user's device, crash data may be automatically sent from the end user device to the web server, as described above. Alternatively, assume that the settings indicate that crash detection and reporting is not enabled on the end user device. When the application incurs a bug while executing on the end user's device, crash data may not be sent from the end user device to the web server. If the settings are not cached on the end user's device, at step1325a request may be issued to the web server, managed by the analytic service provider, to obtain the settings regarding crash detection and reporting at the end user device utilizing an identifier associated with the end user and/or end user device. For example, a GET request of the HTTP protocol, as known by those skilled in the art, may be issued by the end user device to the web server utilizing a unique identifier associated with the end user device to obtain the settings. At step1330, the settings that are obtained from the server may be cached on the end user device for a time period indicated in the settings. However, if at step1310it is determined that the settings are in fact cached at the end user device, the cached settings regarding crash detection and reporting are obtained to determine the manner in which the end user device interacts with the web server and what type of information may be sent from the end user device to the web server. At step1320, the procedure ends. It is noted that other settings associated with end user device may be cached, and the particular settings are described above are simply exemplary in nature.

FIG. 14is a flowchart detailing the steps of an exemplary procedure1400for performing analytic processing on crash data in accordance with an illustrative embodiment of the present invention. Specifically, analytic processing may be managed by and associated with the analytic service provider. Procedure1400starts at step1405and continues to step1410where the web server may receive crash data from an end user device in response to the application on the end user device incurring a bug, and the crash data may then be stored in database110that is coupled to web server200. At step1415, the web server may extract an identifier (e.g., UUID) from the crash data to identify a particular debugging data structure (e.g., dSYM file) associated with the application that incurred the bug. At step1420, analytic processing logic125may then use the debugging data structure (e.g., dSYM file) to convert the crash data into results. For example, the analytic processing logic125may utilize the “dwarfdump” feature in conjunction with the debugging data structure, that is known by those skilled in the art, to convert the raw memory addresses present in the crash data into source code file names, method names, and line numbers, etc. Such information may be useful in rectifying the bug and learning more about what caused the bug. This process is commonly knows as “symbolication” by those skilled in the art. The DWARF debugging features are well-known and described in more detail in the previously incorporated by reference “DWARF Debugging Information Format,” dated Jul. 27, 1993. At step1425, the converted results may be stored in database110. At step1430, the developer of the application may be notified that information regarding a bug (e.g., the converted raw data) associated with the application is available for the developer's viewing. For example, it may be determined whether the bug has tripped one of the notification thresholds (e.g., a particular bug) and, if so, notify the developer via email. The developer may then access web server215, for example utilizing a login and password as described above, to view the results. Further, it is noted that bugs associated with an application may be given an impact score based on the number of crashes, the number people affected by the bug, the percentage of users affected, and other important criteria that may help signify the seriousness of the bug. This impact score may be provided to the developer through the web server215, thus allowing the developer to understand the “seriousness” of the bug. The procedure then ends at step1435.

FIG. 15is a flowchart detailing the steps of an exemplary procedure1500for performing analytic processing logic on crash data in accordance with an illustrative embodiment of the present invention. Specifically, the analytic processing logic may reside on the developer's IDE. This embodiment may be favored by developers who do not want to send debugging information over a network to the web server due to regulatory or compliance constraints. Procedure1500starts at step1505and continues to step1510where the web server may receive crash data from an end user device in response to the developer's application on the end user device incurring a bug, and the crash data may then be stored in database110that is coupled to web server200. At step1515, the web server may extract an identifier (e.g., UUID) from the crash data to identify a particular debugging data structure (e.g., dSYM file) associated with the developer's application that incurred the bug. At step1520, the extracted identifier is then used to identify an address (e.g., URL/IP address) associated with the developer's IDE. At step1525, a message may be sent to the developer, via email for example, informing the developer that a bug associated with the application needs to be processed. At step1530, analytic processing logic on the IDE may then use the debugging data structure (e.g., dSYM file) to convert the crash data into results. Such information may be useful in rectifying the bug and learning more about what caused the bug. For example, the analytic processing logic on the IDE may utilize the “dwarfdump” feature and in conjunction with the debugging data structure, that is known by those skilled in the art, to convert the raw memory addresses present in the crash data into source code file names, method names, and line numbers, etc. This process is commonly knows as “symbolication” by those skilled in the art. It can be assured that the “dwarfdump” feature is installed on the IDE because the IDE is the system that created the debugging data structure (e.g., dSYM file) associated with the developer's application in the first place. At step1535, the converted results may be sent to the web server and stored in database110. At step1540, the developer of the application may be notified that information regarding a bug associated with the developer's application is available for the developer's viewing. For example, it may be determined whether the bug has tripped one of the notification thresholds (e.g., a particular bug) and, if so, notify the developer via email. The developer may then access web server215, for example utilizing a login and password as described above, to view the results. The procedure then ends at step1545.

FIG. 16is an exemplary message1600that may be sent between the various entities of computing environment in accordance with an illustrative embodiment of the present invention. For example, message1600may be an HTTP message. Such HTTP messages may include POST, PUT, GET messages, as known by those skilled in the art and described in more detail in the Request for Comments (RFC) 2616, entitled “Hypertext Transfer Protocol—HTTP/1.1,” dated June 1999, the contents of which are hereby incorporated by reference. Specifically, the message1600may have a start-line field1605that may include a request-line for a request message that begins with a method token, or a status line for a response message consisting of the protocol version followed by a numeric status code and its associated textual phrase. Further, message1600may include a message header1610, and a Carriage Return Line Feed (CRLF) field1615, as known by those skilled in the art. Moreover, message1600may include a message body1620that is used to carry the entity-body associated with the request or response. For example, message body1620may carry the debugging information or the crash data.

FIG. 17is an exemplary message1700body that may be sent from a developer's IDE to a web server in accordance with an illustrative embodiment of the present invention. Specifically, the message body1700may be associated with an HTTP message. For example, message body1700may be associated with a POST HTTP message that an IDE may utilize to post specific information to the web servers200. Specifically, message body1700may send particular information, associated with the build of the developer's application on the IDE, from the IDE to the web server200. Such information may include version number1705, icon1710, debugging information (e.g., dSYM file)1715, and identifier1720associated with the debugging information. Further, it is noted that other fields1725and information may be within message body1700.

FIG. 18is an exemplary message body1800that may be sent from a developer's IDE to a web server in accordance with an illustrative embodiment of the present invention. For example, message body1800may be associated with a POST HTTP message that an IDE may utilize to post specific information to the web server200. Specifically, message body1800may send particular information, associated with the build of the developer's application on the IDE, from the IDE to the web server200. Such information may include an identifier1805extracted from debugging information and associated with developer's application, and an address1810associated with the developer's IDE (e.g., IP address). That information may then be stored on database110.

FIG. 19is an exemplary message body1900that may be sent from an end user device to a web server in accordance with an illustrative embodiment of the present invention. For example, message body1900may be associated with a POST HTTP message that an end user device may utilize to post specific information to the web servers200. Specifically, message body1900may send particular crash data associated with a bug of the developer's application being executed on the end user's device. Such information may include a field1905to store a state of the end user device, a field1910to store the processes running on the end user device, a field1915to store RAM used by the end user device, an IP address field1920to store an IP address associated with the end user device, a network settings field1925to store network settings associated with the end user device, and a physical orientation field1930to store a physical orientation of the end user device, when the developer's application incurs the bug. Further, it is noted that other crash data may be included in field1935.

FIGS. 20-22are exemplary messages that may be sent between a web server and a database in accordance with an illustrative embodiment of the present invention, such as mongoDB messages as known by those skilled in the art. Message2000for example, may have a header field2005, Full Collection Name field2010, flags field215, selector field2020, update/document field2025, and fields2030that may be used to transport other pertinent data, as known by those skilled in the art. Message2000may be used by the web server to update a document that is currently stored on the database. For example, information associated with the developer's IDE may change, where that information may need to be updated in database110. The message header2005may include identification information, such as the total size of the message, an identifier that uniquely identifies the message, and/or a type of the message. Further, the Full Collection Name field2010may be the concatenation of the database name with the collection name, using a “.” for the concatenation. For example, for the database “foo” and the collection “bar”, the full collection name may be “foo.bar”. The flags field2015may include a bit instruction as to how the database should utilize the received information. For example, if an “upsert” bit is set, the database may insert the supplied object in the collection if no matching document is found. Selector field2020may specify the query for selection of the document to update, and update/document field2025may specify the update to be performed.

FIG. 21is an exemplary message2100that may be sent between a web server and a database in accordance with an illustrative embodiment of the present invention. Specifically, message2100, such as a MongoDB message, may be sent from the database back to the web server for example, and may be referred to a database response message. Message2100may have a header field2105, response flags field2110, cursor ID field2115, a starting from field2120, number returned field2125, documents field2130, and fields2135that may be used to transport other pertinent data, as known by those skilled in the art. The message header2005may include identification information, such as the total size of the message, an identifier that uniquely identifies the message, and a type of the message. Further, response flag field2110may include a bit instruction how the database should utilize the received information. For example, a “QueryFailure” bit may be set when a query has failed. CursorID field2115may represent a cursor that the reply is a part of, as know by those skilled in the art. Starting from filed2120may indicate where in the cursor the reply is starting. Number returned field2125indicates a number of documents in the reply, and documents field2130indicates the specific documents.

FIG. 22is an exemplary messages2200that may be sent between a web server and a database in accordance with an illustrative embodiment of the present invention. Specifically, message2200, such as a MongoDB message, may be sent by the web server to query the database. Message2200may have a header field2205, flags field2210, Full Collection Name Field2215, a query field2220, and fields2225that may be used to transport other pertinent data, as known by those skilled in the art. The message header2005may include identification information, such as the total size of the message, an identifier that uniquely identifies the message, and a type of the message. Further, flags field2210may include a bit instruction as to how the database should utilize the received information. For example, a “SlaveOk” bit may be set to allow a query of replica slave, as known by those skilled in the art. Further, the Full Collection Name field2215may be the concatenation of the database name with the collection name, using a “.” for the concatenation. For example, for the database “foo” and the collection “bar”, the full collection name may be “foo.bar”. A query field2220may contain one or more elements, all of which must match for a document to be included in a set of results. Field2225may include other fields that are pertinent with a query request (e.g., number of documents to skip and a number of documents to return).

FIG. 23is an exemplary message2300that may be sent between a web server and analytic processing logic in accordance with an illustrative embodiment of the present invention. For example, message2300may be a PUT command of the beanstalk protocol, as known by those skilled in the art. Message2300may include a PRI field2305, delay field2310, TTR field2315, bytes field2320, data field2325, and fields2330that may be used to transport other pertinent data, as known by those skilled in the art. PRI field2305may be an integer representing a priority of the message2300, wherein the most urgent priority may be an integer value of 0. Delay field2310may be an integer number of seconds to wait before putting the job, e.g., PUT command, in a queue for processing. The job will be in a “delayed” state, during this time period. The TTR field2315may represent a “time to run” and may be an integer number of seconds to allow a worker (e.g., a worker thread) to run the job. For example, the time may be counted from the moment a worker reserves the job. Bytes field2320may be an integer value indicate the size of the job body, and data field2325may include the job body.

Advantageously, the embodiments disclosed herein provide methods for providing a developer of an application pertinent information associated with errors, bugs, or defects associated with the application that is executing on an end user's device.