background preloader

Develop for apple

Facebook Twitter

Xcode. Xcode is an integrated development environment (IDE) containing a suite of software development tools developed by Apple for developing software for OS X and iOS.

Xcode

First released in 2003, the latest stable release is version 5.1 and is available via the Mac App Store free of charge for Mac OS X Lion and OS X Mountain Lion users.[1] Registered developers can download preview releases and previous versions of the suite through the Apple Developer website.[2] Major features[edit] Previously Xcode supported distributing a product build process over multiple systems. One technology involved was called Shared Workgroup Build, which used the Bonjour protocol to automatically discover systems providing compiler services, and a modified version of the free software product distcc to facilitate the distribution of workloads. Software release life cycle. Software release life cycle map A software release life cycle is the sum of the stages of development and maturity for a piece of computer software: ranging from its initial development to its eventual release, and including updated versions of the released version to help improve software or fix bugs still present in the software.

Software release life cycle

Stages of development[edit] History[edit] Usage of the "alpha/beta" test terminology originated at IBM. As long ago as the 1950s (and probably earlier), IBM used similar terminology for their hardware development. Objective-C. Objective-C source code program files usually have .m filename extensions, while Objective-C header files have .h extensions, the same as for C header files.

Objective-C

History[edit] Objective-C was created primarily by Brad Cox and Tom Love in the early 1980s at their company Stepstone.[2] Both had been introduced to Smalltalk while at ITT Corporation's Programming Technology Center in 1981. The earliest work on Objective-C traces back to around that time.[3] Cox was intrigued by problems of true reusability in software design and programming. He realized that a language like Smalltalk would be invaluable in building development environments for system developers at ITT.

However, he and Tom Love also recognized that backward compatibility with C was critically important in ITT's telecom engineering milieu.[4] C (programming language) C is one of the most widely used programming languages of all time,[8][9] and C compilers are available for the majority of available computer architectures and operating systems.

C (programming language)

C is an imperative (procedural) language. It was designed to be compiled using a relatively straightforward compiler, to provide low-level access to memory, to provide language constructs that map efficiently to machine instructions, and to require minimal run-time support. C was therefore useful for many applications that had formerly been coded in assembly language, such as in system programming.

Despite its low-level capabilities, the language was designed to encourage cross-platform programming. Clang. It is designed to offer a complete replacement to the GNU Compiler Collection (GCC).

Clang

It is open-source,[3] and several major software development companies are involved, including Google and Apple. Its source code is available under the University of Illinois/NCSA License. The Clang project includes the Clang front end and the Clang static analyzer and several code analysis tools.[4] BSD licenses. BSD licenses are a family of permissive free software licenses, imposing minimal restrictions on the redistribution of covered software.

BSD licenses

This is in contrast to copyleft licenses, which have reciprocity share-alike requirements. The original BSD license was used for its namesake, the Berkeley Software Distribution (BSD), a Unix-like operating system. The original version has since been revised and its descendants are more properly termed modified BSD licenses. Terms[edit] Besides the original license used in BSD, there are several derivative licenses that are commonly referred to as a "BSD license". Compiler. A diagram of the operation of a typical multi-language, multi-target compiler A compiler is a computer program (or set of programs) that transforms source code written in a programming language (the source language) into another computer language (the target language, often having a binary form known as object code).[1] The most common reason for wanting to transform source code is to create an executable program.

Compiler

Program faults caused by incorrect compiler behavior can be very difficult to track down and work around; therefore, compiler implementors invest significant effort to ensure compiler correctness. The term compiler-compiler is sometimes used to refer to a parser generator, a tool often used to help create the lexer and parser. Intermediate language. In computer science, an intermediate language is the language of an abstract machine designed to aid in the analysis of computer programs.

Intermediate language

The term comes from their use in compilers, where the source code of a program is translated into a form more suitable for code-improving transformations before being used to generate object or machine code for a target machine. The design of an intermediate language typically differs from that of a practical machine language in three fundamental ways: Each instruction represents exactly one fundamental operation; e.g. "shift-add" addressing modes common in microprocessors are not present.Control flow information may not be included in the instruction set.The number of processor registers available may be large, even limitless. Object file. Object file formats[edit] An object file format is a computer file format used for the storage of object code and related data.

Object file

The design and/or choice of an object file format is a key part of overall system design. It affects the performance of the linker and thus programmer turnaround while developing. Machine code. Numerical machine code (i.e. not assembly code) may be regarded as the lowest-level representation of a compiled and/or assembled computer program or as a primitive and hardware-dependent programming language.

Machine code

While it is possible to write programs directly in numerical machine code, it is tedious and error prone to manage individual bits and calculate numerical addresses and constants manually. It is therefore rarely done today, except for situations that require extreme optimization or debugging. Machine code instructions[edit] Every processor or processor family has its own machine code instruction set.

Instructions are patterns of bits that by physical design correspond to different commands to the machine. Machine instructions are normally documented as having some explicit number of operands, such as a source and destination operand as for the 386 ADD instruction, but some instructions, such as the 386 CPUID instruction do not have any explicit operands. Parsing. Within computational linguistics the term is used to refer to the formal analysis by a computer of a sentence or other string of words into its constituents, resulting in a parse tree showing their syntactic relation to each other, which may also contain semantic and other information.

The term is also used in psycholinguistics when describing language comprehension. In this context, parsing refers to the way that human beings analyze a sentence or phrase (in spoken language or text) "in terms of grammatical constituents, identifying the parts of speech, syntactic relations, etc. " [2] This term is especially common when discussing what linguistic cues help speakers to interpret garden-path sentences. Parse tree. Notes on terminology[edit] The term parse tree itself is used primarily within the field of computational linguistics. Theoretical syntax tends to prefer the term syntax tree over parse tree. When diagramming sentences in school grammar, one refers to sentence diagrams. The sentence diagrams that one learns in middle school (Reed-Kellogg diagrams) are, however, much different from the parse trees of computational linguistics and syntax trees of theoretical linguistics.

Language interpretation. Language interpretation, or interpreting, is the facilitating of oral or sign-language communication, either simultaneously or consecutively, between users of different languages. Translation studies deal with the systematic study of the theory, the description and the application of language interpretation and translation.[1] An interpreter is a person who converts a thought or expression in a source language into an expression with a comparable meaning in a target language either simultaneously in "real time" or consecutively after one party has finished speaking.

The interpreter's function is to convey every semantic element (tone and register) and every intention and feeling of the message that the source-language speaker is directing to target-language recipients. Comparison to translation[edit] Despite being used in a non-technical sense as interchangeable, interpreting and translation are not synonymous. Lexical analysis. In computer science, lexical analysis is the process of converting a sequence of characters into a sequence of tokens, i. e. meaningful character strings.

Self-hosting. If a system is so new that no software has been written for it, then software is developed on another self-hosting system and placed on a storage device that the new system can read. Development continues this way until the new system can reliably host its own development. Development of the Linux operating system, for example, was initially hosted on a Minix system. Writing new software development tools "from the metal" (that is, without using another host system) is rare and in many cases impractical. Front and back ends. In network computing, front end can refer to any hardware that optimizes or protects network traffic. GNU General Public License. The GNU General Public License (GNU GPL or GPL) is the most widely used[5] free software license, which guarantees end users (individuals, organizations, companies) the freedoms to use, study, share (copy), and modify the software.

LLVM. The name LLVM was originally an initialism for Low Level Virtual Machine, but the initialism caused widespread confusion because the scope of the project is not limited to the creation of virtual machines. As the scope of LLVM grew, it became an umbrella project that included a variety of other compiler and low-level tool technologies as well, making the name even less apt. GNU Compiler Collection.