
рд╣реЗрд▓реЛ, рд╣реЗрдмрд░ рдХреЗ рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ!
рдореИрдВ iOS рдФрд░ Mac OS рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВ рдЕрдм рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд▓ рд╕реЗ рдлреНрд░реАрд▓рд╛рдВрд╕ рдореЗрдВ рд▓рдЧрд╛ рд╣реБрдЖ рд╣реВрдВ, рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рдУрд░ рдмрдврд╝рддреЗ рд╣реБрдП, рдореИрдВрдиреЗ рдиреЛрдЯрд┐рд╕ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдХрд┐ рдореИрдВ рдПрдХ рдмрд╛рд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдордЭрддрд╛ рд╣реВрдВ; рдФрд░ рдЬрдм рдПрдХ рд╕рдорд╛рди рдЖрджреЗрд╢ рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ, рддреЛ рдореИрдВ рдмрд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рд▓реЗрдЦ "рдиреЛрдЯреНрд╕ рдЖрдИрдУрдПрд╕ рдбреЗрд╡рд▓рдкрд░" рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдореИрдВ рдХреБрдЫ рдкрд╣рд▓реБрдУрдВ рдХреЛ рдЙрдЬрд╛рдЧрд░ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдЬреЛ рдЕрдХреНрд╕рд░ рдЖрджреЗрд╢реЛрдВ рдореЗрдВ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ; рдореИрдВ рдПрдХ рддрд░рд╣ рдХрд╛ рдзреЛрдЦрд╛ рдкрддреНрд░ рд▓рд┐рдЦреВрдВрдЧрд╛, рдЬрд┐рд╕реЗ рдкрдврд╝рдХрд░ рдЖрдк рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдирдИ рддрдХрдиреАрдХ рдХреЛ рдЬрд▓реНрджреА рд╕реЗ рдкреНрд░рд╕реНрддреБрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░реЗ рдиреЛрдЯ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреА рдЧрд╣рд░реА рд╕рдордЭ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рдордп рдкрд░ рдСрд░реНрдбрд░ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдмрддрд╛рддреЗ рд╣реИрдВред
рд╕рд╛рдордЧреНрд░реА:
- рднрд╛рдЧ 1: рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ; рд╕рд┐рдВрдЧрд▓рдЯрди рдЯреЗрдореНрдкрд▓реЗрдЯ; рдСрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ; рд╡реАрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ; рдЗрди-рдРрдк рдЦрд░реАрджрд╛рд░реА
- рднрд╛рдЧ 2: рдЦреБрдж рдХреЗ рдкреЙрдкрдЕрдк; рдиреЗрд╡рд┐рдЧреЗрд╢рди рдирд┐рдпрдВрддреНрд░рдХ рдореЗрдВ рдореЛрдбрд▓ рд╕реЗрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВ; рдХреЛрд░ рдЧреНрд░рд╛рдлрд┐рдХреНрд╕ UIWebView рдФрд░ рд╕реНрдХреНрд░реЙрд▓ рджреГрд╢реНрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
- рднрд╛рдЧ 3: рдСрдЯреЛрд▓рд╛рдпрдпрдЯ рдХреЗ рдмрд┐рдирд╛ рдЬреАрд╡рди; рд╕реНрдкрд▓реИрд╢ рд╕реНрдХреНрд░реАрди IOS 6+ рдореЗрдВ рдбрд┐рд╡рд╛рдЗрд╕ рдУрд░рд┐рдПрдВрдЯреЗрд╢рди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ; UITextField Content Shift
- рднрд╛рдЧ 4: Google Analytics; рд╕реВрдЪрдирд╛рдПрдВ рдкреБрд╢ рдХрд░реЗрдВ PSPDFKit; рдлреЗрд╕рдмреБрдХ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЖрд╡реЗрджрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ; рдорд┐рддреНрд░реЛрдВ рдХреЛ рдмрддрд╛рдПрдВ - рдлреЗрд╕рдмреБрдХ, рдЯреНрд╡рд┐рдЯрд░, рдИрдореЗрд▓
- рднрд╛рдЧ 5: рдХреЛрд░ рдбреЗрдЯрд╛; UITableView рдФрд░ UICollectionView
рдлрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
рдХрдИ рд╢реБрд░реБрдЖрддреА рдЖрдИрдУрдПрд╕ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдорд╕реНрдпрд╛ рдкрд░ рдареЛрдХрд░ рдЦрд╛рддреЗ рд╣реИрдВ: рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рд┐рдореНрдпреБрд▓реЗрдЯрд░ рдореЗрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХрд╛рдо рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рдлрд╝рд╛рдЗрд▓ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред Apple рдХреА рдиреАрддрд┐ рдпрд╣ рд╣реИ: рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдордЬрд╝реЗ рдХрд░рдиреЗ рдХрд╛ рдПрдХрдорд╛рддреНрд░ рд╕реНрдерд╛рди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдлрд╝реЛрд▓реНрдбрд░ рд╣реИред рдЖрдк рдХрд╣реАрдВ рд╕реЗ рднреА (рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЗ рднреАрддрд░) рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд▓рд┐рдЦреЗрдВред
рддреЛ, рдкрд╣рд▓реА рд╢реБрд░реБрдЖрдд рдореЗрдВ, рдЖрдкрдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ! рдЖрд╕рд╛рдиреА рд╕реЗ! рдЪрд▓рд┐рдП
Config.h рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдХрд░ рд╢реБрд░реВ
рдХрд░рддреЗ рд╣реИрдВ,
Your_App_Name-Prefix.pch рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ (рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЖрдкрдХреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреА рд╕рднреА рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЬреБрдбрд╝ рдЬрд╛рддреА рд╣реИ):
#import "Config.h"
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! рдЕрдм рд╕рдм рдХреБрдЫ
config.h рдореЗрдВ рдкреВрд░реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рд╣реИ! рдЖрдЗрдП рдЗрд╕ рдлрд╛рдЗрд▓ рдХреЛ рднрд░реЗрдВ:
#define pathToApplicationDirectory [[NSBundle mainBundle] bundlePath] // #define pathToDocuments [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject] // #define pathToSettings [[pathToDocuments URLByAppendingPathComponent:@"settings.plist"] path] // #define pathToPopups [[NSBundle mainBundle] pathForResource:@"popups" ofType:@"plist"] //
рдпрд╣ рд╕рдм рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣рдорд╛рд░реА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╣рдо рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ рдФрд░ рдЬрд╛рджреВ рд▓рд╛рдЗрдиреЛрдВ рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛)ред
рдЕрдм рдЖрдк рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
Settings.plist рдФрд░
popups.plist рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╣рдо рдЕрдХреНрд╕рд░ рдмрджрд▓ рджреЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдХреЙрдкреА рдЖрдЗрдЯрдо рдЖрд╡рд╢реНрдпрдХ рд╣реИред рд╣рдорд╛рд░реЗ
рдЖрд╡реЗрджрди рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ
: didFishishLaunchingWithOptions:
рдФрд░, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ,
placeResourcesToDocumentsDirectory рд╡рд┐рдзрд┐
рд╣реА:рдореБрдЭреЗ рдзрдХреНрдХрд╛ рджреЛ! - (void)placeResourcesToDocumentsDirectory:(NSDictionary *)resources {
рд╡рд╣ рд╕рдм рд╣реИ! рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рд╡рд╛рдВрдЫрд┐рдд рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рддрдирд╛ рд╕рд░рд▓ рдирд┐рдХрд▓рд╛, рд╣реИ рдирд╛? рдФрд░ рдЖрдк рдлрд╝рд╛рдЗрд▓ рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
NSMutableDictionary *settings = [NSMutableDictionary dictionaryWithContentsOfFile:pathToSettings]; settings[@"isThisAppCool"] = @YES; [settings writeToFile:pathToSettings atomically:YES];
рд╕рд┐рдВрдЧрд▓рдЯрди рдЯреЗрдореНрдкреНрд▓реЗрдЯ
рдпрд╣ рдПрдХ рдЫреЛрдЯрд╛ рд╕реНрдирд┐рдкреЗрдЯ рд╣реИ рдЬреЛ рдПрдХрд▓ рд▓реЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЖрдкрдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рдмрдирд╛ рд╕рдХрддрд╛ рд╣реИред
рд╕рд┐рдВрдЧрд▓рдЯрди :
рдореБрдЭреЗ рдзрдХреНрдХрд╛ рджреЛ! рд╕рд┐рдВрдЧрд▓рдЯрди :
рдореБрдЭреЗ рдзрдХреНрдХрд╛ рджреЛ! <...> @implementation Singleton + (Singleton *)sharedSingleton { static Singleton *sharedSingleton = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedSingleton = [[self alloc] init]; }); return sharedSingleton; } <...>
рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдордиреЗ рдПрдХ рдкрд░рд┐рднрд╛рд╖рд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рд╕рд░рд▓ рдХрд┐рдпрд╛ рд╣реИред рджреВрд╕рд░реЗ, рд╕рд┐рдВрдЧреНрд▓рдЯрди рд╡рд░реНрдЧ рдХреА рдПрдХ рд╕реНрдерд┐рд░ рд╡рд╕реНрддреБ рд╣реИред рддреАрд╕рд░рд╛,
рд╢реЗрдпрд░реНрд╕рд▓рд┐рдВрдЧрдЯрди рдХреНрд▓рд╛рд╕
рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ
, рд╣рдо рдпрд╛ рддреЛ рдПрдХ рдореМрдЬреВрджрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВрдЧреЗ рдпрд╛ рдПрдХ рдирдпрд╛ рд╢реБрд░реВ рдХрд░реЗрдВрдЧреЗред рд╣рдореЗрд╢рд╛ рдХреЗрд╡рд▓ рдПрдХ рд╕рд┐рдВрдЧрд▓рдЯрди рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛрдЧрд╛ред рдЪреМрдерд╛, рд╣рдорд╛рд░рд╛ рд╕рд┐рдВрдЧрд▓рдЯрди рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИ (рдзрдиреНрдпрд╡рд╛рдж
danilNik рдФрд░ рд╕рдВрдХреЗрдд рдХреЗ рд▓рд┐рдП
рдПрдВрдбреНрд░рдпреВрд╢рдореАрдЧ !)ред
рдСрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
рдпрд╣рд╛рдВ рд╣рдореЗрдВ AVFoundation рдврд╛рдВрдЪреЗ рд╕реЗ AVAudioPlayer рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣реИред рдСрдкрд░реЗрд╢рди рдХрд╛ рд╕рд┐рджреНрдзрд╛рдВрдд рд╕рд░рд▓ рд╣реИ: рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде AVAudioPlayer рд╡рд░реНрдЧ рдХрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рдПрдВ, рдЗрд╕реЗ рдкреНрд▓реЗрдмреИрдХ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХрд░реЗрдВ, рдФрд░ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рд▓реЙрдиреНрдЪ рдХрд░реЗрдВред рдЪрд▓реЛ рдПрдХ рд╕рд░рд▓ рд╕рд┐рдВрдЧрд▓рдЯрди рдмрдирд╛рдПрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдорд╛рд░реЗ рд╕рднреА рдСрдбрд┐рдпреЛ рдкреНрд▓реЗрдпрд░ рд╣реЛрдВрдЧреЗред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рдСрдбрд┐рдпреЛ рдкреНрд▓реЗрдпрд░ рд╣реЛрдВрдЧреЗ: рдПрдХ рдмреИрдХрдЧреНрд░рд╛рдЙрдВрдб рдореНрдпреВрдЬрд┐рдХ рдХреЗ рд▓рд┐рдП, рджреВрд╕рд░рд╛ рдПрдХ рдмрдЯрди рдХреНрд▓рд┐рдХ рдХреА рдЖрд╡рд╛рдЬ рдмрдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред
SimpleAudioPlayer.h рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВ:
рдореБрдЭреЗ рдзрдХреНрдХрд╛ рджреЛ! #import <Foundation/Foundation.h> #import <AVFoundation/AVFoundation.h> #define audioPlayer [SimpleAudioPlayer sharedAudioPlayer] @interface SimpleAudioPlayer : NSObject @property (nonatomic, retain) AVAudioPlayer *backgroundMusicPlayer; @property (nonatomic, retain) AVAudioPlayer *buttonSoundPlayer; + (SimpleAudioPlayer *)sharedAudioPlayer; @end
рдФрд░
SimpleAudioPlayer.m рдкрд░:
рдореБрдЭреЗ рдзрдХреНрдХрд╛ рджреЛ! #import "SimpleAudioPlayer.h" @implementation SimpleAudioPlayer static SimpleAudioPlayer *sharedAudioPlayer; + (SimpleAudioPlayer *)sharedAudioPlayer { static SimpleAudioPlayer *sharedAudioPlayer = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ sharedAudioPlayer = [[self alloc] init]; }); return sharedAudioPlayer; } - (id)init { self = [super init]; if (self) { [self initAudioPlayers]; } return self; } /*! , */ - (void)initAudioPlayers { NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:pathToBackgroundAudio]; self.backgroundMusicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil]; [self.backgroundMusicPlayer prepareToPlay]; self.backgroundMusicPlayer.numberOfLoops = -1; fileURL = [[NSURL alloc] initFileURLWithPath:pathToButtonAudio]; self.buttonSoundPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil]; [self.buttonSoundPlayer prepareToPlay]; }
рд╡рд╣ рд╕рдм рд╣реИред рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдкрде рдХреА рдкрд░рд┐рднрд╛рд╖рд╛
рдХреЙрдиреНрдлрд╝рд┐рдЧ рдореЗрдВ рд▓рд┐рдЦреА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╣рдордиреЗ рдкреГрд╖реНрдарднреВрдорд┐ рд╕рдВрдЧреАрдд рдХреА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛ред рдпрджрд┐ рдЖрдк рдЗрд╕ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдирдХрд╛рд░рд╛рддреНрдордХ рд╕рдВрдЦреНрдпрд╛ рд╕реЗрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рдЕрдВрддрд╣реАрди рд░реВрдк рд╕реЗ рджреЛрд╣рд░рд╛рдПрдЧреАред рдЖрдкрдХреЛ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП! рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛,
рддреИрдпрд╛рд░рдЯрд╛рдЗрдк рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордд рднреВрд▓рдирд╛ - рдпрджрд┐ рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реА рд╕рднреА рдСрдбрд┐рдпреЛ рдкреНрд▓реЗрдпрд░ рддреИрдпрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдСрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкрд╣рд▓реЗ рдкреНрд▓реЗрдмреИрдХ рд╕реЗ рдкрд╣рд▓реЗ рдереЛрдбрд╝реА рджреЗрд░реА рдирд╣реАрдВ рд╣реЛрдЧреАред рдФрд░ рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╣рдорд╛рд░реЗ рдСрдбрд┐рдпреЛ рдкреНрд▓реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
[audioPlayer.backgroundMusicPlayer play]; <...> [audioPlayer.backgroundMusicPlayer stop];
рд╡реАрдбрд┐рдпреЛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
рдЪрд▓реЛ MediaPlayer рдлреНрд░реЗрдорд╡рд░реНрдХ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЛ
viewDidAppear рд╡рд┐рдзрд┐ рдореЗрдВ рднреА рдЬреЛрдбрд╝рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
NSURL *url = [[NSURL alloc] initFileURLWithPath:pathToMovie]; MPMoviePlayerViewController *movieController = [[MPMoviePlayerViewController alloc] initWithContentURL:url]; [self presentMoviePlayerViewControllerAnimated:movieController]; [movieController.moviePlayer play];
рдпрд╣ рдХреЛрдб рдХреЗрд╡рд▓ рджрд┐рдП рдЧрдП URL рдкрд░ рд╡реАрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИред Apple рдХреЗ рд╡реАрдбрд┐рдпреЛ рдкреНрд▓реЗрдпрд░ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕рднреА рдмрдЯрди рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдкрдХреЛ рд╡реАрдбрд┐рдпреЛ рдкреНрд▓реЗрдпрд░ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рддреЛ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рдХреЛ рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдКрдкрд░ рдХреА рдЪрд╛рд░ рд▓рд╛рдЗрдиреЗрдВ рдиреНрдпреВрдирддрдо рд╡рд░реНрдг рд╕реЗрдЯ рд╣реИрдВред
рдЗрди-рдРрдк рдЦрд░реАрджрд╛рд░реА
рдЦреИрд░, рдЖрдЬ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд: рд╕реНрдЯреЛрд░ рдХреА рд░реВрдкрд░реЗрдЦрд╛! рд╕рдЪ рд╣реИ, рд╣рдо рд╕реАрдзреЗ рдЙрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди
MKStoreKit рдХреЗ рд╕рд╛рдеред рдорд╣рд╛рди рдврд╛рдВрдЪреЗ рдХреЗ рд▓рд┐рдП рдореБрдЧреБрдирдердХреБрдорд╛рд░ рдХреЛ рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж!
рдпрд╣ рд╕рд░рд▓ рд╣реИ: рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП
MKStoreKitConfigs.plist рдлрд╝рд╛рдЗрд▓ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ (рд╡рд╣рд╛рдВ рд╕рдм рдХреБрдЫ рд╕рд╣рдЬ рд╣реИ) рдФрд░ рдЦрд░реАрдж рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рдореНрди рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
if ([MKStoreManager isFeaturePurchased:@"me.identifier.coolapp.somesinglefeature"]) {
рдЦрд░реАрджрд╛рд░реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
[[MKStoreManager sharedManager] buyFeature:@"me.identifier.coolapp.somesinglefeature" onComplete:^(NSString* purchasedFeature, NSData* purchasedReceipt, NSArray* availableDownloads) { NSLog(@" : %@", purchasedFeature); } onCancelled:^ { NSLog(@" :( ."); }];
рдирд┐рд╖реНрдХрд░реНрд╖
рдЖрдЬ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЗрддрдирд╛ рд╣реАред рдпрд╣ рднрд╛рдЧ рдкрд╛рдпрд▓рдЯ рдерд╛, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓реЗрдЦреЛрдВ рдореЗрдВ рд╣рдо рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рд░реЛрдЪрдХ рдорд╛рдиреЗрдВрдЧреЗред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреЙрдк-рдЕрдк рд╡рд┐рдВрдбреЛ рдХреИрд╕реЗ рдмрдирд╛рдИ рдЬрд╛рдП рддрд╛рдХрд┐ рд╣рдорд╛рд░рд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рдЖрдкрдХреА рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХреЗ рдмрд┐рдирд╛ рд╕реАрдзреЗ .xib рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рдЕрдкрдирд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдмрджрд▓ рд╕рдХреЗред
рдореИрдВ рдЖрдкрдХреЛ
рдЕрдкрдиреЗ рд╣рдм рдХреЗрдВрджреНрд░ рдореЗрдВ рд▓реЗрдЦ рдХреА рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдФрд░ рдЕрд╢реБрджреНрдзрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВред
рдкреБрдирд╢реНрдЪ рдпрджрд┐ рдЖрдк рдореЗрд░реЗ рд╕рд╛рде рд╕рд╣рдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдореЗрд░реА рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓
рдкреНрд░рдореБрдЦ рдлреНрд░реАрд▓рд╛рдВрд╕рд░ рдПрдХреНрд╕рдЪреЗрдВрдЬреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкрд░ рд╣реИред
рдХреНрдпрд╛ рдореБрдЭреЗ "рдиреЛрдЯреНрд╕ рдЖрдИрдУрдПрд╕ рдбреЗрд╡рд▓рдкрд░" рд▓реЗрдЦреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЬрд╛рд░реА рд░рдЦрдиреА рдЪрд╛рд╣рд┐рдП? рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЕрдкрдиреА рд░рд╛рдп рд╡реНрдпрдХреНрдд рдХрд░реЗрдВред